annotate unit-tests/BTrack Tests/tests/Test_BTrack.cpp @ 21:ef4721e7466c develop

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