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