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
|