X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=test%2FTestHungarian.cpp;h=55620a9994b01f93b5c4f9dfb763932e38984ae6;hb=209cfd9fe0ea398b794d1d1995629a826125f035;hp=3cb29b240a68c680f6969e7d1092d82cfff8a9c7;hpb=3811d034ba9e1f44a2e9915289438db3807217fe;p=trackerpp.git diff --git a/test/TestHungarian.cpp b/test/TestHungarian.cpp index 3cb29b2..55620a9 100644 --- a/test/TestHungarian.cpp +++ b/test/TestHungarian.cpp @@ -1,24 +1,118 @@ #include "hungarian.h" #include "gtest/gtest.h" +#include +#include using namespace std; using namespace Eigen; -TEST(Hungarian, Verify) +TEST(Hungarian, 3x3) { Matrix3i C; C << 1, 2, 3, - 2, 4, 2, + 2, 4, 6, 3, 6, 9; VectorXi row_ind, col_ind; int ret = linear_sum_assignment(C, row_ind, col_ind); + cout << "row: [" << row_ind.transpose() << "], col: [" << col_ind.transpose() << "]" << endl; Vector3i expect_row_ind, expect_col_ind; expect_row_ind << 0, 1, 2; + expect_col_ind << 2, 1, 0; + + EXPECT_EQ(ret, 10); + EXPECT_TRUE(expect_row_ind == row_ind); + EXPECT_TRUE(expect_col_ind == col_ind); +} + +TEST(Hungarian, 4x3) +{ + MatrixXi C(4, 3); + + C << 4, 1, 3, + 2, 4, 2, + 3, 6, 9, + 2, 6, 3; + + VectorXi row_ind, col_ind; + int ret = linear_sum_assignment(C, row_ind, col_ind); + Vector3i expect_row_ind, expect_col_ind; + + expect_row_ind << 0, 1, 3; expect_col_ind << 1, 2, 0; - EXPECT_EQ(ret, 7); + EXPECT_EQ(ret, 5); EXPECT_TRUE(expect_row_ind == row_ind); EXPECT_TRUE(expect_col_ind == col_ind); } + +TEST(Hungarian, 0x0) +{ + MatrixXi C = MatrixXi::Zero(0, 0); + VectorXi row_ind, col_ind; + int ret = linear_sum_assignment(C, row_ind, col_ind); + EXPECT_EQ(ret, 0); +} + + +TEST(Distance, consine) +{ + Vector3d u, v; + u << 1, 0, 0; + v << 0, 1, 0; + double d = distance_cosine(u, v); + EXPECT_DOUBLE_EQ(d, 1.0); + + u << 100, 0, 0; + v << 0, 1, 0; + d = distance_cosine(u, v); + EXPECT_DOUBLE_EQ(d, 1.0); + + u << 1, 1, 0; + v << 0, 1, 0; + d = distance_cosine(u, v); + EXPECT_TRUE(std::abs(d - 0.2928932) < 0.0001); +} + +TEST(Distance, euclidean) +{ + Vector3d u, v; + u << 1, 0, 0; + v << 0, 1, 0; + double d = distance_euclidean(u, v); + EXPECT_TRUE(std::abs(d - 1.41421356) < 0.0001); + + u << 1, 1, 0; + v << 0, 1, 0; + d = distance_euclidean(u, v); + EXPECT_DOUBLE_EQ(d, 1.0); +} + +TEST(Distance, vector) +{ + std::vector sv = {1, 2, 3, 4, 5, 6}; + VectorXi v1; + VectorXi b = Eigen::Map(sv.data(), sv.size()); + std::cout << b << std::endl; + std::vector f1_hog = { 0.1, 0.2, 0,3}; +// Eigen::Map(f2_hog.data(), f2_hog.size()) + + //VectorXd mf = Map >(sv.data(), sv.size()); + std::vector sd = {1, 2, 3, 4, 5, 6}; + VectorXd mm = Map(sd.data(), sd.size()); + VectorXd xd = Map >(sd.data(), sd.size()); + cout << Map >(sd.data(), sd.size()) << endl; + + int array[12]; + for(int i = 0; i < 12; ++i) array[i] = i; + cout << Map >(sv.data(), sv.size()) // the inner stride has already been passed as template parameter + << endl; + + + //Vector3d v = Vector3d::Random(); + //std::cout << v << std::endl; + +} + +