comparison tests/TestMedianFilter.cpp @ 166:36bcde3c13d8

Median filter test
author Chris Cannam
date Mon, 07 Apr 2014 13:43:48 +0100
parents
children a82362d50144
comparison
equal deleted inserted replaced
165:ec9f5b9801bd 166:36bcde3c13d8
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