comparison 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
comparison
equal deleted inserted replaced
185:a17b22abd551 186:af6120a32063
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
1 2
2 #include "DistanceMetric.h" 3 #include "DistanceMetric.h"
3 4
4 #include <vector> 5 #include <vector>
5 #include <iostream> 6 #include <iostream>
15 static feature_t getTestFeature(double m) 16 static feature_t getTestFeature(double m)
16 { 17 {
17 feature_t f; 18 feature_t f;
18 int fd[] = { 0, 1, 2, 3 }; 19 int fd[] = { 0, 1, 2, 3 };
19 for (int i = 0; i < 4; ++i) { 20 for (int i = 0; i < 4; ++i) {
20 f.push_back(featurebin_t(fd[i] * m)); 21 f.push_back(featurebin_t(fd[i] * m));
21 } 22 }
22 return f; 23 return f;
23 } 24 }
24 25
25 BOOST_AUTO_TEST_SUITE(TestDistanceMetric) 26 BOOST_AUTO_TEST_SUITE(TestDistanceMetric)
27
28 BOOST_AUTO_TEST_CASE(scale)
29 {
30 DistanceMetric::Parameters params;
31 params.scale = 1.0;
32 DistanceMetric dm(params);
33
34 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(0.0), 0);
35 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(1.0), 1);
36 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(2.0), 2);
37
38 if (sizeof(distance_t) == 1) {
39 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(256.0), 255);
40 } else {
41 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(256.0), 256);
42 }
43
44 params.scale = 2.0;
45 dm = DistanceMetric(params);
46
47 if (sizeof(distance_t) == 1) {
48 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(0.0), 0);
49 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(1.0), 2);
50 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(2.0), 4);
51 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(128.0), 255);
52 } else {
53 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(0.0), 0);
54 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(1.0), 1);
55 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(2.0), 2);
56 BOOST_CHECK_EQUAL(dm.scaleValueIntoDistanceRange(256.0), 256);
57 }
58 }
26 59
27 BOOST_AUTO_TEST_CASE(nonorm) 60 BOOST_AUTO_TEST_CASE(nonorm)
28 { 61 {
29 DistanceMetric::Parameters params; 62 DistanceMetric::Parameters params;
30 params.norm = DistanceMetric::NoDistanceNormalisation; 63 params.norm = DistanceMetric::NoDistanceNormalisation;
31 DistanceMetric dm(params); 64 DistanceMetric dm(params);
32 feature_t 65 feature_t
33 e1 = getTestFeature(1), 66 e1 = getTestFeature(1),
34 e2 = getTestFeature(2), 67 e2 = getTestFeature(2),
35 e0 = getTestFeature(0); 68 e0 = getTestFeature(0);
36 69
37 double noise = 1e-3 * 4; 70 double noise = 1e-3 * 4;
38 71
39 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0 + noise); 72 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), dm.scaleValueIntoDistanceRange(0.0 + noise));
40 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 6.0 + noise); 73 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), dm.scaleValueIntoDistanceRange(6.0 + noise));
41 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 6.0 + noise); 74 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), dm.scaleValueIntoDistanceRange(6.0 + noise));
42 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0 + noise); 75 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), dm.scaleValueIntoDistanceRange(0.0 + noise));
43 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 6.0 + noise); 76 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), dm.scaleValueIntoDistanceRange(6.0 + noise));
44 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 12.0 + noise); 77 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), dm.scaleValueIntoDistanceRange(12.0 + noise));
45 } 78 }
46 79
47 BOOST_AUTO_TEST_CASE(sum) 80 BOOST_AUTO_TEST_CASE(sum)
48 { 81 {
49 DistanceMetric::Parameters params; 82 DistanceMetric::Parameters params;
50 params.norm = DistanceMetric::NormaliseDistanceToSum; 83 params.norm = DistanceMetric::NormaliseDistanceToSum;
51 DistanceMetric dm(params); 84 DistanceMetric dm(params);
52 feature_t 85 feature_t
53 e1 = getTestFeature(1), 86 e1 = getTestFeature(1),
54 e2 = getTestFeature(2), 87 e2 = getTestFeature(2),
55 e0 = getTestFeature(0); 88 e0 = getTestFeature(0);
56 89
57 double noise = 1e-3 * 4; 90 double noise = 1e-3 * 4;
58 91
59 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 1.0); 92 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), dm.scaleValueIntoDistanceRange(1.0));
60 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 1.0); 93 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), dm.scaleValueIntoDistanceRange(1.0));
61 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 1.0); 94 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), dm.scaleValueIntoDistanceRange(1.0));
62 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), noise / (12.0 + noise)); 95 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), dm.scaleValueIntoDistanceRange(noise / (12.0 + noise)));
63 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), (6.0 + noise) / (18.0 + noise)); 96 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), dm.scaleValueIntoDistanceRange((6.0 + noise) / (18.0 + noise)));
64 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 1.0); 97 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), dm.scaleValueIntoDistanceRange(1.0));
65 } 98 }
66 99
67 BOOST_AUTO_TEST_SUITE_END() 100 BOOST_AUTO_TEST_SUITE_END()
68 101
69 102