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