annotate unit-tests/BTrack Tests/tests/Test_BTrack.cpp @ 19:88c8d3862eee develop

Added some simple unit tests. Removed the destructor from the BTrack class as it was unnecessary.
author Adam <adamstark.uk@gmail.com>
date Thu, 23 Jan 2014 12:17:06 +0000
parents
children baf35f208814
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@19 11 //=================== PROCESSING SIMPLE VALUES =========================
adamstark@19 12 //======================================================================
adamstark@19 13 BOOST_AUTO_TEST_SUITE(processingSimpleValues)
adamstark@19 14
adamstark@19 15 //======================================================================
adamstark@19 16 BOOST_AUTO_TEST_CASE(processZeroValuedOnsetDetectionFunctionSamples)
adamstark@19 17 {
adamstark@19 18 BTrack b(512);
adamstark@19 19
adamstark@19 20 long numSamples = 20000;
adamstark@19 21
adamstark@19 22 std::vector<double> odfSamples;
adamstark@19 23
adamstark@19 24 int maxInterval = 0;
adamstark@19 25 int currentInterval = 0;
adamstark@19 26 int numBeats = 0;
adamstark@19 27
adamstark@19 28 for (int i = 0;i < numSamples;i++)
adamstark@19 29 {
adamstark@19 30 b.processOnsetDetectionFunctionSample(0.0);
adamstark@19 31
adamstark@19 32 currentInterval++;
adamstark@19 33
adamstark@19 34 if (b.playbeat == 1)
adamstark@19 35 {
adamstark@19 36 numBeats++;
adamstark@19 37
adamstark@19 38 if (currentInterval > maxInterval)
adamstark@19 39 {
adamstark@19 40 maxInterval = currentInterval;
adamstark@19 41 }
adamstark@19 42
adamstark@19 43 currentInterval = 0;
adamstark@19 44 }
adamstark@19 45 }
adamstark@19 46
adamstark@19 47 // check that the maximum interval between beats does not
adamstark@19 48 // exceed 100 onset detection function samples (~ 1.3 seconds)
adamstark@19 49 BOOST_CHECK(maxInterval < 100);
adamstark@19 50
adamstark@19 51 // check that we have at least a beat for every 100 samples
adamstark@19 52 BOOST_CHECK(numBeats > (numSamples/100));
adamstark@19 53
adamstark@19 54 }
adamstark@19 55
adamstark@19 56 //======================================================================
adamstark@19 57 BOOST_AUTO_TEST_CASE(processRandomOnsetDetectionFunctionSamples)
adamstark@19 58 {
adamstark@19 59 BTrack b(512);
adamstark@19 60
adamstark@19 61 long numSamples = 20000;
adamstark@19 62
adamstark@19 63 std::vector<double> odfSamples;
adamstark@19 64
adamstark@19 65 int maxInterval = 0;
adamstark@19 66 int currentInterval = 0;
adamstark@19 67 int numBeats = 0;
adamstark@19 68
adamstark@19 69 for (int i = 0;i < numSamples;i++)
adamstark@19 70 {
adamstark@19 71 odfSamples.push_back(random() % 1000);
adamstark@19 72 }
adamstark@19 73
adamstark@19 74 for (int i = 0;i < numSamples;i++)
adamstark@19 75 {
adamstark@19 76 b.processOnsetDetectionFunctionSample(odfSamples[i]);
adamstark@19 77
adamstark@19 78 currentInterval++;
adamstark@19 79
adamstark@19 80 if (b.playbeat == 1)
adamstark@19 81 {
adamstark@19 82 numBeats++;
adamstark@19 83
adamstark@19 84 if (currentInterval > maxInterval)
adamstark@19 85 {
adamstark@19 86 maxInterval = currentInterval;
adamstark@19 87 }
adamstark@19 88
adamstark@19 89 currentInterval = 0;
adamstark@19 90 }
adamstark@19 91 }
adamstark@19 92
adamstark@19 93 // check that the maximum interval between beats does not
adamstark@19 94 // exceed 100 onset detection function samples (~ 1.3 seconds)
adamstark@19 95 BOOST_CHECK(maxInterval < 100);
adamstark@19 96
adamstark@19 97 // check that we have at least a beat for every 100 samples
adamstark@19 98 BOOST_CHECK(numBeats > (numSamples/100));
adamstark@19 99
adamstark@19 100 }
adamstark@19 101
adamstark@19 102 //======================================================================
adamstark@19 103 BOOST_AUTO_TEST_CASE(processNegativeOnsetDetectionFunctionSamples)
adamstark@19 104 {
adamstark@19 105 BTrack b(512);
adamstark@19 106
adamstark@19 107 long numSamples = 20000;
adamstark@19 108
adamstark@19 109 std::vector<double> odfSamples;
adamstark@19 110
adamstark@19 111 int maxInterval = 0;
adamstark@19 112 int currentInterval = 0;
adamstark@19 113 int numBeats = 0;
adamstark@19 114
adamstark@19 115 for (int i = 0;i < numSamples;i++)
adamstark@19 116 {
adamstark@19 117 odfSamples.push_back(-1.0*(random() % 1000));
adamstark@19 118 }
adamstark@19 119
adamstark@19 120 for (int i = 0;i < numSamples;i++)
adamstark@19 121 {
adamstark@19 122 b.processOnsetDetectionFunctionSample(odfSamples[i]);
adamstark@19 123
adamstark@19 124 currentInterval++;
adamstark@19 125
adamstark@19 126 if (b.playbeat == 1)
adamstark@19 127 {
adamstark@19 128 numBeats++;
adamstark@19 129
adamstark@19 130 if (currentInterval > maxInterval)
adamstark@19 131 {
adamstark@19 132 maxInterval = currentInterval;
adamstark@19 133 }
adamstark@19 134
adamstark@19 135 currentInterval = 0;
adamstark@19 136 }
adamstark@19 137 }
adamstark@19 138
adamstark@19 139 // check that the maximum interval between beats does not
adamstark@19 140 // exceed 100 onset detection function samples (~ 1.3 seconds)
adamstark@19 141 BOOST_CHECK(maxInterval < 100);
adamstark@19 142
adamstark@19 143 // check that we have at least a beat for every 100 samples
adamstark@19 144 BOOST_CHECK(numBeats > (numSamples/100));
adamstark@19 145
adamstark@19 146 }
adamstark@19 147
adamstark@19 148 //======================================================================
adamstark@19 149 BOOST_AUTO_TEST_CASE(processSeriesOfDeltaFunctions)
adamstark@19 150 {
adamstark@19 151 BTrack b(512);
adamstark@19 152
adamstark@19 153 long numSamples = 20000;
adamstark@19 154 int beatPeriod = 43;
adamstark@19 155
adamstark@19 156 std::vector<double> odfSamples;
adamstark@19 157
adamstark@19 158 int maxInterval = 0;
adamstark@19 159 int currentInterval = 0;
adamstark@19 160 int numBeats = 0;
adamstark@19 161 int correct = 0;
adamstark@19 162
adamstark@19 163 for (int i = 0;i < numSamples;i++)
adamstark@19 164 {
adamstark@19 165 if (i % beatPeriod == 0)
adamstark@19 166 {
adamstark@19 167 odfSamples.push_back(1000);
adamstark@19 168 }
adamstark@19 169 else
adamstark@19 170 {
adamstark@19 171 odfSamples.push_back(0.0);
adamstark@19 172 }
adamstark@19 173 }
adamstark@19 174
adamstark@19 175 for (int i = 0;i < numSamples;i++)
adamstark@19 176 {
adamstark@19 177 b.processOnsetDetectionFunctionSample(odfSamples[i]);
adamstark@19 178
adamstark@19 179 currentInterval++;
adamstark@19 180
adamstark@19 181 if (b.playbeat == 1)
adamstark@19 182 {
adamstark@19 183 numBeats++;
adamstark@19 184
adamstark@19 185 if (currentInterval > maxInterval)
adamstark@19 186 {
adamstark@19 187 maxInterval = currentInterval;
adamstark@19 188 }
adamstark@19 189
adamstark@19 190 if (currentInterval == beatPeriod)
adamstark@19 191 {
adamstark@19 192 correct++;
adamstark@19 193 }
adamstark@19 194
adamstark@19 195 currentInterval = 0;
adamstark@19 196 }
adamstark@19 197 }
adamstark@19 198
adamstark@19 199 // check that the maximum interval between beats does not
adamstark@19 200 // exceed 100 onset detection function samples (~ 1.3 seconds)
adamstark@19 201 BOOST_CHECK(maxInterval < 100);
adamstark@19 202
adamstark@19 203 // check that we have at least a beat for every 100 samples
adamstark@19 204 BOOST_CHECK(numBeats > (numSamples/100));
adamstark@19 205
adamstark@19 206 // check that the number of correct beats is larger than 99%
adamstark@19 207 // of the total number of beats
adamstark@19 208 BOOST_CHECK(((double)correct) > (((double)numBeats)*0.99));
adamstark@19 209 }
adamstark@19 210
adamstark@19 211
adamstark@19 212 BOOST_AUTO_TEST_SUITE_END()
adamstark@19 213
adamstark@19 214
adamstark@19 215
adamstark@19 216
adamstark@19 217
adamstark@19 218
adamstark@19 219 #endif