add utils.cpp and testcase
[trackerpp.git] / test / TestHungarian.cpp
1 #include "hungarian.h"
2 #include "gtest/gtest.h"
3 #include <cmath>
4 #include <vector>
5
6 using namespace std;
7 using namespace Eigen;
8
9 TEST(Hungarian, 3x3)
10 {
11     Matrix3i C;
12     C << 1, 2, 3,
13          2, 4, 6,
14          3, 6, 9;
15
16     VectorXi row_ind, col_ind;
17     int ret = linear_sum_assignment(C, row_ind, col_ind);
18     cout << "row: [" << row_ind.transpose() << "], col: [" << col_ind.transpose() << "]" << endl;
19     Vector3i expect_row_ind, expect_col_ind;
20
21     expect_row_ind << 0, 1, 2;
22     expect_col_ind << 2, 1, 0;
23
24     EXPECT_EQ(ret, 10);
25     EXPECT_TRUE(expect_row_ind == row_ind);
26     EXPECT_TRUE(expect_col_ind == col_ind);
27 }
28
29 TEST(Hungarian, 4x3)
30 {
31     MatrixXi C(4, 3);
32
33     C << 4, 1, 3,
34          2, 4, 2,
35          3, 6, 9,
36          2, 6, 3;
37
38     VectorXi row_ind, col_ind;
39     int ret = linear_sum_assignment(C, row_ind, col_ind);
40     Vector3i expect_row_ind, expect_col_ind;
41
42     expect_row_ind << 0, 1, 3;
43     expect_col_ind << 1, 2, 0;
44
45     EXPECT_EQ(ret, 5);
46     EXPECT_TRUE(expect_row_ind == row_ind);
47     EXPECT_TRUE(expect_col_ind == col_ind);
48 }
49
50 TEST(Hungarian, 0x0)
51 {
52     MatrixXi C = MatrixXi::Zero(0, 0);
53     VectorXi row_ind, col_ind;
54     int ret = linear_sum_assignment(C, row_ind, col_ind);
55     EXPECT_EQ(ret, 0);
56 }