annotate test/TestYinUtil.cpp @ 164:a7d9c6142f8f tip

Added tag v1.2 for changeset 4a97f7638ffd
author Chris Cannam
date Thu, 06 Feb 2020 15:02:47 +0000
parents 99bac62ee2da
children
rev   line source
matthiasm@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
matthiasm@0 2
matthiasm@0 3 #include "YinUtil.h"
matthiasm@0 4
matthiasm@0 5 #define BOOST_TEST_DYN_LINK
matthiasm@0 6 #define BOOST_TEST_MAIN
matthiasm@0 7
matthiasm@0 8 #include <boost/test/unit_test.hpp>
matthiasm@0 9
matthiasm@0 10 BOOST_AUTO_TEST_SUITE(TestYin)
matthiasm@0 11
matthiasm@0 12 BOOST_AUTO_TEST_CASE(difference1)
matthiasm@0 13 {
matthiasm@0 14 // difference always needs to be non-negative
matthiasm@0 15 double in[] = { 1, -1, 1, -1, 1, -1, 1, -1 };
matthiasm@0 16 double yinBuffer[4];
matthiasm@0 17
matthiasm@0 18 YinUtil::difference(in, yinBuffer, 4);
matthiasm@0 19
matthiasm@0 20 BOOST_CHECK(yinBuffer[0] >= 0);
matthiasm@0 21 BOOST_CHECK(yinBuffer[1] >= 0);
matthiasm@0 22 BOOST_CHECK(yinBuffer[2] >= 0);
matthiasm@0 23 BOOST_CHECK(yinBuffer[3] >= 0);
matthiasm@0 24 }
matthiasm@0 25
matthiasm@0 26 // BOOST_AUTO_TEST_CASE(difference2)
matthiasm@0 27 // {
matthiasm@0 28 // // difference for fast sinusoid
matthiasm@0 29 // double in[] = { 1, -1, 1, -1, 1, -1, 1, -1 };
matthiasm@0 30 // double yinBuffer[4];
matthiasm@0 31 //
matthiasm@0 32 // Yin y(8, 256);
matthiasm@0 33 //
matthiasm@0 34 // y.difference(in, yinBuffer);
matthiasm@0 35 //
matthiasm@0 36 // BOOST_CHECK_EQUAL(yinBuffer[0], 0);
matthiasm@0 37 // BOOST_CHECK_EQUAL(yinBuffer[1], 16);
matthiasm@0 38 // BOOST_CHECK_EQUAL(yinBuffer[2], 0);
matthiasm@0 39 // BOOST_CHECK_EQUAL(yinBuffer[3], 16);
matthiasm@0 40 // }
matthiasm@0 41 //
matthiasm@0 42 // BOOST_AUTO_TEST_CASE(difference3)
matthiasm@0 43 // {
matthiasm@0 44 // // difference for contaminated fast sinusoid
matthiasm@0 45 // double in[] = { 2, -1, 1, -1, 1, -1, 1, -1 };
matthiasm@0 46 // double yinBuffer[4];
matthiasm@0 47 //
matthiasm@0 48 // Yin y(8, 256);
matthiasm@0 49 //
matthiasm@0 50 // y.difference(in, yinBuffer);
matthiasm@0 51 //
matthiasm@0 52 // BOOST_CHECK_EQUAL(yinBuffer[0], 0);
matthiasm@0 53 // BOOST_CHECK_EQUAL(yinBuffer[1], 21);
matthiasm@0 54 // BOOST_CHECK_EQUAL(yinBuffer[2], 1);
matthiasm@0 55 // BOOST_CHECK_EQUAL(yinBuffer[3], 21);
matthiasm@0 56 // }
matthiasm@0 57 //
matthiasm@0 58 // BOOST_AUTO_TEST_CASE(difference4)
matthiasm@0 59 // {
matthiasm@0 60 // //
matthiasm@0 61 // double in[2048];
matthiasm@0 62 // double yinBuffer[1024];
matthiasm@0 63 // for (size_t i = 0; i < 2048; i = i + 2) {
matthiasm@0 64 // in[i] = 1;
matthiasm@0 65 // in[i+1] = -1;
matthiasm@0 66 // }
matthiasm@0 67 // Yin y(2048, 44100);
matthiasm@0 68 //
matthiasm@0 69 // y.difference(in, yinBuffer);
matthiasm@0 70 //
matthiasm@0 71 // BOOST_CHECK(yinBuffer[0] >= 0);
matthiasm@0 72 // BOOST_CHECK(yinBuffer[1] >= 0);
matthiasm@0 73 // }
matthiasm@0 74 //
matthiasm@0 75 // BOOST_AUTO_TEST_CASE(cumulativeDifference1)
matthiasm@0 76 // {
matthiasm@0 77 // // test against matlab implementation
matthiasm@0 78 // double yinBuffer[] = {0, 21, 1, 21};
matthiasm@0 79 //
matthiasm@0 80 // Yin y(8, 256);
matthiasm@0 81 //
matthiasm@0 82 // y.cumulativeDifference(yinBuffer);
matthiasm@0 83 //
matthiasm@0 84 // BOOST_CHECK_EQUAL(yinBuffer[0], 1);
matthiasm@0 85 // BOOST_CHECK_EQUAL(yinBuffer[1], 1); // this is just chance!
matthiasm@0 86 // BOOST_CHECK(yinBuffer[2] >= 0.0909 && yinBuffer[2] < 0.091);
matthiasm@0 87 // BOOST_CHECK(yinBuffer[3] >= 1.4651 && yinBuffer[3] < 1.466);
matthiasm@0 88 //
matthiasm@0 89 // }
matthiasm@0 90
matthiasm@0 91
matthiasm@0 92
matthiasm@0 93 BOOST_AUTO_TEST_SUITE_END()
matthiasm@0 94