[goffice] test-quad: test floor



commit 39c4c87a893c1e3952c4d89b22507b3a1b7c7e84
Author: Morten Welinder <terra gnome org>
Date:   Tue Nov 5 14:34:42 2013 -0500

    test-quad: test floor

 tests/test-quad.c |  105 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 105 insertions(+), 0 deletions(-)
---
diff --git a/tests/test-quad.c b/tests/test-quad.c
index 886d5ff..a8a3a80 100644
--- a/tests/test-quad.c
+++ b/tests/test-quad.c
@@ -1,6 +1,22 @@
 #include <goffice/goffice.h>
 
 
+#define UNTEST1(a_,QOP,OP,txt)                                         \
+do {                                                                   \
+       double a, p;                                                    \
+       GOQuad qa, qc;                                                  \
+       a = (a_);                                                       \
+       go_quad_init (&qa, a);                                          \
+       QOP (&qc, &qa);                                                 \
+       p = OP (a);                                                     \
+       g_printerr ("%s(%g) = %g  [%g]\n",                              \
+                   txt, a, go_quad_value (&qc), p);                    \
+       if (p == floor (p))                                             \
+               g_assert (go_quad_value (&qc) == p);                    \
+       else                                                            \
+               g_assert (fabs (go_quad_value (&qc) - p) / p < 1e-14);  \
+} while (0)
+
 #define BINTEST1(a_,b_,QOP,OP,txt)                                     \
 do {                                                                   \
        double a, b, p;                                                 \
@@ -98,6 +114,94 @@ basic4_tests (void)
 
 /* ------------------------------------------------------------------------- */
 
+#define TEST1(a_) UNTEST1(a_,go_quad_floor,floor,"floor")
+
+static void
+floor_tests (void)
+{
+       GOQuad a, b, r;
+
+       TEST1 (0);
+       TEST1 (1);
+       TEST1 (-1);
+       TEST1 (1.0/3);
+       TEST1 (-1.0/3);
+
+       go_quad_floor (&a, &go_quad_sqrt2);
+       g_printerr ("floor(sqrt(2))=%g\n", go_quad_value (&a));
+       g_assert (go_quad_value (&a) == 1);
+
+       go_quad_init (&a, 11);
+       go_quad_init (&b, ldexp (1, -80));
+       go_quad_sub (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(11-2^-80)=%g\n", go_quad_value (&r));
+       g_assert (go_quad_value (&r) == 10);
+
+       go_quad_init (&a, 11);
+       go_quad_init (&b, ldexp (1, -80));
+       go_quad_add (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(11+2^-80)=%g\n", go_quad_value (&r));
+       g_assert (go_quad_value (&r) == 11);
+
+       go_quad_init (&a, -11);
+       go_quad_init (&b, ldexp (1, -80));
+       go_quad_sub (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(-11-2^-80)=%g\n", go_quad_value (&r));
+       g_assert (go_quad_value (&r) == -12);
+
+       go_quad_init (&a, -11);
+       go_quad_init (&b, ldexp (1, -80));
+       go_quad_add (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(-11+2^-80)=%g\n", go_quad_value (&r));
+       g_assert (go_quad_value (&r) == -11);
+
+       go_quad_init (&a, ldexp (11, 80));
+       go_quad_init (&b, 1);
+       go_quad_sub (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(11*2^-80-1)=%g\n", go_quad_value (&r));
+       go_quad_sub (&b, &a, &r);
+       g_assert (go_quad_value (&b) == 0);
+
+       go_quad_init (&a, ldexp (11, 80));
+       go_quad_init (&b, 0.5);
+       go_quad_sub (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(11*2^-80-1)=%g\n", go_quad_value (&r));
+       go_quad_sub (&b, &a, &r);
+       g_assert (go_quad_value (&b) == 0.5);
+
+       go_quad_init (&a, ldexp (11, 80));
+       go_quad_init (&b, 0.5);
+       go_quad_add (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(11*2^-80-1)=%g\n", go_quad_value (&r));
+       go_quad_sub (&b, &a, &r);
+       g_assert (go_quad_value (&b) == 0.5);
+
+       go_quad_init (&a, ldexp (11, 80));
+       go_quad_init (&b, -0.5);
+       go_quad_sub (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(11*2^-80-1)=%g\n", go_quad_value (&r));
+       go_quad_sub (&b, &a, &r);
+       g_assert (go_quad_value (&b) == 0.5);
+
+       go_quad_init (&a, ldexp (11, 80));
+       go_quad_init (&b, -0.5);
+       go_quad_add (&a, &a, &b);
+       go_quad_floor (&r, &a);
+       g_printerr ("floor(11*2^-80-1)=%g\n", go_quad_value (&r));
+       go_quad_sub (&b, &a, &r);
+       g_assert (go_quad_value (&b) == 0.5);
+}
+
+/* ------------------------------------------------------------------------- */
+
 int
 main (int argc, char **argv)
 {
@@ -132,6 +236,7 @@ main (int argc, char **argv)
 
        basic4_tests ();
        pow_tests ();
+       floor_tests ();
 
        go_quad_end (state);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]