annotate unit-tests/BTrack Tests/tests/Test_BTrack.cpp @ 57:296af6af6c3d

Replaced switch statements in OnsetDetectionFunction with enums. Renamed lots of functions so that they have better names, in camel case. Added some unit tests for initialisation of BTrack.
author Adam Stark <adamstark@users.noreply.github.com>
date Thu, 23 Jan 2014 15:31:11 +0000
parents b6d440942ff6
children
rev   line source
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