Fix nan issue in features
[trackerpp.git] / test / TestUtils.cpp
1 #include "gtest/gtest.h"
2 #include "Utils.h"
3
4 using namespace std;
5 using namespace Eigen;
6 using namespace suanzi;
7 using namespace cv;
8
9 TEST(Distance, consine)
10 {
11     Vector3d u, v;
12     u << 1, 0, 0;
13     v << 0, 1, 0;
14     double d = distance_cosine(u, v);
15     EXPECT_DOUBLE_EQ(d, 1.0);
16
17     u << 100, 0, 0;
18     v << 0, 1, 0;
19     d = distance_cosine(u, v);
20     EXPECT_DOUBLE_EQ(d, 1.0);
21
22     u << 1, 1, 0;
23     v << 0, 1, 0;
24     d = distance_cosine(u, v);
25     EXPECT_TRUE(std::abs(d - 0.2928932) < 0.0001);
26 }
27
28 TEST(Distance, euclidean)
29 {
30     Vector3d u, v;
31     u << 1, 0, 0;
32     v << 0, 1, 0;
33     double d = distance_euclidean(u, v);
34     EXPECT_TRUE(std::abs(d - 1.41421356) < 0.0001);
35
36     u << 1, 1, 0;
37     v << 0, 1, 0;
38     d = distance_euclidean(u, v);
39     EXPECT_DOUBLE_EQ(d, 1.0);
40 }
41
42 TEST(MultiTracker, getRectInDetection)
43 {
44     Detection d;
45     d.center_x = 5;
46     d.center_y = 5;
47     d.height = 10;
48     d.width = 10;
49
50     Rect r = getRectInDetection(d);
51     EXPECT_EQ(r.x, 0);
52     EXPECT_EQ(r.y, 0);
53     EXPECT_EQ(r.width, 10);
54     EXPECT_EQ(r.height, 10);
55 }
56
57 TEST(MultiTracker, calc_iou_ratio1)
58 {
59     Rect r1 (0, 0, 10, 10);
60     Rect r2 (0, 0, 10, 10);
61     double iou = calc_iou_ratio(r1, r2);
62     cout << "iou = " << iou << endl;
63     double expect = 1.0;
64     EXPECT_GE (iou, 0); // > 0
65     EXPECT_TRUE(abs(iou - expect) < 0.001); // Expect is 1.0
66 }
67
68 TEST(MultiTracker, calc_iou_ratio2)
69 {
70     Rect r1 (0, 0, 10, 10);
71     Rect r2 (10, 10, 10, 10);
72     double iou = calc_iou_ratio(r1, r2);
73     cout << "iou = " << iou << endl;
74     double expect = 0;
75     EXPECT_EQ (iou, 0.0); // = 0
76     EXPECT_TRUE(abs(iou - expect) < 0.001); // Expect is = 0
77 }
78
79 TEST(MultiTracker, calc_iou_ratio3)
80 {
81     Rect r1 (0, 0, 10, 10);
82     Rect r2 (20, 20, 10, 10);
83     double iou = calc_iou_ratio(r1, r2);
84     cout << "iou = " << iou << endl;
85     double expect = -(1.0 / 9);
86     EXPECT_LT (iou, 0.0); // < 0
87     EXPECT_TRUE(abs(iou - expect) < 0.0001); // Expect is < -0.111
88 }