+#include "gtest/gtest.h"
+#include "Utils.h"
+
+using namespace std;
+using namespace Eigen;
+using namespace suanzi;
+using namespace cv;
+
+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(MultiTracker, getRectInDetection)
+{
+ Detection d;
+ d.center_x = 5;
+ d.center_y = 5;
+ d.height = 10;
+ d.width = 10;
+
+ Rect r = getRectInDetection(d);
+ EXPECT_EQ(r.x, 0);
+ EXPECT_EQ(r.y, 0);
+ EXPECT_EQ(r.width, 10);
+ EXPECT_EQ(r.height, 10);
+}
+
+TEST(MultiTracker, calc_iou_ratio1)
+{
+ Rect r1 (0, 0, 10, 10);
+ Rect r2 (0, 0, 10, 10);
+ double iou = calc_iou_ratio(r1, r2);
+ cout << "iou = " << iou << endl;
+ double expect = 1.0;
+ EXPECT_GE (iou, 0); // > 0
+ EXPECT_TRUE(abs(iou - expect) < 0.001); // Expect is 1.0
+}
+
+TEST(MultiTracker, calc_iou_ratio2)
+{
+ Rect r1 (0, 0, 10, 10);
+ Rect r2 (10, 10, 10, 10);
+ double iou = calc_iou_ratio(r1, r2);
+ cout << "iou = " << iou << endl;
+ double expect = 0;
+ EXPECT_EQ (iou, 0.0); // = 0
+ EXPECT_TRUE(abs(iou - expect) < 0.001); // Expect is = 0
+}
+
+TEST(MultiTracker, calc_iou_ratio3)
+{
+ Rect r1 (0, 0, 10, 10);
+ Rect r2 (20, 20, 10, 10);
+ double iou = calc_iou_ratio(r1, r2);
+ cout << "iou = " << iou << endl;
+ double expect = -(1.0 / 9);
+ EXPECT_LT (iou, 0.0); // < 0
+ EXPECT_TRUE(abs(iou - expect) < 0.0001); // Expect is < -0.111
+}