3 operation: ADD, SUB, MUL, DIV, REVDIV
7 // we are in the regression tests
25 # define STORAGE xdata
35 XDATA volatile float left, right, result;
38 float left, right, add, sub, mul, div, revdiv;
40 // left right add sub mul div revdiv
41 { 12.8, 25.6, 38.4, -12.8, 327.68, 0.5, 2},
42 { 12.8, -25.6, -12.8, 38.4, -327.68, -0.5, -2},
43 { -12.8, 25.6, 12.8, -38.4, -327.68, -0.5, -2},
44 { -12.8, -25.6, -38.4, 12.8, 327.68, 0.5, 2},
45 { 100.0, 10.0, 110.0, 90.0, 1000.00, 10.0, 0.1},
46 { 1000.0, 10.0, 1010.0, 990.0, 10000.00, 100.0, 0.01},
47 { 10000.0, 10.0, 10010.0, 9990.0, 100000.00, 1000.0, 0.001},
48 { 100000.0, 10.0, 100010.0, 99990.0, 1000000.00, 10000.0, 0.0001},
49 { 1000000.0, 10.0, 1000010.0, 999990.0, 10000000.00, 100000.0, 0.00001},
50 {10000000.0, 10.0,10000010.0, 9999990.0,100000000.00, 1000000.0, 0.000001},
51 { 0x100, 0x10, 0x110, 0xf0, 0x1000, 0x10, 0.0625},
52 { 0x1000, 0x10, 0x1010, 0xff0, 0x10000, 0x100, 0.00390625},
53 { 0x10000, 0x10, 0x10010, 0xfff0, 0x100000, 0x1000, 0.00024414},
54 { 0x100000, 0x10, 0x100010, 0xffff0, 0x1000000, 0x10000, 0 /* ignore */},
55 { 0x1000000, 0x10, 0x1000010, 0xfffff0, 0x10000000, 0x100000, 0 /* ignore */},
56 {0x10000000, 0x10,0x10000010, 0xffffff0, (float)0x10000000*0x10,
57 0x1000000, 0 /* ignore */},
60 XDATA int tests=0, errors=0;
62 char compare (float is, float should) {
63 float diff = should ? is/should : 0;
65 DEBUG(printf (" %1.3f (%f %f) ", is, should, diff));
68 DEBUG(printf ("IGNORED!\n"));
72 // skip the fp roundoff errors
73 if (diff>0.999999 && diff<1.00001) {
74 DEBUG(printf ("OK!\n"));
79 DEBUG(printf ("FAIL!\n"));
89 int t = sizeof(cases)/sizeof(cases[0]);
95 result=cases[i].left+cases[i].right;
96 DEBUG(printf ("%1.3f + %1.3f =", cases[i].left, cases[i].right));
97 compare(result, cases[i].add);
101 result=cases[i].left-cases[i].right;
102 DEBUG(printf ("%1.3f - %1.3f =", cases[i].left, cases[i].right));
103 compare(result, cases[i].sub);
107 result=cases[i].left*cases[i].right;
108 DEBUG(printf ("%1.3f * %1.3f =", cases[i].left, cases[i].right));
109 compare(result, cases[i].mul);
113 result=cases[i].left/cases[i].right;
114 DEBUG(printf ("%1.3f / %1.3f =", cases[i].left, cases[i].right));
115 compare(result, cases[i].div);
119 result=cases[i].right/cases[i].left;
120 DEBUG(printf ("%1.3f / %1.3f =", cases[i].right, cases[i].left));
121 compare(result, cases[i].revdiv);
124 DEBUG(printf ("%d tests, %d errors\n", tests, errors));