Chris@131
|
1
|
Chris@131
|
2 #include "DistanceMetric.h"
|
Chris@131
|
3
|
Chris@131
|
4 #include <vector>
|
Chris@131
|
5 #include <iostream>
|
Chris@131
|
6 #include <cmath>
|
Chris@131
|
7
|
Chris@131
|
8 using namespace std;
|
Chris@131
|
9
|
Chris@131
|
10 #define BOOST_TEST_DYN_LINK
|
Chris@131
|
11 #define BOOST_TEST_MAIN
|
Chris@131
|
12
|
Chris@131
|
13 #include <boost/test/unit_test.hpp>
|
Chris@131
|
14
|
Chris@131
|
15 static vector<double> getTestFeature(double m)
|
Chris@131
|
16 {
|
Chris@131
|
17 vector<double> f;
|
Chris@131
|
18 double fd[] = { 0, 1, 2, 3 };
|
Chris@131
|
19 for (int i = 0; i < 4; ++i) {
|
Chris@131
|
20 f.push_back(fd[i] * m);
|
Chris@131
|
21 }
|
Chris@131
|
22 return f;
|
Chris@131
|
23 }
|
Chris@131
|
24
|
Chris@131
|
25 BOOST_AUTO_TEST_SUITE(TestDistanceMetric)
|
Chris@131
|
26
|
Chris@131
|
27 BOOST_AUTO_TEST_CASE(nonorm)
|
Chris@131
|
28 {
|
Chris@143
|
29 DistanceMetric::Parameters params;
|
Chris@143
|
30 params.norm = DistanceMetric::NoDistanceNormalisation;
|
Chris@143
|
31 DistanceMetric dm(params);
|
Chris@131
|
32 vector<double>
|
Chris@131
|
33 e1 = getTestFeature(1),
|
Chris@131
|
34 e2 = getTestFeature(2),
|
Chris@131
|
35 e0 = getTestFeature(0);
|
Chris@131
|
36
|
Chris@146
|
37 double noise = 1e-3 * 4;
|
Chris@146
|
38
|
Chris@146
|
39 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0 + noise);
|
Chris@146
|
40 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 6.0 + noise);
|
Chris@146
|
41 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 6.0 + noise);
|
Chris@146
|
42 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0 + noise);
|
Chris@146
|
43 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 6.0 + noise);
|
Chris@146
|
44 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 12.0 + noise);
|
Chris@133
|
45 }
|
Chris@133
|
46
|
Chris@133
|
47 BOOST_AUTO_TEST_CASE(sum)
|
Chris@133
|
48 {
|
Chris@143
|
49 DistanceMetric::Parameters params;
|
Chris@143
|
50 params.norm = DistanceMetric::NormaliseDistanceToSum;
|
Chris@143
|
51 DistanceMetric dm(params);
|
Chris@133
|
52 vector<double>
|
Chris@133
|
53 e1 = getTestFeature(1),
|
Chris@133
|
54 e2 = getTestFeature(2),
|
Chris@133
|
55 e0 = getTestFeature(0);
|
Chris@133
|
56
|
Chris@146
|
57 double noise = 1e-3 * 4;
|
Chris@146
|
58
|
Chris@146
|
59 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 1.0);
|
Chris@133
|
60 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 1.0);
|
Chris@133
|
61 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 1.0);
|
Chris@146
|
62 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), noise / (12.0 + noise));
|
Chris@146
|
63 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), (6.0 + noise) / (18.0 + noise));
|
Chris@133
|
64 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 1.0);
|
Chris@131
|
65 }
|
Chris@131
|
66
|
Chris@131
|
67 BOOST_AUTO_TEST_SUITE_END()
|
Chris@131
|
68
|
Chris@131
|
69
|
Chris@131
|
70
|