matthiasm@0: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ matthiasm@0: matthiasm@0: #include "YinUtil.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(difference1) matthiasm@0: { matthiasm@0: // difference always needs to be non-negative matthiasm@0: double in[] = { 1, -1, 1, -1, 1, -1, 1, -1 }; matthiasm@0: double yinBuffer[4]; matthiasm@0: matthiasm@0: YinUtil::difference(in, yinBuffer, 4); matthiasm@0: matthiasm@0: BOOST_CHECK(yinBuffer[0] >= 0); matthiasm@0: BOOST_CHECK(yinBuffer[1] >= 0); matthiasm@0: BOOST_CHECK(yinBuffer[2] >= 0); matthiasm@0: BOOST_CHECK(yinBuffer[3] >= 0); matthiasm@0: } matthiasm@0: matthiasm@0: // BOOST_AUTO_TEST_CASE(difference2) matthiasm@0: // { matthiasm@0: // // difference for fast sinusoid matthiasm@0: // double in[] = { 1, -1, 1, -1, 1, -1, 1, -1 }; matthiasm@0: // double yinBuffer[4]; matthiasm@0: // matthiasm@0: // Yin y(8, 256); matthiasm@0: // matthiasm@0: // y.difference(in, yinBuffer); matthiasm@0: // matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[0], 0); matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[1], 16); matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[2], 0); matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[3], 16); matthiasm@0: // } matthiasm@0: // matthiasm@0: // BOOST_AUTO_TEST_CASE(difference3) matthiasm@0: // { matthiasm@0: // // difference for contaminated fast sinusoid matthiasm@0: // double in[] = { 2, -1, 1, -1, 1, -1, 1, -1 }; matthiasm@0: // double yinBuffer[4]; matthiasm@0: // matthiasm@0: // Yin y(8, 256); matthiasm@0: // matthiasm@0: // y.difference(in, yinBuffer); matthiasm@0: // matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[0], 0); matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[1], 21); matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[2], 1); matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[3], 21); matthiasm@0: // } matthiasm@0: // matthiasm@0: // BOOST_AUTO_TEST_CASE(difference4) matthiasm@0: // { matthiasm@0: // // matthiasm@0: // double in[2048]; matthiasm@0: // double yinBuffer[1024]; matthiasm@0: // for (size_t i = 0; i < 2048; i = i + 2) { matthiasm@0: // in[i] = 1; matthiasm@0: // in[i+1] = -1; matthiasm@0: // } matthiasm@0: // Yin y(2048, 44100); matthiasm@0: // matthiasm@0: // y.difference(in, yinBuffer); matthiasm@0: // matthiasm@0: // BOOST_CHECK(yinBuffer[0] >= 0); matthiasm@0: // BOOST_CHECK(yinBuffer[1] >= 0); matthiasm@0: // } matthiasm@0: // matthiasm@0: // BOOST_AUTO_TEST_CASE(cumulativeDifference1) matthiasm@0: // { matthiasm@0: // // test against matlab implementation matthiasm@0: // double yinBuffer[] = {0, 21, 1, 21}; matthiasm@0: // matthiasm@0: // Yin y(8, 256); matthiasm@0: // matthiasm@0: // y.cumulativeDifference(yinBuffer); matthiasm@0: // matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[0], 1); matthiasm@0: // BOOST_CHECK_EQUAL(yinBuffer[1], 1); // this is just chance! matthiasm@0: // BOOST_CHECK(yinBuffer[2] >= 0.0909 && yinBuffer[2] < 0.091); matthiasm@0: // BOOST_CHECK(yinBuffer[3] >= 1.4651 && yinBuffer[3] < 1.466); matthiasm@0: // matthiasm@0: // } matthiasm@0: matthiasm@0: matthiasm@0: matthiasm@0: BOOST_AUTO_TEST_SUITE_END() matthiasm@0: