Add sreal to selftests
authorMartin Liska <mliska@suse.cz>
Wed, 20 Jul 2016 07:00:50 +0000 (09:00 +0200)
committerMartin Liska <marxin@gcc.gnu.org>
Wed, 20 Jul 2016 07:00:50 +0000 (07:00 +0000)
* selftest-run-tests.c (selftest::run_tests): New function.
* selftest.h (sreal_c_tests): Declare.
* sreal.c (sreal_verify_basics): New function.
(verify_aritmetics): Likewise.
(sreal_verify_arithmetics): Likewise.
(verify_shifting): Likewise.
(sreal_verify_shifting): Likewise.
(void sreal_c_tests): Likewise.
* gcc.dg/plugin/plugin.exp: Remove sreal test.
* gcc.dg/plugin/sreal-test-1.c: Remove.
* gcc.dg/plugin/sreal_plugin.c: Remove.

From-SVN: r238508

gcc/ChangeLog
gcc/selftest-run-tests.c
gcc/selftest.h
gcc/sreal.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/plugin/plugin.exp
gcc/testsuite/gcc.dg/plugin/sreal-test-1.c [deleted file]
gcc/testsuite/gcc.dg/plugin/sreal_plugin.c [deleted file]

index d3dfcc895a6997c4ea8948eae2c8fece0771f14e..2d767c8e7fe125c7f7330b91eb7d89106abd56dd 100644 (file)
@@ -1,3 +1,14 @@
+2016-07-20  Martin Liska  <mliska@suse.cz>
+
+       * selftest-run-tests.c (selftest::run_tests): New function.
+       * selftest.h (sreal_c_tests): Declare.
+       * sreal.c (sreal_verify_basics): New function.
+       (verify_aritmetics): Likewise.
+       (sreal_verify_arithmetics): Likewise.
+       (verify_shifting): Likewise.
+       (sreal_verify_shifting): Likewise.
+       (void sreal_c_tests): Likewise.
+
 2016-07-19  Jakub Jelinek  <jakub@redhat.com>
 
        PR rtl-optimization/71916
index bddf0b2d9a91fe0add7c6941a49bcc84f09bf093..bb004cc51673fd1e85059be8375ff96bc86fd430 100644 (file)
@@ -49,6 +49,7 @@ selftest::run_tests ()
   pretty_print_c_tests ();
   wide_int_cc_tests ();
   ggc_tests_c_tests ();
+  sreal_c_tests ();
 
   /* Mid-level data structures.  */
   input_c_tests ();
index 967e76bd2c8d333740e28b1526d832bc66a30c5c..c80538627670ad0f0587baa6eb3cd734479895a6 100644 (file)
@@ -86,6 +86,7 @@ extern void pretty_print_c_tests ();
 extern void rtl_tests_c_tests ();
 extern void spellcheck_c_tests ();
 extern void spellcheck_tree_c_tests ();
+extern void sreal_c_tests ();
 extern void tree_c_tests ();
 extern void tree_cfg_c_tests ();
 extern void vec_c_tests ();
index a7c9c12d66250bc8a2acc67b56c930482cf7ab8f..9c43b4eed21e20bd66a86d09b0e477ae90e22c1a 100644 (file)
@@ -52,6 +52,7 @@ along with GCC; see the file COPYING3.  If not see
 #include <math.h>
 #include "coretypes.h"
 #include "sreal.h"
+#include "selftest.h"
 
 /* Print the content of struct sreal.  */
 
@@ -233,3 +234,114 @@ sreal::operator/ (const sreal &other) const
   r.normalize ();
   return r;
 }
+
+#if CHECKING_P
+
+namespace selftest {
+
+/* Selftests for sreals.  */
+
+/* Verify basic sreal operations.  */
+
+static void
+sreal_verify_basics (void)
+{
+  sreal minimum = INT_MIN;
+  sreal maximum = INT_MAX;
+
+  sreal seven = 7;
+  sreal minus_two = -2;
+  sreal minus_nine = -9;
+
+  ASSERT_EQ (INT_MIN, minimum.to_int ());
+  ASSERT_EQ (INT_MAX, maximum.to_int ());
+
+  ASSERT_FALSE (minus_two < minus_two);
+  ASSERT_FALSE (seven < seven);
+  ASSERT_TRUE (seven > minus_two);
+  ASSERT_TRUE (minus_two < seven);
+  ASSERT_TRUE (minus_two != seven);
+  ASSERT_EQ (minus_two, -2);
+  ASSERT_EQ (seven, 7);
+  ASSERT_EQ ((seven << 10) >> 10, 7);
+  ASSERT_EQ (seven + minus_nine, -2);
+}
+
+/* Helper function that performs basic arithmetics and comparison
+   of given arguments A and B.  */
+
+static void
+verify_aritmetics (int64_t a, int64_t b)
+{
+  ASSERT_EQ (a, -(-(sreal (a))).to_int ());
+  ASSERT_EQ (a < b, sreal (a) < sreal (b));
+  ASSERT_EQ (a <= b, sreal (a) <= sreal (b));
+  ASSERT_EQ (a == b, sreal (a) == sreal (b));
+  ASSERT_EQ (a != b, sreal (a) != sreal (b));
+  ASSERT_EQ (a > b, sreal (a) > sreal (b));
+  ASSERT_EQ (a >= b, sreal (a) >= sreal (b));
+  ASSERT_EQ (a + b, (sreal (a) + sreal (b)).to_int ());
+  ASSERT_EQ (a - b, (sreal (a) - sreal (b)).to_int ());
+  ASSERT_EQ (b + a, (sreal (b) + sreal (a)).to_int ());
+  ASSERT_EQ (b - a, (sreal (b) - sreal (a)).to_int ());
+}
+
+/* Verify arithmetics for interesting numbers.  */
+
+static void
+sreal_verify_arithmetics (void)
+{
+  int values[] = {-14123413, -7777, -17, -10, -2, 0, 17, 139, 1234123};
+  unsigned c = sizeof (values) / sizeof (int);
+
+  for (unsigned i = 0; i < c; i++)
+    for (unsigned j = 0; j < c; j++)
+      {
+       int a = values[i];
+       int b = values[j];
+
+       verify_aritmetics (a, b);
+      }
+}
+
+/* Helper function that performs various shifting test of a given
+   argument A.  */
+
+static void
+verify_shifting (int64_t a)
+{
+  sreal v = a;
+
+  for (unsigned i = 0; i < 16; i++)
+    ASSERT_EQ (a << i, (v << i).to_int());
+
+  a = a << 16;
+  v = v << 16;
+
+  for (unsigned i = 0; i < 16; i++)
+    ASSERT_EQ (a >> i, (v >> i).to_int());
+}
+
+/* Verify shifting for interesting numbers.  */
+
+static void
+sreal_verify_shifting (void)
+{
+  int values[] = {0, 17, 32, 139, 1024, 55555, 1234123};
+  unsigned c = sizeof (values) / sizeof (int);
+
+  for (unsigned i = 0; i < c; i++)
+    verify_shifting (values[i]);
+}
+
+/* Run all of the selftests within this file.  */
+
+void sreal_c_tests ()
+{
+  sreal_verify_basics ();
+  sreal_verify_arithmetics ();
+  sreal_verify_shifting ();
+}
+
+} // namespace selftest
+#endif /* CHECKING_P */
index 47ca52628641a19e33f9a9c147420e9fc7deb078..7f42fad40647a6b6a30c526497e4dcdc64219c88 100644 (file)
@@ -1,3 +1,9 @@
+2016-07-20  Martin Liska  <mliska@suse.cz>
+
+       * gcc.dg/plugin/plugin.exp: Remove sreal test.
+       * gcc.dg/plugin/sreal-test-1.c: Remove.
+       * gcc.dg/plugin/sreal_plugin.c: Remove.
+
 2016-07-19  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/71902
index f039c8de35f6fd38ba83b4cc4942c6bde40236cc..faebb75d114474b4044eddce30a4c0cc44aa1d7b 100644 (file)
@@ -59,7 +59,6 @@ set plugin_test_list [list \
     { selfassign.c self-assign-test-1.c self-assign-test-2.c } \
     { ggcplug.c ggcplug-test-1.c } \
     { one_time_plugin.c one_time-test-1.c } \
-    { sreal_plugin.c sreal-test-1.c } \
     { start_unit_plugin.c start_unit-test-1.c } \
     { finish_unit_plugin.c finish_unit-test-1.c } \
     { wide-int_plugin.c wide-int-test-1.c } \
diff --git a/gcc/testsuite/gcc.dg/plugin/sreal-test-1.c b/gcc/testsuite/gcc.dg/plugin/sreal-test-1.c
deleted file mode 100644 (file)
index 1bce2cc..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-/* Test that pass is inserted and invoked once. */
-/* { dg-do compile } */
-/* { dg-options "-O" } */
-
-int main (int argc, char **argv)
-{
-  return 0;
-}
diff --git a/gcc/testsuite/gcc.dg/plugin/sreal_plugin.c b/gcc/testsuite/gcc.dg/plugin/sreal_plugin.c
deleted file mode 100644 (file)
index f113816..0000000
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Plugin that process internal tests for sreal.  */
-#include "config.h"
-#include "gcc-plugin.h"
-#include "system.h"
-#include "coretypes.h"
-#include "tree.h"
-#include "tm.h"
-#include "toplev.h"
-#include "hash-table.h"
-#include "vec.h"
-#include "ggc.h"
-#include "basic-block.h"
-#include "tree-ssa-alias.h"
-#include "internal-fn.h"
-#include "gimple-fold.h"
-#include "tree-eh.h"
-#include "gimple-expr.h"
-#include "is-a.h"
-#include "gimple.h"
-#include "tree-pass.h"
-#include "intl.h"
-#include "context.h"
-#include "sreal.h"
-
-int plugin_is_GPL_compatible;
-
-namespace {
-
-static void assert (bool c)
-{
-  if (!c)
-    abort ();
-}
-
-const pass_data pass_data_sreal_pass =
-{
-  GIMPLE_PASS, /* type */
-  "sreal", /* name */
-  OPTGROUP_NONE, /* optinfo_flags */
-  TV_NONE, /* tv_id */
-  PROP_gimple_any, /* properties_required */
-  0, /* properties_provided */
-  0, /* properties_destroyed */
-  0, /* todo_flags_start */
-  0, /* todo_flags_finish */
-};
-
-class sreal_pass : public gimple_opt_pass
-{
-public:
-  sreal_pass(gcc::context *ctxt)
-    : gimple_opt_pass(pass_data_sreal_pass, ctxt)
-  {}
-
-  /* opt_pass methods: */
-  virtual bool gate (function *);
-  virtual unsigned int execute (function *);
-
-private:
-  void check_sreal ();
-
-  static void verify_aritmetics (int a, int b);
-  static void verify_shifting (int a);
-}; // class one_pass
-
-} // anon namespace
-
-void
-sreal_pass::verify_aritmetics (int a, int b)
-{
-  assert (a == -(-(sreal (a))).to_int ());
-  assert ((a < b) == (sreal (a) < sreal (b)));
-  assert ((a <= b) == (sreal (a) <= sreal (b)));
-  assert ((a == b) == (sreal (a) == sreal (b)));
-  assert ((a != b) == (sreal (a) != sreal (b)));
-  assert ((a > b) == (sreal (a) > sreal (b)));
-  assert ((a >= b) == (sreal (a) >= sreal (b)));
-  assert ((a + b) == (sreal (a) + sreal (b)).to_int ());
-  assert ((a - b) == (sreal (a) - sreal (b)).to_int ());
-  assert ((b + a) == (sreal (b) + sreal (a)).to_int ());
-  assert ((b - a) == (sreal (b) - sreal (a)).to_int ());
-}
-
-void
-sreal_pass::verify_shifting (int a)
-{
-  sreal v = a;
-
-  for (unsigned i = 0; i < 16; i++)
-    assert ((a << i) == (v << i).to_int());
-
-  a = a << 16;
-  v = v << 16;
-
-  for (unsigned i = 0; i < 16; i++)
-    assert ((a >> i) == (v >> i).to_int());
-}
-
-void
-sreal_pass::check_sreal ()
-{
-  sreal minimum = INT_MIN;
-  sreal maximum = INT_MAX;
-  sreal seven = 7;
-  sreal minus_two = -2;
-  sreal minus_nine = -9;
-
-  assert (minimum.to_int () == INT_MIN);
-  assert (maximum.to_int () == INT_MAX);
-
-  assert (!(minus_two < minus_two));
-  assert (!(seven < seven));
-  assert (seven > minus_two);
-  assert (minus_two < seven);
-  assert (minus_two != seven);
-  assert (minus_two == minus_two);
-  assert (seven == seven);
-
-  assert (seven == ((seven << 10) >> 10));
-
-  assert ((seven + minus_two) == 5);
-  assert ((seven + minus_nine) == -2);
-
-  for (int a = -100; a < 100; a++)
-    for (int b = -100; b < 100; b++)
-      {
-        verify_aritmetics (a, b);
-        verify_aritmetics (INT_MIN + 100, b);
-        verify_aritmetics (INT_MAX - 100, b);
-      }
-
-  srand (123456);
-
-  for (int i = 0; i < 1000 * 1000; i++)
-    {
-      verify_aritmetics (rand () % 10, rand () % 1000000);
-      verify_aritmetics (rand () % 100, rand () % 10000);
-    }
-
-  for (int a = -100; a < 100; a++)
-    verify_shifting (a);
-}
-
-bool sreal_pass::gate (function *)
-{
-  return true;
-}
-
-unsigned int
-sreal_pass::execute (function *)
-{
-  check_sreal ();
-
-  return 0;
-}
-
-int plugin_init (struct plugin_name_args *plugin_info,
-                 struct plugin_gcc_version *version)
-{
-  struct register_pass_info p;
-
-  p.pass = new sreal_pass (g);
-  p.reference_pass_name = "cfg";
-  p.ref_pass_instance_number = 1;
-  p.pos_op = PASS_POS_INSERT_AFTER;
-
-  register_callback ("sreal", PLUGIN_PASS_MANAGER_SETUP, NULL, &p);
-
-  return 0;
-}