annotate test/TestDistanceMetric.cpp @ 186:af6120a32063 re-minimise

Fix tests
author Chris Cannam
date Thu, 26 Feb 2015 10:38:59 +0000
parents a17b22abd551
children cee78423d235
rev   line source
Chris@186 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@131 2
Chris@131 3 #include "DistanceMetric.h"
Chris@131 4
Chris@131 5 #include <vector>
Chris@131 6 #include <iostream>
Chris@131 7 #include <cmath>
Chris@131 8
Chris@131 9 using namespace std;
Chris@131 10
Chris@131 11 #define BOOST_TEST_DYN_LINK
Chris@131 12 #define BOOST_TEST_MAIN
Chris@131 13
Chris@131 14 #include <boost/test/unit_test.hpp>
Chris@131 15
Chris@185 16 static feature_t getTestFeature(double m)
Chris@131 17 {
Chris@185 18 feature_t f;
Chris@185 19 int fd[] = { 0, 1, 2, 3 };
Chris@131 20 for (int i = 0; i < 4; ++i) {
Chris@186 21 f.push_back(featurebin_t(fd[i] * m));
Chris@131 22 }
Chris@131 23 return f;
Chris@131 24 }
Chris@131 25
Chris@131 26 BOOST_AUTO_TEST_SUITE(TestDistanceMetric)
Chris@131 27
Chris@186 28 BOOST_AUTO_TEST_CASE(scale)
Chris@186 29 {
Chris@186 30 DistanceMetric::Parameters params;
Chris@186 31 params.scale = 1.0;
Chris@186 32 DistanceMetric dm(params);
Chris@186 33
Chris@186 34 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(0.0), 0);
Chris@186 35 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(1.0), 1);
Chris@186 36 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(2.0), 2);
Chris@186 37
Chris@186 38 if (sizeof(distance_t) == 1) {
Chris@186 39 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(256.0), 255);
Chris@186 40 } else {
Chris@186 41 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(256.0), 256);
Chris@186 42 }
Chris@186 43
Chris@186 44 params.scale = 2.0;
Chris@186 45 dm = DistanceMetric(params);
Chris@186 46
Chris@186 47 if (sizeof(distance_t) == 1) {
Chris@186 48 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(0.0), 0);
Chris@186 49 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(1.0), 2);
Chris@186 50 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(2.0), 4);
Chris@186 51 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(128.0), 255);
Chris@186 52 } else {
Chris@186 53 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(0.0), 0);
Chris@186 54 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(1.0), 1);
Chris@186 55 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(2.0), 2);
Chris@186 56 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(256.0), 256);
Chris@186 57 }
Chris@186 58 }
Chris@186 59
Chris@131 60 BOOST_AUTO_TEST_CASE(nonorm)
Chris@131 61 {
Chris@143 62 DistanceMetric::Parameters params;
Chris@143 63 params.norm = DistanceMetric::NoDistanceNormalisation;
Chris@143 64 DistanceMetric dm(params);
Chris@185 65 feature_t
Chris@186 66 e1 = getTestFeature(1),
Chris@186 67 e2 = getTestFeature(2),
Chris@186 68 e0 = getTestFeature(0);
Chris@131 69
Chris@146 70 double noise = 1e-3 * 4;
Chris@146 71
Chris@186 72 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), dm.scaleValueIntoDistanceRange(0.0 + noise));
Chris@186 73 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), dm.scaleValueIntoDistanceRange(6.0 + noise));
Chris@186 74 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), dm.scaleValueIntoDistanceRange(6.0 + noise));
Chris@186 75 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), dm.scaleValueIntoDistanceRange(0.0 + noise));
Chris@186 76 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), dm.scaleValueIntoDistanceRange(6.0 + noise));
Chris@186 77 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), dm.scaleValueIntoDistanceRange(12.0 + noise));
Chris@133 78 }
Chris@133 79
Chris@133 80 BOOST_AUTO_TEST_CASE(sum)
Chris@133 81 {
Chris@143 82 DistanceMetric::Parameters params;
Chris@143 83 params.norm = DistanceMetric::NormaliseDistanceToSum;
Chris@143 84 DistanceMetric dm(params);
Chris@185 85 feature_t
Chris@186 86 e1 = getTestFeature(1),
Chris@186 87 e2 = getTestFeature(2),
Chris@186 88 e0 = getTestFeature(0);
Chris@133 89
Chris@146 90 double noise = 1e-3 * 4;
Chris@146 91
Chris@186 92 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), dm.scaleValueIntoDistanceRange(1.0));
Chris@186 93 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), dm.scaleValueIntoDistanceRange(1.0));
Chris@186 94 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), dm.scaleValueIntoDistanceRange(1.0));
Chris@186 95 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), dm.scaleValueIntoDistanceRange(noise / (12.0 + noise)));
Chris@186 96 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), dm.scaleValueIntoDistanceRange((6.0 + noise) / (18.0 + noise)));
Chris@186 97 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), dm.scaleValueIntoDistanceRange(1.0));
Chris@131 98 }
Chris@131 99
Chris@131 100 BOOST_AUTO_TEST_SUITE_END()
Chris@131 101
Chris@131 102
Chris@131 103