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@131
|
37 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0);
|
Chris@133
|
38 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 6.0);
|
Chris@133
|
39 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 6.0);
|
Chris@133
|
40 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0);
|
Chris@133
|
41 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 6.0);
|
Chris@133
|
42 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 12.0);
|
Chris@133
|
43 }
|
Chris@133
|
44
|
Chris@133
|
45 BOOST_AUTO_TEST_CASE(sum)
|
Chris@133
|
46 {
|
Chris@143
|
47 DistanceMetric::Parameters params;
|
Chris@143
|
48 params.norm = DistanceMetric::NormaliseDistanceToSum;
|
Chris@143
|
49 DistanceMetric dm(params);
|
Chris@133
|
50 vector<double>
|
Chris@133
|
51 e1 = getTestFeature(1),
|
Chris@133
|
52 e2 = getTestFeature(2),
|
Chris@133
|
53 e0 = getTestFeature(0);
|
Chris@133
|
54
|
Chris@133
|
55 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e0), 0.0);
|
Chris@133
|
56 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e0), 1.0);
|
Chris@133
|
57 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e1), 1.0);
|
Chris@133
|
58 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e1), 0.0);
|
Chris@133
|
59 BOOST_CHECK_EQUAL(dm.calcDistance(e1, e2), 1.0/3.0);
|
Chris@133
|
60 BOOST_CHECK_EQUAL(dm.calcDistance(e0, e2), 1.0);
|
Chris@131
|
61 }
|
Chris@131
|
62
|
Chris@131
|
63 BOOST_AUTO_TEST_SUITE_END()
|
Chris@131
|
64
|
Chris@131
|
65
|
Chris@131
|
66
|