This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 1/2] Add sreal to selftests


gcc/ChangeLog:

2016-07-12  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.

gcc/testsuite/ChangeLog:

2016-07-12  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.
---
 gcc/selftest-run-tests.c                   |   1 +
 gcc/selftest.h                             |   1 +
 gcc/sreal.c                                | 112 +++++++++++++++++++
 gcc/testsuite/gcc.dg/plugin/plugin.exp     |   1 -
 gcc/testsuite/gcc.dg/plugin/sreal-test-1.c |   8 --
 gcc/testsuite/gcc.dg/plugin/sreal_plugin.c | 170 -----------------------------
 6 files changed, 114 insertions(+), 179 deletions(-)
 delete mode 100644 gcc/testsuite/gcc.dg/plugin/sreal-test-1.c
 delete mode 100644 gcc/testsuite/gcc.dg/plugin/sreal_plugin.c

diff --git a/gcc/selftest-run-tests.c b/gcc/selftest-run-tests.c
index bddf0b2..bb004cc 100644
--- a/gcc/selftest-run-tests.c
+++ b/gcc/selftest-run-tests.c
@@ -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 ();
diff --git a/gcc/selftest.h b/gcc/selftest.h
index 967e76b..c805386 100644
--- a/gcc/selftest.h
+++ b/gcc/selftest.h
@@ -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 ();
diff --git a/gcc/sreal.c b/gcc/sreal.c
index a7c9c12..9c43b4e 100644
--- a/gcc/sreal.c
+++ b/gcc/sreal.c
@@ -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 */
diff --git a/gcc/testsuite/gcc.dg/plugin/plugin.exp b/gcc/testsuite/gcc.dg/plugin/plugin.exp
index f039c8d..faebb75 100644
--- a/gcc/testsuite/gcc.dg/plugin/plugin.exp
+++ b/gcc/testsuite/gcc.dg/plugin/plugin.exp
@@ -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
index 1bce2cc..0000000
--- a/gcc/testsuite/gcc.dg/plugin/sreal-test-1.c
+++ /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
index f113816..0000000
--- a/gcc/testsuite/gcc.dg/plugin/sreal_plugin.c
+++ /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;
-}
-- 
2.8.4



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]