matthiasm@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ matthiasm@0: matthiasm@0: #include "Yin.h" matthiasm@0: matthiasm@0: #define BOOST_TEST_DYN_LINK matthiasm@0: #define BOOST_TEST_MAIN matthiasm@0: matthiasm@0: #include matthiasm@0: matthiasm@0: BOOST_AUTO_TEST_SUITE(TestYin) matthiasm@0: matthiasm@0: BOOST_AUTO_TEST_CASE(implicitYinOutput) matthiasm@0: { matthiasm@0: // this test is just to make sure a YinOutput initialises matthiasm@0: // -- the actual reason for me to write this is to have written matthiasm@0: // a test, so let's plough on... matthiasm@0: Yin::YinOutput out; matthiasm@0: matthiasm@0: BOOST_CHECK_EQUAL(out.f0, 0); matthiasm@0: BOOST_CHECK_EQUAL(out.periodicity, 0); matthiasm@0: BOOST_CHECK_EQUAL(out.rms, 0); matthiasm@0: } matthiasm@0: matthiasm@0: BOOST_AUTO_TEST_CASE(sine128) matthiasm@0: { matthiasm@0: matthiasm@0: // a very short frame (8) with maximum frequency (128), matthiasm@0: // assuming a sampling rate of 256 1/sec. matthiasm@0: // Yin should get it approximately right... matthiasm@0: // but because of post-processing we want to be tolerant matthiasm@0: matthiasm@0: double in[] = { 1, -1, 1, -1, 1, -1, 1, -1 }; matthiasm@0: Yin y(8, 256); matthiasm@0: Yin::YinOutput yo = y.process(in); matthiasm@0: matthiasm@0: BOOST_CHECK(yo.f0 > 114); matthiasm@0: BOOST_CHECK(yo.f0 < 142); matthiasm@0: } matthiasm@0: matthiasm@0: BOOST_AUTO_TEST_SUITE_END() matthiasm@0: