upgrade opencv to 3.3.1, complete patch similarity
[trackerpp.git] / test / TestHungarian.cpp
index 3cb29b2..55620a9 100644 (file)
 #include "hungarian.h"
 #include "gtest/gtest.h"
+#include <cmath>
+#include <vector>
 
 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<int> sv = {1, 2, 3, 4, 5, 6};
+    VectorXi v1;
+    VectorXi b = Eigen::Map<VectorXi>(sv.data(), sv.size());
+    std::cout << b << std::endl;
+    std::vector<float> f1_hog = { 0.1, 0.2, 0,3};
+//                                    Eigen::Map<Eigen::VectorXd>(f2_hog.data(), f2_hog.size())
+
+    //VectorXd mf = Map<VectorXd, 0, InnerStride<2> >(sv.data(), sv.size());
+    std::vector<double> sd = {1, 2, 3, 4, 5, 6};
+    VectorXd mm = Map<VectorXd>(sd.data(), sd.size());
+    VectorXd xd = Map<VectorXd, 0, InnerStride<2> >(sd.data(), sd.size());
+    cout << Map<VectorXd, 0, InnerStride<2> >(sd.data(), sd.size()) << endl;
+
+    int array[12];
+    for(int i = 0; i < 12; ++i) array[i] = i;
+    cout << Map<VectorXi, 0, InnerStride<2> >(sv.data(), sv.size()) // the inner stride has already been passed as template parameter
+                      << endl;
+
+
+    //Vector3d v = Vector3d::Random();
+    //std::cout << v << std::endl;
+
+}
+
+