restored else branch for other ports
[fw/sdcc] / support / regression / tests / float.c
index 656214e92e538bbb3cb5bda9798e12662a31e53b..e2585aa3fad42a97150d36b4fa818fa15f88ad01 100644 (file)
@@ -1,19 +1,42 @@
+/* Float tests.
+
+   operation: ADD, SUB, MUL, DIV, REVDIV
+*/
+
 #if 1
   // we are in the regression tests
   #include <testfwk.h>
   #define DEBUG(x)
+
+  #define {operation} 1
 #else
   // we are standalone
   #include <stdio.h>
   #define DEBUG(x) x
   #define ASSERT(x)
+  #define ADD 1
+  #define SUB 1
+  #define MUL 1
+  #define DIV 1
+  #define REVDIV 1
+#endif
+
+#ifdef SDCC_mcs51
+#  define STORAGE xdata
+#  define XDATA xdata
+#elif SDCC_pic16
+#  define STORAGE code
+#  define XDATA
+#else
+#  define STORAGE
+#  define XDATA
 #endif
 
-volatile float left, right, result;
+XDATA volatile float left, right, result;
 
 struct {
   float left, right, add, sub, mul, div, revdiv;
-} cases[]={
+} STORAGE cases[]={
   //     left  right        add        sub          mul         div   revdiv
   {      12.8,  25.6,      38.4,     -12.8,      327.68,        0.5,  2},
   {      12.8, -25.6,     -12.8,      38.4,     -327.68,       -0.5, -2},
@@ -30,10 +53,11 @@ struct {
   {   0x10000,  0x10,   0x10010,    0xfff0,    0x100000,     0x1000,  0.00024414},
   {  0x100000,  0x10,  0x100010,   0xffff0,   0x1000000,    0x10000,  0 /* ignore */},
   { 0x1000000,  0x10, 0x1000010,  0xfffff0,  0x10000000,   0x100000,  0 /* ignore */},
-  {0x10000000,  0x10,0x10000010, 0xffffff0, 0x100000000,  0x1000000,  0 /* ignore */},
+  {0x10000000,  0x10,0x10000010, 0xffffff0, (float)0x10000000*0x10,
+                                                          0x1000000,  0 /* ignore */},
 };
 
-int tests=0, errors=0;
+XDATA int tests=0, errors=0;
 
 char compare (float is, float should) {
   float diff = should ? is/should : 0;
@@ -66,26 +90,36 @@ testFloatMath(void)
   float result;
 
   for (i=0; i<t; i++) {
-    // add
-    result=cases[i].left+cases[i].right;
-    DEBUG(printf ("%1.3f + %1.3f =", cases[i].left, cases[i].right));
-    compare(result, cases[i].add);
-    // sub
-    result=cases[i].left-cases[i].right;
-    DEBUG(printf ("%1.3f - %1.3f =", cases[i].left, cases[i].right));
-    compare(result, cases[i].sub);
-    // mul
-    result=cases[i].left*cases[i].right;
-    DEBUG(printf ("%1.3f * %1.3f =", cases[i].left, cases[i].right));
-    compare(result, cases[i].mul);
-    // div
-    result=cases[i].left/cases[i].right;
-    DEBUG(printf ("%1.3f / %1.3f =", cases[i].left, cases[i].right));
-    compare(result, cases[i].div);
-    // revdiv
-    result=cases[i].right/cases[i].left;
-    DEBUG(printf ("%1.3f / %1.3f =", cases[i].right, cases[i].left));
-    compare(result, cases[i].revdiv);
+    #ifdef ADD
+      // add
+      result=cases[i].left+cases[i].right;
+      DEBUG(printf ("%1.3f + %1.3f =", cases[i].left, cases[i].right));
+      compare(result, cases[i].add);
+    #endif
+    #ifdef SUB
+      // sub
+      result=cases[i].left-cases[i].right;
+      DEBUG(printf ("%1.3f - %1.3f =", cases[i].left, cases[i].right));
+      compare(result, cases[i].sub);
+    #endif
+    #ifdef MUL
+      // mul
+      result=cases[i].left*cases[i].right;
+      DEBUG(printf ("%1.3f * %1.3f =", cases[i].left, cases[i].right));
+      compare(result, cases[i].mul);
+    #endif
+    #ifdef DIV
+      // div
+      result=cases[i].left/cases[i].right;
+      DEBUG(printf ("%1.3f / %1.3f =", cases[i].left, cases[i].right));
+      compare(result, cases[i].div);
+    #endif
+    #ifdef REVDIV
+      // revdiv
+      result=cases[i].right/cases[i].left;
+      DEBUG(printf ("%1.3f / %1.3f =", cases[i].right, cases[i].left));
+      compare(result, cases[i].revdiv);
+    #endif
   }
   DEBUG(printf ("%d tests, %d errors\n", tests, errors));
 }