9 bool NotEqual(double a, double b, double threshold=1e-4)
11 return (fabs(a-b) > threshold);
14 int main(int argc, char ** argv)
18 unsigned failures = 0;
19 for (unsigned i = 0; i < TEST_CASES; ++i)
21 double da = (double)(rand()) / (double)(rand());
22 double db = (double)(rand()) / (double)(rand());
29 if (NotEqual(Double(a), da))
32 Warn("a != da; %f vs %f", Double(a), da);
34 if (NotEqual(Double(b), db))
37 Warn("b != db; %f vs %f", Double(b), db);
39 if (NotEqual(Double(a+b), da+db))
42 Warn("a + b = %f should be %f", Double(a+b), da+db);
44 if (NotEqual(Double(a-b), da-db))
47 Warn("a - b = %f should be %f", Double(a-b), da-db);
49 if (NotEqual(Double(a*b), da*db))
52 Warn("a * b = %f should be %f", Double(a*b), da*db);
54 if (NotEqual(Double(a/b), da/db))
57 Warn("a / b = %f should be %f", Double(a/b), da/db);
60 if (NotEqual(Double(a), da))
63 Warn("a has changed after +-*/ from %f to %f", da, Double(a));
65 if (NotEqual(Double(b), db))
68 Warn("b has changed after +-*/ from %f to %f", db, Double(b));
71 if (NotEqual(Double(a+=b), da+=db))
74 Warn("a += b = %f should be %f", Double(a), da);
76 if (NotEqual(Double(a-=b), da-=db))
79 Warn("a -= b = %f should be %f", Double(a), da);
81 if (NotEqual(Double(a*=b), da*=db))
84 Warn("a *= b = %f should be %f", Double(a), da);
86 if (NotEqual(Double(a/=b), da/=db))
89 Warn("a /= b = %f should be %f", Double(a), da);
92 Debug("Completed %u test cases with total of %u operations, %u failures", TEST_CASES, 12*TEST_CASES, failures);