Newer
Older
Gigg, Martyn Anthony
committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#ifndef MANTID_KERNEL_FLOATINGPOINTCOMPARISONTEST_H_
#define MANTID_KERNEL_FLOATINGPOINTCOMPARISONTEST_H_
#include <cxxtest/TestSuite.h>
#include "MantidKernel/FloatingPointComparison.h"
#include <limits>
#include <cfloat>
class FloatingPointComparisonTest : public CxxTest::TestSuite
{
public:
void test_Same_Value_Compare_Equal()
{
TS_ASSERT(Mantid::Kernel::equals(2.5, 2.5));
}
void test_Difference_By_Machine_Eps_Compare_Equal()
{
TS_ASSERT(Mantid::Kernel::equals(2.5, 2.5+std::numeric_limits<double>::epsilon()));
}
void test_Difference_By_Machine_Eps_Plus_Small_Does_Not_Compare_Equal()
{
TS_ASSERT_EQUALS(Mantid::Kernel::equals(2.5, 2.5 + 1.1*std::numeric_limits<double>::epsilon()), false);
}
void test_Same_Large_Numbers_Compare_Equal()
{
TS_ASSERT(Mantid::Kernel::equals(DBL_MAX,DBL_MAX));
}
void test_Numbers_Outside_Custom_Tolerance_Are_Not_Equal()
{
const double tol(1e-08);
TS_ASSERT_EQUALS(Mantid::Kernel::equals(0.1, 1.0001*tol), false);
}
void test_LtEquals_With_X_Equal_To_Y_Produces_True()
{
TS_ASSERT_EQUALS(Mantid::Kernel::ltEquals(0.1, 0.1), true);
TS_ASSERT_EQUALS(Mantid::Kernel::ltEquals(-0.1, -0.1), true);
}
void test_LtEquals_With_X_Lower_Than_Y_Produces_True()
{
TS_ASSERT_EQUALS(Mantid::Kernel::ltEquals(0.1, 0.2), true);
TS_ASSERT_EQUALS(Mantid::Kernel::ltEquals(-0.1, 0.2), true);
TS_ASSERT_EQUALS(Mantid::Kernel::ltEquals(-5.0, -0.2), true);
}
void test_LtEquals_With_X_Greater_Than_Y_Produces_False()
{
TS_ASSERT_EQUALS(Mantid::Kernel::ltEquals(0.5, 0.2), false);
TS_ASSERT_EQUALS(Mantid::Kernel::ltEquals(-0.1, -0.9), false);
TS_ASSERT_EQUALS(Mantid::Kernel::ltEquals(50.0, -0.00002), false);
}
void test_GtEquals_With_X_Equal_To_Y_Produces_True()
{
TS_ASSERT_EQUALS(Mantid::Kernel::gtEquals(0.1, 0.1), true);
TS_ASSERT_EQUALS(Mantid::Kernel::gtEquals(-0.1, -0.1), true);
}
void test_GtEquals_With_X_Greater_Than_Y_Produces_True()
{
TS_ASSERT_EQUALS(Mantid::Kernel::gtEquals(0.2, 0.1), true);
TS_ASSERT_EQUALS(Mantid::Kernel::gtEquals(0.2, -0.1), true);
TS_ASSERT_EQUALS(Mantid::Kernel::gtEquals(8.0, -5.0), true);
}
void test_GtEquals_With_X_Lower_Than_Y_Produces_False()
{
TS_ASSERT_EQUALS(Mantid::Kernel::gtEquals(1.01, 50.23), false);
TS_ASSERT_EQUALS(Mantid::Kernel::gtEquals(-5.56, 0.23), false);
TS_ASSERT_EQUALS(Mantid::Kernel::gtEquals(-0.00002, -0.00001), false);
}
};
#endif //MANTID_KERNEL_FLOATINGPOINTCOMPARISONTEST_H_