+ 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 __mcs51
+#define STORAGE xdata
+#define XDATA xdata
+#else
+#define STORAGE
+#define XDATA
+#endif
+
+XDATA volatile float left, right, result;
+
+struct {
+ float left, right, add, sub, mul, div, revdiv;
+} 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},
+ { -12.8, 25.6, 12.8, -38.4, -327.68, -0.5, -2},
+ { -12.8, -25.6, -38.4, 12.8, 327.68, 0.5, 2},
+ { 100.0, 10.0, 110.0, 90.0, 1000.00, 10.0, 0.1},
+ { 1000.0, 10.0, 1010.0, 990.0, 10000.00, 100.0, 0.01},
+ { 10000.0, 10.0, 10010.0, 9990.0, 100000.00, 1000.0, 0.001},
+ { 100000.0, 10.0, 100010.0, 99990.0, 1000000.00, 10000.0, 0.0001},
+ { 1000000.0, 10.0, 1000010.0, 999990.0, 10000000.00, 100000.0, 0.00001},
+ {10000000.0, 10.0,10000010.0, 9999990.0,100000000.00, 1000000.0, 0.000001},
+ { 0x100, 0x10, 0x110, 0xf0, 0x1000, 0x10, 0.0625},
+ { 0x1000, 0x10, 0x1010, 0xff0, 0x10000, 0x100, 0.00390625},
+ { 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, (float)0x10000000*0x10,
+ 0x1000000, 0 /* ignore */},
+};