Chris@137
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
Chris@137
|
2
|
Chris@137
|
3 #include "Resampler.h"
|
Chris@137
|
4
|
Chris@137
|
5 #include <iostream>
|
Chris@137
|
6
|
Chris@137
|
7 #include <cmath>
|
Chris@137
|
8
|
Chris@137
|
9 #define BOOST_TEST_DYN_LINK
|
Chris@137
|
10 #define BOOST_TEST_MAIN
|
Chris@137
|
11
|
Chris@137
|
12 #include <boost/test/unit_test.hpp>
|
Chris@137
|
13
|
Chris@137
|
14 BOOST_AUTO_TEST_SUITE(TestResampler)
|
Chris@137
|
15
|
Chris@137
|
16 using std::cout;
|
Chris@137
|
17 using std::endl;
|
Chris@137
|
18
|
Chris@137
|
19 void
|
Chris@137
|
20 testResampler(int sourceRate,
|
Chris@137
|
21 int targetRate,
|
Chris@137
|
22 int n,
|
Chris@137
|
23 double *in,
|
Chris@137
|
24 int m,
|
Chris@137
|
25 double *expected)
|
Chris@137
|
26 {
|
Chris@137
|
27 Resampler r(sourceRate, targetRate);
|
Chris@137
|
28 int latency = r.getLatency();
|
Chris@137
|
29 std::cerr << "latency = " << latency << std::endl;
|
Chris@137
|
30
|
Chris@137
|
31 int m1 = m + latency;
|
Chris@137
|
32 int n1 = int((m1 * sourceRate) / targetRate);
|
Chris@137
|
33
|
Chris@137
|
34 double *inPadded = new double[n1];
|
Chris@137
|
35 double *outPadded = new double[m1];
|
Chris@137
|
36
|
Chris@137
|
37 for (int i = 0; i < n1; ++i) {
|
Chris@137
|
38 if (i < n) inPadded[i] = in[i];
|
Chris@137
|
39 else inPadded[i] = 0.0;
|
Chris@137
|
40 }
|
Chris@137
|
41
|
Chris@137
|
42 for (int i = 0; i < m1; ++i) {
|
Chris@137
|
43 outPadded[i] = -999.0;
|
Chris@137
|
44 }
|
Chris@137
|
45
|
Chris@137
|
46 int got = r.process(inPadded, outPadded, n1);
|
Chris@137
|
47
|
Chris@137
|
48 std::cerr << n1 << " in, " << got << " out" << std::endl;
|
Chris@137
|
49
|
Chris@137
|
50 BOOST_CHECK_EQUAL(got, m1);
|
Chris@137
|
51
|
Chris@137
|
52 std::cerr << "results including latency padding:" << std::endl;
|
Chris@137
|
53 for (int i = 0; i < m1; ++i) {
|
Chris@137
|
54 std::cerr << outPadded[i] << " ";
|
Chris@137
|
55 if (i % 6 == 5) std::cerr << "\n";
|
Chris@137
|
56 }
|
Chris@137
|
57 std::cerr << "\n";
|
Chris@137
|
58
|
Chris@137
|
59 for (int i = latency; i < m1; ++i) {
|
Chris@137
|
60 BOOST_CHECK_CLOSE(outPadded[i], expected[i-latency], 1e-8);
|
Chris@137
|
61 }
|
Chris@137
|
62 delete[] outPadded;
|
Chris@137
|
63 delete[] inPadded;
|
Chris@137
|
64 }
|
Chris@137
|
65
|
Chris@137
|
66 BOOST_AUTO_TEST_CASE(sameRate)
|
Chris@137
|
67 {
|
Chris@137
|
68 double d[] = { 0, 0.1, -0.3, -0.4, -0.3, 0, 0.5, 0.2, 0.8, -0.1 };
|
Chris@137
|
69 testResampler(4, 4, 10, d, 10, d);
|
Chris@137
|
70 }
|
Chris@137
|
71
|
Chris@137
|
72 BOOST_AUTO_TEST_SUITE_END()
|
Chris@137
|
73
|