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