adamstark@56
|
1 #ifndef BTRACK_TESTS
|
adamstark@56
|
2 #define BTRACK_TESTS
|
adamstark@56
|
3
|
adamstark@56
|
4 #define BOOST_TEST_DYN_LINK
|
adamstark@56
|
5 #include <boost/test/unit_test.hpp>
|
adamstark@56
|
6
|
adamstark@56
|
7 #include <iostream>
|
adamstark@56
|
8 #include "../../../src/BTrack.h"
|
adamstark@56
|
9
|
adamstark@56
|
10 //======================================================================
|
adamstark@57
|
11 //==================== CHECKING INITIALISATION =========================
|
adamstark@57
|
12 //======================================================================
|
adamstark@57
|
13 BOOST_AUTO_TEST_SUITE(checkingInitialisation)
|
adamstark@57
|
14
|
adamstark@57
|
15 //======================================================================
|
adamstark@57
|
16 BOOST_AUTO_TEST_CASE(constructorWithNoArguments)
|
adamstark@57
|
17 {
|
adamstark@57
|
18 BTrack b;
|
adamstark@57
|
19
|
adamstark@57
|
20 BOOST_CHECK_EQUAL(b.getHopSize(), 512);
|
adamstark@57
|
21 }
|
adamstark@57
|
22
|
adamstark@57
|
23 //======================================================================
|
adamstark@57
|
24 BOOST_AUTO_TEST_CASE(constructorWithHopSize)
|
adamstark@57
|
25 {
|
adamstark@57
|
26 BTrack b(1024);
|
adamstark@57
|
27
|
adamstark@57
|
28 BOOST_CHECK_EQUAL(b.getHopSize(), 1024);
|
adamstark@57
|
29 }
|
adamstark@57
|
30
|
adamstark@57
|
31 //======================================================================
|
adamstark@57
|
32 BOOST_AUTO_TEST_CASE(constructorWithHopSizeAndFrameSize)
|
adamstark@57
|
33 {
|
adamstark@57
|
34 BTrack b(256,512);
|
adamstark@57
|
35
|
adamstark@57
|
36 BOOST_CHECK_EQUAL(b.getHopSize(), 256);
|
adamstark@57
|
37 }
|
adamstark@57
|
38
|
adamstark@57
|
39 BOOST_AUTO_TEST_SUITE_END()
|
adamstark@57
|
40 //======================================================================
|
adamstark@57
|
41 //======================================================================
|
adamstark@57
|
42
|
adamstark@57
|
43
|
adamstark@57
|
44 //======================================================================
|
adamstark@56
|
45 //=================== PROCESSING SIMPLE VALUES =========================
|
adamstark@56
|
46 //======================================================================
|
adamstark@56
|
47 BOOST_AUTO_TEST_SUITE(processingSimpleValues)
|
adamstark@56
|
48
|
adamstark@56
|
49 //======================================================================
|
adamstark@56
|
50 BOOST_AUTO_TEST_CASE(processZeroValuedOnsetDetectionFunctionSamples)
|
adamstark@56
|
51 {
|
adamstark@56
|
52 BTrack b(512);
|
adamstark@56
|
53
|
adamstark@56
|
54 long numSamples = 20000;
|
adamstark@56
|
55
|
adamstark@56
|
56 std::vector<double> odfSamples;
|
adamstark@56
|
57
|
adamstark@56
|
58 int maxInterval = 0;
|
adamstark@56
|
59 int currentInterval = 0;
|
adamstark@56
|
60 int numBeats = 0;
|
adamstark@56
|
61
|
adamstark@56
|
62 for (int i = 0;i < numSamples;i++)
|
adamstark@56
|
63 {
|
adamstark@56
|
64 b.processOnsetDetectionFunctionSample(0.0);
|
adamstark@56
|
65
|
adamstark@56
|
66 currentInterval++;
|
adamstark@56
|
67
|
adamstark@57
|
68 if (b.beatDueInCurrentFrame())
|
adamstark@56
|
69 {
|
adamstark@56
|
70 numBeats++;
|
adamstark@56
|
71
|
adamstark@56
|
72 if (currentInterval > maxInterval)
|
adamstark@56
|
73 {
|
adamstark@56
|
74 maxInterval = currentInterval;
|
adamstark@56
|
75 }
|
adamstark@56
|
76
|
adamstark@56
|
77 currentInterval = 0;
|
adamstark@56
|
78 }
|
adamstark@56
|
79 }
|
adamstark@56
|
80
|
adamstark@56
|
81 // check that the maximum interval between beats does not
|
adamstark@56
|
82 // exceed 100 onset detection function samples (~ 1.3 seconds)
|
adamstark@56
|
83 BOOST_CHECK(maxInterval < 100);
|
adamstark@56
|
84
|
adamstark@56
|
85 // check that we have at least a beat for every 100 samples
|
adamstark@56
|
86 BOOST_CHECK(numBeats > (numSamples/100));
|
adamstark@56
|
87
|
adamstark@56
|
88 }
|
adamstark@56
|
89
|
adamstark@56
|
90 //======================================================================
|
adamstark@56
|
91 BOOST_AUTO_TEST_CASE(processRandomOnsetDetectionFunctionSamples)
|
adamstark@56
|
92 {
|
adamstark@56
|
93 BTrack b(512);
|
adamstark@56
|
94
|
adamstark@56
|
95 long numSamples = 20000;
|
adamstark@56
|
96
|
adamstark@56
|
97 std::vector<double> odfSamples;
|
adamstark@56
|
98
|
adamstark@56
|
99 int maxInterval = 0;
|
adamstark@56
|
100 int currentInterval = 0;
|
adamstark@56
|
101 int numBeats = 0;
|
adamstark@56
|
102
|
adamstark@56
|
103 for (int i = 0;i < numSamples;i++)
|
adamstark@56
|
104 {
|
adamstark@56
|
105 odfSamples.push_back(random() % 1000);
|
adamstark@56
|
106 }
|
adamstark@56
|
107
|
adamstark@56
|
108 for (int i = 0;i < numSamples;i++)
|
adamstark@56
|
109 {
|
adamstark@56
|
110 b.processOnsetDetectionFunctionSample(odfSamples[i]);
|
adamstark@56
|
111
|
adamstark@56
|
112 currentInterval++;
|
adamstark@56
|
113
|
adamstark@57
|
114 if (b.beatDueInCurrentFrame())
|
adamstark@56
|
115 {
|
adamstark@56
|
116 numBeats++;
|
adamstark@56
|
117
|
adamstark@56
|
118 if (currentInterval > maxInterval)
|
adamstark@56
|
119 {
|
adamstark@56
|
120 maxInterval = currentInterval;
|
adamstark@56
|
121 }
|
adamstark@56
|
122
|
adamstark@56
|
123 currentInterval = 0;
|
adamstark@56
|
124 }
|
adamstark@56
|
125 }
|
adamstark@56
|
126
|
adamstark@56
|
127 // check that the maximum interval between beats does not
|
adamstark@56
|
128 // exceed 100 onset detection function samples (~ 1.3 seconds)
|
adamstark@56
|
129 BOOST_CHECK(maxInterval < 100);
|
adamstark@56
|
130
|
adamstark@56
|
131 // check that we have at least a beat for every 100 samples
|
adamstark@56
|
132 BOOST_CHECK(numBeats > (numSamples/100));
|
adamstark@56
|
133
|
adamstark@56
|
134 }
|
adamstark@56
|
135
|
adamstark@56
|
136 //======================================================================
|
adamstark@56
|
137 BOOST_AUTO_TEST_CASE(processNegativeOnsetDetectionFunctionSamples)
|
adamstark@56
|
138 {
|
adamstark@56
|
139 BTrack b(512);
|
adamstark@56
|
140
|
adamstark@56
|
141 long numSamples = 20000;
|
adamstark@56
|
142
|
adamstark@56
|
143 std::vector<double> odfSamples;
|
adamstark@56
|
144
|
adamstark@56
|
145 int maxInterval = 0;
|
adamstark@56
|
146 int currentInterval = 0;
|
adamstark@56
|
147 int numBeats = 0;
|
adamstark@56
|
148
|
adamstark@56
|
149 for (int i = 0;i < numSamples;i++)
|
adamstark@56
|
150 {
|
adamstark@56
|
151 odfSamples.push_back(-1.0*(random() % 1000));
|
adamstark@56
|
152 }
|
adamstark@56
|
153
|
adamstark@56
|
154 for (int i = 0;i < numSamples;i++)
|
adamstark@56
|
155 {
|
adamstark@56
|
156 b.processOnsetDetectionFunctionSample(odfSamples[i]);
|
adamstark@56
|
157
|
adamstark@56
|
158 currentInterval++;
|
adamstark@56
|
159
|
adamstark@57
|
160 if (b.beatDueInCurrentFrame())
|
adamstark@56
|
161 {
|
adamstark@56
|
162 numBeats++;
|
adamstark@56
|
163
|
adamstark@56
|
164 if (currentInterval > maxInterval)
|
adamstark@56
|
165 {
|
adamstark@56
|
166 maxInterval = currentInterval;
|
adamstark@56
|
167 }
|
adamstark@56
|
168
|
adamstark@56
|
169 currentInterval = 0;
|
adamstark@56
|
170 }
|
adamstark@56
|
171 }
|
adamstark@56
|
172
|
adamstark@56
|
173 // check that the maximum interval between beats does not
|
adamstark@56
|
174 // exceed 100 onset detection function samples (~ 1.3 seconds)
|
adamstark@56
|
175 BOOST_CHECK(maxInterval < 100);
|
adamstark@56
|
176
|
adamstark@56
|
177 // check that we have at least a beat for every 100 samples
|
adamstark@56
|
178 BOOST_CHECK(numBeats > (numSamples/100));
|
adamstark@56
|
179
|
adamstark@56
|
180 }
|
adamstark@56
|
181
|
adamstark@56
|
182 //======================================================================
|
adamstark@56
|
183 BOOST_AUTO_TEST_CASE(processSeriesOfDeltaFunctions)
|
adamstark@56
|
184 {
|
adamstark@56
|
185 BTrack b(512);
|
adamstark@56
|
186
|
adamstark@56
|
187 long numSamples = 20000;
|
adamstark@56
|
188 int beatPeriod = 43;
|
adamstark@56
|
189
|
adamstark@56
|
190 std::vector<double> odfSamples;
|
adamstark@56
|
191
|
adamstark@56
|
192 int maxInterval = 0;
|
adamstark@56
|
193 int currentInterval = 0;
|
adamstark@56
|
194 int numBeats = 0;
|
adamstark@56
|
195 int correct = 0;
|
adamstark@56
|
196
|
adamstark@56
|
197 for (int i = 0;i < numSamples;i++)
|
adamstark@56
|
198 {
|
adamstark@56
|
199 if (i % beatPeriod == 0)
|
adamstark@56
|
200 {
|
adamstark@56
|
201 odfSamples.push_back(1000);
|
adamstark@56
|
202 }
|
adamstark@56
|
203 else
|
adamstark@56
|
204 {
|
adamstark@56
|
205 odfSamples.push_back(0.0);
|
adamstark@56
|
206 }
|
adamstark@56
|
207 }
|
adamstark@56
|
208
|
adamstark@56
|
209 for (int i = 0;i < numSamples;i++)
|
adamstark@56
|
210 {
|
adamstark@56
|
211 b.processOnsetDetectionFunctionSample(odfSamples[i]);
|
adamstark@56
|
212
|
adamstark@56
|
213 currentInterval++;
|
adamstark@56
|
214
|
adamstark@57
|
215 if (b.beatDueInCurrentFrame())
|
adamstark@56
|
216 {
|
adamstark@56
|
217 numBeats++;
|
adamstark@56
|
218
|
adamstark@56
|
219 if (currentInterval > maxInterval)
|
adamstark@56
|
220 {
|
adamstark@56
|
221 maxInterval = currentInterval;
|
adamstark@56
|
222 }
|
adamstark@56
|
223
|
adamstark@56
|
224 if (currentInterval == beatPeriod)
|
adamstark@56
|
225 {
|
adamstark@56
|
226 correct++;
|
adamstark@56
|
227 }
|
adamstark@56
|
228
|
adamstark@56
|
229 currentInterval = 0;
|
adamstark@56
|
230 }
|
adamstark@56
|
231 }
|
adamstark@56
|
232
|
adamstark@56
|
233 // check that the maximum interval between beats does not
|
adamstark@56
|
234 // exceed 100 onset detection function samples (~ 1.3 seconds)
|
adamstark@56
|
235 BOOST_CHECK(maxInterval < 100);
|
adamstark@56
|
236
|
adamstark@56
|
237 // check that we have at least a beat for every 100 samples
|
adamstark@56
|
238 BOOST_CHECK(numBeats > (numSamples/100));
|
adamstark@56
|
239
|
adamstark@56
|
240 // check that the number of correct beats is larger than 99%
|
adamstark@56
|
241 // of the total number of beats
|
adamstark@56
|
242 BOOST_CHECK(((double)correct) > (((double)numBeats)*0.99));
|
adamstark@56
|
243 }
|
adamstark@56
|
244
|
adamstark@56
|
245
|
adamstark@56
|
246 BOOST_AUTO_TEST_SUITE_END()
|
adamstark@57
|
247 //======================================================================
|
adamstark@57
|
248 //======================================================================
|
adamstark@56
|
249
|
adamstark@56
|
250
|
adamstark@56
|
251
|
adamstark@56
|
252
|
adamstark@56
|
253
|
adamstark@56
|
254 #endif
|