Mercurial > hg > match-vamp
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 |