c@348
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
c@348
|
2
|
c@348
|
3 #include "maths/MathUtilities.h"
|
c@348
|
4
|
c@348
|
5 #include <cmath>
|
c@348
|
6
|
c@348
|
7 #define BOOST_TEST_DYN_LINK
|
c@348
|
8 #define BOOST_TEST_MAIN
|
c@348
|
9
|
c@348
|
10 #include <boost/test/unit_test.hpp>
|
c@348
|
11
|
c@348
|
12 BOOST_AUTO_TEST_SUITE(TestMathUtilities)
|
c@348
|
13
|
c@348
|
14 BOOST_AUTO_TEST_CASE(round)
|
c@348
|
15 {
|
c@348
|
16 BOOST_CHECK_EQUAL(MathUtilities::round(0.5), 1.0);
|
c@348
|
17 BOOST_CHECK_EQUAL(MathUtilities::round(0.49), 0.0);
|
c@348
|
18 BOOST_CHECK_EQUAL(MathUtilities::round(0.99), 1.0);
|
c@348
|
19 BOOST_CHECK_EQUAL(MathUtilities::round(0.01), 0.0);
|
c@348
|
20 BOOST_CHECK_EQUAL(MathUtilities::round(0.0), 0.0);
|
c@348
|
21 BOOST_CHECK_EQUAL(MathUtilities::round(100.0), 100.0);
|
c@348
|
22 BOOST_CHECK_EQUAL(MathUtilities::round(-0.2), 0.0);
|
c@348
|
23 BOOST_CHECK_EQUAL(MathUtilities::round(-0.5), -1.0);
|
c@348
|
24 BOOST_CHECK_EQUAL(MathUtilities::round(-0.99), -1.0);
|
c@348
|
25 BOOST_CHECK_EQUAL(MathUtilities::round(-1.0), -1.0);
|
c@348
|
26 BOOST_CHECK_EQUAL(MathUtilities::round(-1.1), -1.0);
|
c@348
|
27 BOOST_CHECK_EQUAL(MathUtilities::round(-1.5), -2.0);
|
c@348
|
28 }
|
c@348
|
29
|
c@348
|
30 BOOST_AUTO_TEST_CASE(mean)
|
c@348
|
31 {
|
c@348
|
32 BOOST_CHECK_EQUAL(MathUtilities::mean(0, 0), 0);
|
c@348
|
33 double d0[] = { 0, 4, 3, -1 };
|
c@348
|
34 BOOST_CHECK_EQUAL(MathUtilities::mean(d0, 4), 1.5);
|
c@348
|
35 double d1[] = { -2.6 };
|
c@348
|
36 BOOST_CHECK_EQUAL(MathUtilities::mean(d1, 1), -2.6);
|
c@348
|
37 std::vector<double> v;
|
c@348
|
38 v.push_back(0);
|
c@348
|
39 v.push_back(4);
|
c@348
|
40 v.push_back(3);
|
c@348
|
41 v.push_back(-1);
|
c@348
|
42 BOOST_CHECK_EQUAL(MathUtilities::mean(v, 0, 4), 1.5);
|
c@348
|
43 BOOST_CHECK_EQUAL(MathUtilities::mean(v, 1, 2), 3.5);
|
c@348
|
44 BOOST_CHECK_EQUAL(MathUtilities::mean(v, 3, 1), -1);
|
c@348
|
45 BOOST_CHECK_EQUAL(MathUtilities::mean(v, 3, 0), 0);
|
c@348
|
46 }
|
c@348
|
47
|
c@348
|
48 BOOST_AUTO_TEST_CASE(sum)
|
c@348
|
49 {
|
c@348
|
50 BOOST_CHECK_EQUAL(MathUtilities::sum(0, 0), 0);
|
c@348
|
51 double d0[] = { 0, 4, 3, -1 };
|
c@348
|
52 BOOST_CHECK_EQUAL(MathUtilities::sum(d0, 4), 6);
|
c@348
|
53 double d1[] = { -2.6 };
|
c@348
|
54 BOOST_CHECK_EQUAL(MathUtilities::sum(d1, 1), -2.6);
|
c@348
|
55 }
|
c@348
|
56
|
c@348
|
57 BOOST_AUTO_TEST_CASE(median)
|
c@348
|
58 {
|
c@348
|
59 BOOST_CHECK_EQUAL(MathUtilities::median(0, 0), 0);
|
c@348
|
60 double d0[] = { 0, 4, 3, -1 };
|
c@348
|
61 BOOST_CHECK_EQUAL(MathUtilities::median(d0, 4), 1.5);
|
c@348
|
62 double d1[] = { 0, 4, 3, -1, -1 };
|
c@348
|
63 BOOST_CHECK_EQUAL(MathUtilities::median(d1, 5), 0);
|
c@348
|
64 double d2[] = { 1.0, -2.0 };
|
c@348
|
65 BOOST_CHECK_EQUAL(MathUtilities::median(d2, 2), -0.5);
|
c@348
|
66 double d3[] = { -2.6 };
|
c@348
|
67 BOOST_CHECK_EQUAL(MathUtilities::median(d3, 1), -2.6);
|
c@348
|
68 }
|
c@348
|
69
|
c@348
|
70 BOOST_AUTO_TEST_CASE(princarg)
|
c@348
|
71 {
|
c@348
|
72 BOOST_CHECK_EQUAL(MathUtilities::princarg(M_PI), M_PI);
|
c@348
|
73 BOOST_CHECK_EQUAL(MathUtilities::princarg(-M_PI), M_PI);
|
c@348
|
74 BOOST_CHECK_EQUAL(MathUtilities::princarg(2 * M_PI), 0.0);
|
c@348
|
75 BOOST_CHECK_EQUAL(MathUtilities::princarg(5 * M_PI), M_PI);
|
c@348
|
76 BOOST_CHECK_EQUAL(MathUtilities::princarg(1.0), 1.0);
|
c@348
|
77 BOOST_CHECK_EQUAL(MathUtilities::princarg(-1.0), -1.0);
|
c@348
|
78 BOOST_CHECK_EQUAL(MathUtilities::princarg(-10.0), -10.0 + 4 * M_PI);
|
c@348
|
79 }
|
c@348
|
80
|
c@348
|
81 BOOST_AUTO_TEST_CASE(isPowerOfTwo)
|
c@348
|
82 {
|
c@348
|
83 BOOST_CHECK_EQUAL(MathUtilities::isPowerOfTwo(0), false);
|
c@348
|
84 BOOST_CHECK_EQUAL(MathUtilities::isPowerOfTwo(1), true);
|
c@348
|
85 BOOST_CHECK_EQUAL(MathUtilities::isPowerOfTwo(-2), false);
|
c@348
|
86 BOOST_CHECK_EQUAL(MathUtilities::isPowerOfTwo(2), true);
|
c@348
|
87 BOOST_CHECK_EQUAL(MathUtilities::isPowerOfTwo(3), false);
|
c@348
|
88 BOOST_CHECK_EQUAL(MathUtilities::isPowerOfTwo(12), false);
|
c@348
|
89 BOOST_CHECK_EQUAL(MathUtilities::isPowerOfTwo(16), true);
|
c@348
|
90 }
|
c@348
|
91
|
c@348
|
92 BOOST_AUTO_TEST_CASE(nextPowerOfTwo)
|
c@348
|
93 {
|
c@348
|
94 BOOST_CHECK_EQUAL(MathUtilities::nextPowerOfTwo(0), 1);
|
c@348
|
95 BOOST_CHECK_EQUAL(MathUtilities::nextPowerOfTwo(1), 1);
|
c@348
|
96 BOOST_CHECK_EQUAL(MathUtilities::nextPowerOfTwo(-2), 1);
|
c@348
|
97 BOOST_CHECK_EQUAL(MathUtilities::nextPowerOfTwo(2), 2);
|
c@348
|
98 BOOST_CHECK_EQUAL(MathUtilities::nextPowerOfTwo(3), 4);
|
c@348
|
99 BOOST_CHECK_EQUAL(MathUtilities::nextPowerOfTwo(12), 16);
|
c@348
|
100 BOOST_CHECK_EQUAL(MathUtilities::nextPowerOfTwo(16), 16);
|
c@348
|
101 }
|
c@348
|
102
|
c@348
|
103 BOOST_AUTO_TEST_CASE(previousPowerOfTwo)
|
c@348
|
104 {
|
c@348
|
105 BOOST_CHECK_EQUAL(MathUtilities::previousPowerOfTwo(0), 1);
|
c@348
|
106 BOOST_CHECK_EQUAL(MathUtilities::previousPowerOfTwo(1), 1);
|
c@348
|
107 BOOST_CHECK_EQUAL(MathUtilities::previousPowerOfTwo(-2), 1);
|
c@348
|
108 BOOST_CHECK_EQUAL(MathUtilities::previousPowerOfTwo(2), 2);
|
c@348
|
109 BOOST_CHECK_EQUAL(MathUtilities::previousPowerOfTwo(3), 2);
|
c@348
|
110 BOOST_CHECK_EQUAL(MathUtilities::previousPowerOfTwo(12), 8);
|
c@348
|
111 BOOST_CHECK_EQUAL(MathUtilities::previousPowerOfTwo(16), 16);
|
c@348
|
112 }
|
c@348
|
113
|
c@348
|
114 BOOST_AUTO_TEST_CASE(nearestPowerOfTwo)
|
c@348
|
115 {
|
c@348
|
116 BOOST_CHECK_EQUAL(MathUtilities::nearestPowerOfTwo(0), 1);
|
c@348
|
117 BOOST_CHECK_EQUAL(MathUtilities::nearestPowerOfTwo(1), 1);
|
c@348
|
118 BOOST_CHECK_EQUAL(MathUtilities::nearestPowerOfTwo(-2), 1);
|
c@348
|
119 BOOST_CHECK_EQUAL(MathUtilities::nearestPowerOfTwo(2), 2);
|
c@348
|
120 BOOST_CHECK_EQUAL(MathUtilities::nearestPowerOfTwo(3), 4);
|
c@348
|
121 BOOST_CHECK_EQUAL(MathUtilities::nearestPowerOfTwo(11), 8);
|
c@348
|
122 BOOST_CHECK_EQUAL(MathUtilities::nearestPowerOfTwo(12), 16);
|
c@348
|
123 BOOST_CHECK_EQUAL(MathUtilities::nearestPowerOfTwo(16), 16);
|
c@348
|
124 }
|
c@348
|
125
|
c@348
|
126 BOOST_AUTO_TEST_CASE(factorial)
|
c@348
|
127 {
|
c@348
|
128 BOOST_CHECK_EQUAL(MathUtilities::factorial(-10), 0);
|
c@348
|
129 BOOST_CHECK_EQUAL(MathUtilities::factorial(0), 1);
|
c@348
|
130 BOOST_CHECK_EQUAL(MathUtilities::factorial(1), 1);
|
c@348
|
131 BOOST_CHECK_EQUAL(MathUtilities::factorial(2), 2);
|
c@348
|
132 BOOST_CHECK_EQUAL(MathUtilities::factorial(3), 6);
|
c@348
|
133 BOOST_CHECK_EQUAL(MathUtilities::factorial(4), 24);
|
c@348
|
134 }
|
c@348
|
135
|
c@348
|
136 BOOST_AUTO_TEST_SUITE_END()
|
c@348
|
137
|
c@348
|
138
|