replaced decimal module, xrchart_scale with autoformat, histogram x-axis ticks changed.
[pspp] / tests / math / chart-get-scale-test.c
index d4cbe18eb03f5a1094cde4bacb619b9773901f11..6f2ca711d0bea538fabf2f920db08a63215fc9fb 100644 (file)
@@ -23,7 +23,6 @@
 
 #include "libpspp/compiler.h"
 
-#include "math/decimal.h"
 #include "math/chart-geometry.h"
 #include <limits.h>
 #include <float.h>
 
 #if 0
 static void
-dump_scale (const struct decimal *low, const struct decimal *interval, int n_ticks)
+dump_scale (const double low, const double interval, int n_ticks)
 {
   int i;
-  struct decimal tick = *low;
+  double tick = low;
   for (i = 0; i <= n_ticks; ++i)
     {
-      printf ("Tick %d: %s (%g)\n", i, decimal_to_string (&tick), decimal_to_double (&tick));
-      decimal_add (&tick, interval);
+      printf ("Tick %d: %g\n", i, tick);
+      tick += interval;
     }
 }
 #endif
@@ -48,50 +47,52 @@ static void
 test_range (double low, double high)
 {
   int n_ticks = 0;
-  struct decimal interval;
-  struct decimal lower;
+  double interval;
+  double lower;
 
   chart_get_scale (high, low,
                   &lower, &interval, &n_ticks);
 
-  assert (n_ticks > 0);
-  assert (n_ticks < 12);
-
-  //  dump_scale (&lower, &interval, n_ticks);
-
-  assert (decimal_to_double (&lower) <= low);
-  
-  {
-    struct decimal  l = lower;
-    decimal_add (&l, &interval);
-    assert (decimal_to_double (&l) > low);
+  if ((high - low) < 10 * DBL_MIN){
+    assert (n_ticks == 0);
+    assert (lower == low);
+    assert (interval <= 10 * DBL_MIN);
   }
+  else
+    assert (n_ticks > 4);
 
-  {
-    struct decimal  i = interval;
-
-    decimal_int_multiply (&i, n_ticks - 1);
-
-    decimal_add (&i, &lower);
+  assert (n_ticks <= 10);
 
-    /* i now contains the upper bound minus one tick */
-    assert (decimal_to_double (&i) < high);
-
-    decimal_add (&i, &interval);
+#if 0
+  printf("%s: high: %lg, low %lg, interval: %lg, nticks: %d\n", 
+        __FUNCTION__, high, low, interval, n_ticks);
+  dump_scale (lower, interval, n_ticks);
+#endif
 
-    assert (decimal_to_double (&i) >= high);
+  if ((high - low) > 10 * DBL_MIN) {
+    assert (lower <= low);
+    assert (lower + interval > low);
+    assert (lower + n_ticks * interval < high);
+    assert (lower + (n_ticks + 1) * interval >= high);
   }
-
 }
 
 
 int 
 main (int argc UNUSED, char **argv UNUSED)
 {
+  test_range (0, 0);
+  test_range (5, 5);
+  test_range (-5, -5);
+  test_range (0, 7);
   test_range (0.2, 11);
   test_range (-0.2, 11);
   test_range (-10, 0.2);
   test_range (-10, -0.2);
+  test_range (-10000, 10003);
+  test_range (50042,50053);
+  test_range (-50010, -49999);
+  test_range (0.000100002, 0.000100010);
 
   test_range (102, 50030); 
   test_range (0.00102, 0.0050030);