Fix issue boostpython not stopped by Ctrl+c
[trackerpp.git] / test / TestHungarian.cpp
1 #include "hungarian.h"
2 #include "gtest/gtest.h"
3 #include <cmath>
4
5 using namespace std;
6 using namespace Eigen;
7
8 TEST(Hungarian, 3x3)
9 {
10     Matrix3i C;
11     C << 1, 2, 3,
12          2, 4, 6,
13          3, 6, 9;
14
15     VectorXi row_ind, col_ind;
16     int ret = linear_sum_assignment(C, row_ind, col_ind);
17     cout << "row: [" << row_ind.transpose() << "], col: [" << col_ind.transpose() << "]" << endl;
18     Vector3i expect_row_ind, expect_col_ind;
19
20     expect_row_ind << 0, 1, 2;
21     expect_col_ind << 2, 1, 0;
22
23     EXPECT_EQ(ret, 10);
24     EXPECT_TRUE(expect_row_ind == row_ind);
25     EXPECT_TRUE(expect_col_ind == col_ind);
26 }
27
28 TEST(Hungarian, 4x3)
29 {
30     MatrixXi C(4, 3);
31
32     C << 4, 1, 3,
33          2, 4, 2,
34          3, 6, 9,
35          2, 6, 3;
36
37     VectorXi row_ind, col_ind;
38     int ret = linear_sum_assignment(C, row_ind, col_ind);
39     Vector3i expect_row_ind, expect_col_ind;
40
41     expect_row_ind << 0, 1, 3;
42     expect_col_ind << 1, 2, 0;
43
44     EXPECT_EQ(ret, 5);
45     EXPECT_TRUE(expect_row_ind == row_ind);
46     EXPECT_TRUE(expect_col_ind == col_ind);
47 }
48
49 TEST(Distance, consine)
50 {
51     Vector3d u, v;
52     u << 1, 0, 0;
53     v << 0, 1, 0;
54     double d = distance_cosine(u, v);
55     EXPECT_DOUBLE_EQ(d, 1.0);
56
57     u << 100, 0, 0;
58     v << 0, 1, 0;
59     d = distance_cosine(u, v);
60     EXPECT_DOUBLE_EQ(d, 1.0);
61
62     u << 1, 1, 0;
63     v << 0, 1, 0;
64     d = distance_cosine(u, v);
65     EXPECT_TRUE(std::abs(d - 0.2928932) < 0.0001);
66 }
67
68 TEST(Distance, euclidean)
69 {
70     Vector3d u, v;
71     u << 1, 0, 0;
72     v << 0, 1, 0;
73     double d = distance_euclidean(u, v);
74     EXPECT_TRUE(std::abs(d - 1.41421356) < 0.0001);
75
76     u << 1, 1, 0;
77     v << 0, 1, 0;
78     d = distance_euclidean(u, v);
79     EXPECT_DOUBLE_EQ(d, 1.0);
80 }