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