Mercurial > hg > qm-dsp
comparison tests/TestMedianFilter.cpp @ 391:a1c6153d4b49
Median filter test
author | Chris Cannam <c.cannam@qmul.ac.uk> |
---|---|
date | Mon, 07 Apr 2014 13:43:48 +0100 |
parents | |
children | a82362d50144 |
comparison
equal
deleted
inserted
replaced
390:2e9be0ce4374 | 391:a1c6153d4b49 |
---|---|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ | |
2 | |
3 #include "maths/MedianFilter.h" | |
4 | |
5 #include <cmath> | |
6 | |
7 #define BOOST_TEST_DYN_LINK | |
8 #define BOOST_TEST_MAIN | |
9 | |
10 #include <boost/test/unit_test.hpp> | |
11 | |
12 BOOST_AUTO_TEST_SUITE(TestMedianFilter) | |
13 | |
14 BOOST_AUTO_TEST_CASE(odd) | |
15 { | |
16 // A median filter of size N always retains a pool of N elements, | |
17 // which start out all-zero. So the output median will remain zero | |
18 // until N/2 elements have been pushed. | |
19 MedianFilter<double> f(3); | |
20 f.push(1); // 0 0 1 | |
21 BOOST_CHECK_EQUAL(f.get(), 0); | |
22 BOOST_CHECK_EQUAL(f.get(), 0); | |
23 f.push(-3); // 0 1 -3 | |
24 BOOST_CHECK_EQUAL(f.get(), 0); | |
25 f.push(5); // 1 -3 5 | |
26 BOOST_CHECK_EQUAL(f.get(), 1); | |
27 f.push(7); // -3 5 7 | |
28 BOOST_CHECK_EQUAL(f.get(), 5); | |
29 BOOST_CHECK_EQUAL(f.get(), 5); | |
30 f.push(3); // 5 7 3 | |
31 BOOST_CHECK_EQUAL(f.get(), 5); | |
32 f.push(3); // 7 3 3 | |
33 BOOST_CHECK_EQUAL(f.get(), 3); | |
34 } | |
35 | |
36 BOOST_AUTO_TEST_CASE(even) | |
37 { | |
38 // Our median does not halve the difference (should it??), it just | |
39 // returns the next element from the input set | |
40 MedianFilter<double> f(4); | |
41 f.push(1); // 0 0 0 1 | |
42 BOOST_CHECK_EQUAL(f.get(), 0); | |
43 BOOST_CHECK_EQUAL(f.get(), 0); | |
44 f.push(-3); // 0 0 1 -3 | |
45 BOOST_CHECK_EQUAL(f.get(), 0); | |
46 f.push(5); // 0 1 -3 5 | |
47 BOOST_CHECK_EQUAL(f.get(), 1); | |
48 f.push(7); // 1 -3 5 7 | |
49 BOOST_CHECK_EQUAL(f.get(), 5); | |
50 BOOST_CHECK_EQUAL(f.get(), 5); | |
51 f.push(3); // -3 5 7 3 | |
52 BOOST_CHECK_EQUAL(f.get(), 5); | |
53 f.push(3); // 5 7 3 3 | |
54 BOOST_CHECK_EQUAL(f.get(), 5); | |
55 } | |
56 | |
57 BOOST_AUTO_TEST_CASE(odd75) | |
58 { | |
59 MedianFilter<double> f(5, 75.f); | |
60 f.push(1); // 0 0 0 0 1 | |
61 BOOST_CHECK_EQUAL(f.get(), 0); | |
62 BOOST_CHECK_EQUAL(f.get(), 0); | |
63 f.push(-3); // 0 0 0 1 -3 | |
64 BOOST_CHECK_EQUAL(f.get(), 0); | |
65 f.push(5); // 0 0 1 -3 5 | |
66 BOOST_CHECK_EQUAL(f.get(), 1); | |
67 f.push(7); // 0 1 -3 5 7 | |
68 BOOST_CHECK_EQUAL(f.get(), 5); | |
69 BOOST_CHECK_EQUAL(f.get(), 5); | |
70 f.push(3); // 0 -3 5 7 3 | |
71 BOOST_CHECK_EQUAL(f.get(), 5); | |
72 f.push(3); // 0 5 7 3 3 | |
73 BOOST_CHECK_EQUAL(f.get(), 5); | |
74 } | |
75 | |
76 BOOST_AUTO_TEST_CASE(even75) | |
77 { | |
78 MedianFilter<double> f(4, 75.f); | |
79 f.push(1); // 0 0 0 1 | |
80 BOOST_CHECK_EQUAL(f.get(), 1); | |
81 BOOST_CHECK_EQUAL(f.get(), 1); | |
82 f.push(-3); // 0 0 1 -3 | |
83 BOOST_CHECK_EQUAL(f.get(), 1); | |
84 f.push(5); // 0 1 -3 5 | |
85 BOOST_CHECK_EQUAL(f.get(), 5); | |
86 f.push(7); // 1 -3 5 7 | |
87 BOOST_CHECK_EQUAL(f.get(), 7); | |
88 BOOST_CHECK_EQUAL(f.get(), 7); | |
89 f.push(3); // -3 5 7 3 | |
90 BOOST_CHECK_EQUAL(f.get(), 7); | |
91 f.push(3); // 5 7 3 3 | |
92 BOOST_CHECK_EQUAL(f.get(), 7); | |
93 } | |
94 | |
95 BOOST_AUTO_TEST_SUITE_END() | |
96 | |
97 |