annotate tests/TestFilter.cpp @ 209:ccd2019190bf msvc

Some MSVC fixes, including (temporarily, probably) renaming the FFT source file to avoid getting it mixed up with the Vamp SDK one in our object dir
author Chris Cannam
date Thu, 01 Feb 2018 16:34:08 +0000
parents ca658c7215a9
children 2de6184b2ce0
rev   line source
Chris@192 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@192 2
Chris@192 3 #include "dsp/signalconditioning/Filter.h"
Chris@192 4
Chris@192 5 #define BOOST_TEST_DYN_LINK
Chris@192 6 #define BOOST_TEST_MAIN
Chris@192 7
Chris@192 8 #include <boost/test/unit_test.hpp>
Chris@192 9
Chris@192 10 #include <stdexcept>
Chris@192 11
Chris@192 12 using namespace std;
Chris@192 13
Chris@192 14 BOOST_AUTO_TEST_SUITE(TestFilter)
Chris@192 15
Chris@192 16 static vector<double> in { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
Chris@192 17
Chris@192 18 static vector<double> iir_a { 1,5.75501989315662,16.326056867468,28.779190797823,34.2874379215653,28.137815126537,15.6064643257793,5.37874515231553,0.913800050254382,0.0,0.0 };
Chris@192 19 static vector<double> iir_b { 0.0031954608137085,0.0180937089815597,0.0508407778575426,0.0895040074158415,0.107385387168148,0.0895040074158415,0.0508407778575426,0.0180937089815597,0.0031954608137085,0.0,0.0 };
Chris@192 20 static vector<double> iir_expected { 0.003195460813709, 0.006094690058282, 0.009370240771381, 0.012857578361690, 0.015328760300750, 0.019107809614909, 0.022257958968869, 0.024598034053011, 0.029106103380941, 0.031152166476509, 0.034424013713795, 0.038775350541015, 0.039924063374886, 0.044846280036012, 0.047614917256999, 0.049338485830505 };
Chris@192 21
Chris@192 22 static vector<double> fir_b { -1.5511e-18,-0.022664,1.047e-17,0.27398,0.49737,0.27398,1.047e-17,-0.022664,-1.5511e-18 };
Chris@192 23 static vector<double> fir_expected { -1.5511e-18,-0.022664,-0.045328,0.20599,0.95467,1.9773,3,4,5,6,7,8,9,10,11,12 };
Chris@192 24
Chris@192 25 BOOST_AUTO_TEST_CASE(iir)
Chris@192 26 {
Chris@192 27 vector<double> a(iir_a);
Chris@192 28 vector<double> b(iir_b);
Chris@192 29 vector<double> expected(iir_expected);
Chris@192 30
Chris@193 31 Filter f({ a, b });
Chris@192 32
Chris@192 33 int n = expected.size();
Chris@192 34 vector<double> out(n, 0.0);
Chris@192 35
Chris@192 36 f.process(in.data(), out.data(), n);
Chris@192 37
Chris@192 38 double thresh = 1e-12;
Chris@192 39
Chris@192 40 for (int i = 0; i < n; ++i) {
Chris@192 41 BOOST_CHECK_SMALL(out[i] - expected[i], thresh);
Chris@192 42 }
Chris@192 43 }
Chris@192 44
Chris@192 45 BOOST_AUTO_TEST_CASE(iir_chunked)
Chris@192 46 {
Chris@192 47 vector<double> a(iir_a);
Chris@192 48 vector<double> b(iir_b);
Chris@192 49 vector<double> expected(iir_expected);
Chris@192 50
Chris@193 51 Filter f({ a, b });
Chris@192 52
Chris@192 53 int n = expected.size();
Chris@192 54 vector<double> out(n, 0.0);
Chris@192 55
Chris@192 56 int j = 0;
Chris@192 57 int i = 0;
Chris@192 58 while (j < n) {
Chris@192 59 if (++i == 4) {
Chris@192 60 i = 1;
Chris@192 61 }
Chris@192 62 if (j + i >= n) {
Chris@192 63 i = n - j;
Chris@192 64 }
Chris@192 65 f.process(in.data() + j, out.data() + j, i);
Chris@192 66 j += i;
Chris@192 67 }
Chris@192 68
Chris@192 69 double thresh = 1e-12;
Chris@192 70
Chris@192 71 for (int i = 0; i < n; ++i) {
Chris@192 72 BOOST_CHECK_SMALL(out[i] - expected[i], thresh);
Chris@192 73 }
Chris@192 74 }
Chris@192 75
Chris@192 76 BOOST_AUTO_TEST_CASE(fir)
Chris@192 77 {
Chris@192 78 vector<double> b(fir_b);
Chris@192 79 vector<double> expected(fir_expected);
Chris@192 80
Chris@193 81 Filter f({ {}, b });
Chris@192 82
Chris@192 83 int n = expected.size();
Chris@192 84 vector<double> out(n, 0.0);
Chris@192 85
Chris@192 86 f.process(in.data(), out.data(), n);
Chris@192 87
Chris@192 88 double thresh = 1e-4;
Chris@192 89
Chris@192 90 for (int i = 0; i < n; ++i) {
Chris@192 91 BOOST_CHECK_SMALL(out[i] - expected[i], thresh);
Chris@192 92 }
Chris@192 93 }
Chris@192 94
Chris@192 95 BOOST_AUTO_TEST_SUITE_END()
Chris@192 96