adamstark@56: #ifndef BTRACK_TESTS adamstark@56: #define BTRACK_TESTS adamstark@56: adamstark@56: #define BOOST_TEST_DYN_LINK adamstark@56: #include adamstark@56: adamstark@56: #include adamstark@56: #include "../../../src/BTrack.h" adamstark@56: adamstark@56: //====================================================================== adamstark@57: //==================== CHECKING INITIALISATION ========================= adamstark@57: //====================================================================== adamstark@57: BOOST_AUTO_TEST_SUITE(checkingInitialisation) adamstark@57: adamstark@57: //====================================================================== adamstark@57: BOOST_AUTO_TEST_CASE(constructorWithNoArguments) adamstark@57: { adamstark@57: BTrack b; adamstark@57: adamstark@57: BOOST_CHECK_EQUAL(b.getHopSize(), 512); adamstark@57: } adamstark@57: adamstark@57: //====================================================================== adamstark@57: BOOST_AUTO_TEST_CASE(constructorWithHopSize) adamstark@57: { adamstark@57: BTrack b(1024); adamstark@57: adamstark@57: BOOST_CHECK_EQUAL(b.getHopSize(), 1024); adamstark@57: } adamstark@57: adamstark@57: //====================================================================== adamstark@57: BOOST_AUTO_TEST_CASE(constructorWithHopSizeAndFrameSize) adamstark@57: { adamstark@57: BTrack b(256,512); adamstark@57: adamstark@57: BOOST_CHECK_EQUAL(b.getHopSize(), 256); adamstark@57: } adamstark@57: adamstark@57: BOOST_AUTO_TEST_SUITE_END() adamstark@57: //====================================================================== adamstark@57: //====================================================================== adamstark@57: adamstark@57: adamstark@57: //====================================================================== adamstark@56: //=================== PROCESSING SIMPLE VALUES ========================= adamstark@56: //====================================================================== adamstark@56: BOOST_AUTO_TEST_SUITE(processingSimpleValues) adamstark@56: adamstark@56: //====================================================================== adamstark@56: BOOST_AUTO_TEST_CASE(processZeroValuedOnsetDetectionFunctionSamples) adamstark@56: { adamstark@56: BTrack b(512); adamstark@56: adamstark@56: long numSamples = 20000; adamstark@56: adamstark@56: std::vector odfSamples; adamstark@56: adamstark@56: int maxInterval = 0; adamstark@56: int currentInterval = 0; adamstark@56: int numBeats = 0; adamstark@56: adamstark@56: for (int i = 0;i < numSamples;i++) adamstark@56: { adamstark@56: b.processOnsetDetectionFunctionSample(0.0); adamstark@56: adamstark@56: currentInterval++; adamstark@56: adamstark@57: if (b.beatDueInCurrentFrame()) adamstark@56: { adamstark@56: numBeats++; adamstark@56: adamstark@56: if (currentInterval > maxInterval) adamstark@56: { adamstark@56: maxInterval = currentInterval; adamstark@56: } adamstark@56: adamstark@56: currentInterval = 0; adamstark@56: } adamstark@56: } adamstark@56: adamstark@56: // check that the maximum interval between beats does not adamstark@56: // exceed 100 onset detection function samples (~ 1.3 seconds) adamstark@56: BOOST_CHECK(maxInterval < 100); adamstark@56: adamstark@56: // check that we have at least a beat for every 100 samples adamstark@56: BOOST_CHECK(numBeats > (numSamples/100)); adamstark@56: adamstark@56: } adamstark@56: adamstark@56: //====================================================================== adamstark@56: BOOST_AUTO_TEST_CASE(processRandomOnsetDetectionFunctionSamples) adamstark@56: { adamstark@56: BTrack b(512); adamstark@56: adamstark@56: long numSamples = 20000; adamstark@56: adamstark@56: std::vector odfSamples; adamstark@56: adamstark@56: int maxInterval = 0; adamstark@56: int currentInterval = 0; adamstark@56: int numBeats = 0; adamstark@56: adamstark@56: for (int i = 0;i < numSamples;i++) adamstark@56: { adamstark@56: odfSamples.push_back(random() % 1000); adamstark@56: } adamstark@56: adamstark@56: for (int i = 0;i < numSamples;i++) adamstark@56: { adamstark@56: b.processOnsetDetectionFunctionSample(odfSamples[i]); adamstark@56: adamstark@56: currentInterval++; adamstark@56: adamstark@57: if (b.beatDueInCurrentFrame()) adamstark@56: { adamstark@56: numBeats++; adamstark@56: adamstark@56: if (currentInterval > maxInterval) adamstark@56: { adamstark@56: maxInterval = currentInterval; adamstark@56: } adamstark@56: adamstark@56: currentInterval = 0; adamstark@56: } adamstark@56: } adamstark@56: adamstark@56: // check that the maximum interval between beats does not adamstark@56: // exceed 100 onset detection function samples (~ 1.3 seconds) adamstark@56: BOOST_CHECK(maxInterval < 100); adamstark@56: adamstark@56: // check that we have at least a beat for every 100 samples adamstark@56: BOOST_CHECK(numBeats > (numSamples/100)); adamstark@56: adamstark@56: } adamstark@56: adamstark@56: //====================================================================== adamstark@56: BOOST_AUTO_TEST_CASE(processNegativeOnsetDetectionFunctionSamples) adamstark@56: { adamstark@56: BTrack b(512); adamstark@56: adamstark@56: long numSamples = 20000; adamstark@56: adamstark@56: std::vector odfSamples; adamstark@56: adamstark@56: int maxInterval = 0; adamstark@56: int currentInterval = 0; adamstark@56: int numBeats = 0; adamstark@56: adamstark@56: for (int i = 0;i < numSamples;i++) adamstark@56: { adamstark@56: odfSamples.push_back(-1.0*(random() % 1000)); adamstark@56: } adamstark@56: adamstark@56: for (int i = 0;i < numSamples;i++) adamstark@56: { adamstark@56: b.processOnsetDetectionFunctionSample(odfSamples[i]); adamstark@56: adamstark@56: currentInterval++; adamstark@56: adamstark@57: if (b.beatDueInCurrentFrame()) adamstark@56: { adamstark@56: numBeats++; adamstark@56: adamstark@56: if (currentInterval > maxInterval) adamstark@56: { adamstark@56: maxInterval = currentInterval; adamstark@56: } adamstark@56: adamstark@56: currentInterval = 0; adamstark@56: } adamstark@56: } adamstark@56: adamstark@56: // check that the maximum interval between beats does not adamstark@56: // exceed 100 onset detection function samples (~ 1.3 seconds) adamstark@56: BOOST_CHECK(maxInterval < 100); adamstark@56: adamstark@56: // check that we have at least a beat for every 100 samples adamstark@56: BOOST_CHECK(numBeats > (numSamples/100)); adamstark@56: adamstark@56: } adamstark@56: adamstark@56: //====================================================================== adamstark@56: BOOST_AUTO_TEST_CASE(processSeriesOfDeltaFunctions) adamstark@56: { adamstark@56: BTrack b(512); adamstark@56: adamstark@56: long numSamples = 20000; adamstark@56: int beatPeriod = 43; adamstark@56: adamstark@56: std::vector odfSamples; adamstark@56: adamstark@56: int maxInterval = 0; adamstark@56: int currentInterval = 0; adamstark@56: int numBeats = 0; adamstark@56: int correct = 0; adamstark@56: adamstark@56: for (int i = 0;i < numSamples;i++) adamstark@56: { adamstark@56: if (i % beatPeriod == 0) adamstark@56: { adamstark@56: odfSamples.push_back(1000); adamstark@56: } adamstark@56: else adamstark@56: { adamstark@56: odfSamples.push_back(0.0); adamstark@56: } adamstark@56: } adamstark@56: adamstark@56: for (int i = 0;i < numSamples;i++) adamstark@56: { adamstark@56: b.processOnsetDetectionFunctionSample(odfSamples[i]); adamstark@56: adamstark@56: currentInterval++; adamstark@56: adamstark@57: if (b.beatDueInCurrentFrame()) adamstark@56: { adamstark@56: numBeats++; adamstark@56: adamstark@56: if (currentInterval > maxInterval) adamstark@56: { adamstark@56: maxInterval = currentInterval; adamstark@56: } adamstark@56: adamstark@56: if (currentInterval == beatPeriod) adamstark@56: { adamstark@56: correct++; adamstark@56: } adamstark@56: adamstark@56: currentInterval = 0; adamstark@56: } adamstark@56: } adamstark@56: adamstark@56: // check that the maximum interval between beats does not adamstark@56: // exceed 100 onset detection function samples (~ 1.3 seconds) adamstark@56: BOOST_CHECK(maxInterval < 100); adamstark@56: adamstark@56: // check that we have at least a beat for every 100 samples adamstark@56: BOOST_CHECK(numBeats > (numSamples/100)); adamstark@56: adamstark@56: // check that the number of correct beats is larger than 99% adamstark@56: // of the total number of beats adamstark@56: BOOST_CHECK(((double)correct) > (((double)numBeats)*0.99)); adamstark@56: } adamstark@56: adamstark@56: adamstark@56: BOOST_AUTO_TEST_SUITE_END() adamstark@57: //====================================================================== adamstark@57: //====================================================================== adamstark@56: adamstark@56: adamstark@56: adamstark@56: adamstark@56: adamstark@56: #endif