annotate unit-tests/BTrack Tests/tests/Test_BTrack.cpp @ 56:b6d440942ff6

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