annotate tests/TestMedianFilter.cpp @ 166:36bcde3c13d8

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