comparison tests/TestMedianFilter.cpp @ 407:f898c901c055

Fix handling of NaNs in MedianFilter, & test for it
author Chris Cannam <c.cannam@qmul.ac.uk>
date Mon, 23 Feb 2015 10:42:54 +0000
parents e7010b8eb0c6
children 2de6184b2ce0
comparison
equal deleted inserted replaced
406:ebde9a50bb74 407:f898c901c055
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 2
3 #include "maths/MedianFilter.h" 3 #include "maths/MedianFilter.h"
4 4
5 #include <cmath> 5 #include <cmath>
6 #include <cstdlib>
6 7
7 #define BOOST_TEST_DYN_LINK 8 #define BOOST_TEST_DYN_LINK
8 #define BOOST_TEST_MAIN 9 #define BOOST_TEST_MAIN
9 10
10 #include <boost/test/unit_test.hpp> 11 #include <boost/test/unit_test.hpp>
169 BOOST_CHECK_EQUAL(ifilt.get(), 1); 170 BOOST_CHECK_EQUAL(ifilt.get(), 1);
170 ifilt.push(1000); 171 ifilt.push(1000);
171 BOOST_CHECK_EQUAL(ifilt.get(), 2); 172 BOOST_CHECK_EQUAL(ifilt.get(), 2);
172 } 173 }
173 174
175 BOOST_AUTO_TEST_CASE(inf)
176 {
177 // Inf and -Inf should behave normally
178 double pinf = strtod("Inf", 0);
179 double ninf = strtod("-Inf", 0);
180 MedianFilter<double> dfilt(3);
181 dfilt.push(1.0);
182 dfilt.push(2.0);
183 dfilt.push(pinf);
184 BOOST_CHECK_EQUAL(dfilt.get(), 2.0);
185 dfilt.push(pinf);
186 BOOST_CHECK_EQUAL(dfilt.get(), pinf);
187 dfilt.push(pinf);
188 BOOST_CHECK_EQUAL(dfilt.get(), pinf);
189 dfilt.push(2.0);
190 BOOST_CHECK_EQUAL(dfilt.get(), pinf);
191 dfilt.push(1.0);
192 BOOST_CHECK_EQUAL(dfilt.get(), 2.0);
193 dfilt.push(ninf);
194 BOOST_CHECK_EQUAL(dfilt.get(), 1.0);
195 dfilt.push(pinf);
196 BOOST_CHECK_EQUAL(dfilt.get(), 1.0);
197 dfilt.push(ninf);
198 BOOST_CHECK_EQUAL(dfilt.get(), ninf);
199 }
200
201 BOOST_AUTO_TEST_CASE(nan)
202 {
203 // The filter should never accept a NaN, because it breaks sorting
204 // and comparison and that will break the filter. Instead it
205 // should insert 0.
206 double nan = strtod("NaN", 0);
207 MedianFilter<double> dfilt(3);
208 dfilt.push(1.0);
209 dfilt.push(2.0);
210 dfilt.push(nan);
211 BOOST_CHECK_EQUAL(dfilt.get(), 1.0);
212 dfilt.push(nan);
213 BOOST_CHECK_EQUAL(dfilt.get(), 0.0);
214 dfilt.push(-11.0);
215 BOOST_CHECK_EQUAL(dfilt.get(), 0.0);
216 dfilt.push(-1.0);
217 BOOST_CHECK_EQUAL(dfilt.get(), -1.0);
218 }
219
174 BOOST_AUTO_TEST_SUITE_END() 220 BOOST_AUTO_TEST_SUITE_END()
175 221
176 222