00001 #include <gtest/gtest.h>
00002 #include <utils/geom/Line2D.h>
00003 #include <utils/geom/GeomHelper.h>
00004
00005 using namespace std;
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 TEST(Line2D, test_method_add_positive) {
00033 Line2D line(Position2D(0,0),Position2D(2,2));
00034 line.add(2,2);
00035 EXPECT_FLOAT_EQ(2,(line.p1()).x());
00036 EXPECT_FLOAT_EQ(2,(line.p1()).y());
00037 EXPECT_FLOAT_EQ(4,(line.p2()).x());
00038 EXPECT_FLOAT_EQ(4,(line.p2()).y());
00039 }
00040
00041
00042 TEST(Line2D, test_method_add_negative) {
00043 Line2D line(Position2D(0,0),Position2D(2,2));
00044 line.add(Position2D(-2,-2));
00045 EXPECT_FLOAT_EQ(-2,(line.p1()).x());
00046 EXPECT_FLOAT_EQ(-2,(line.p1()).y());
00047 EXPECT_FLOAT_EQ(0,(line.p2()).x());
00048 EXPECT_FLOAT_EQ(0,(line.p2()).y());
00049 }
00050
00051
00052 TEST(Line2D, test_method_sub_negative) {
00053 Line2D line(Position2D(0,0),Position2D(2,2));
00054 line.sub(-2,-2);
00055 EXPECT_FLOAT_EQ(2,(line.p1()).x());
00056 EXPECT_FLOAT_EQ(2,(line.p1()).y());
00057 EXPECT_FLOAT_EQ(4,(line.p2()).x());
00058 EXPECT_FLOAT_EQ(4,(line.p2()).y());
00059 }
00060
00061
00062 TEST(Line2D, test_method_sub_positive) {
00063 Line2D line(Position2D(0,0),Position2D(2,2));
00064 line.sub(2,2);
00065 EXPECT_FLOAT_EQ(-2,(line.p1()).x());
00066 EXPECT_FLOAT_EQ(-2,(line.p1()).y());
00067 EXPECT_FLOAT_EQ(0,(line.p2()).x());
00068 EXPECT_FLOAT_EQ(0,(line.p2()).y());
00069 }
00070
00071
00072 TEST(Line2D, test_method_reverse) {
00073 Line2D line(Position2D(0,0),Position2D(2,2));
00074 Line2D lineReverse = line.reverse();
00075 EXPECT_FLOAT_EQ(2,(lineReverse.p1()).x());
00076 EXPECT_FLOAT_EQ(2,(lineReverse.p1()).y());
00077 EXPECT_FLOAT_EQ(0,(lineReverse.p2()).x());
00078 EXPECT_FLOAT_EQ(0,(lineReverse.p2()).y());
00079 }
00080
00081
00082 TEST(Line2D, test_method_intersectsAtLength) {
00083 Line2D line(Position2D(0,0),Position2D(2,2));
00084 SUMOReal point = line.intersectsAtLength(Line2D(Position2D(0,2),Position2D(2,0)));
00085 EXPECT_FLOAT_EQ(sqrt(SUMOReal(2)), point);
00086 }
00087
00088
00089 TEST(Line2D, test_method_intersectsAtLength_zero) {
00090 Line2D line(Position2D(0,0),Position2D(2,2));
00091 SUMOReal point = line.intersectsAtLength(Line2D(Position2D(0,0),Position2D(2,0)));
00092 EXPECT_FLOAT_EQ(0, point);
00093 }
00094
00095
00096 TEST(Line2D, test_method_intersectsAtLength_no_intersect) {
00097 Line2D line(Position2D(0,0),Position2D(2,2));
00098 SUMOReal point = line.intersectsAtLength(Line2D(Position2D(0,3),Position2D(0,6)));
00099 EXPECT_FLOAT_EQ(-1, point);
00100 }
00101
00102
00103 TEST(Line2D, test_method_rotateAtP1) {
00104 Line2D line(Position2D(0,0),Position2D(2,2));
00105 line.rotateAtP1(PI/2);
00106 EXPECT_FLOAT_EQ(-2,(line.p2()).x());
00107 EXPECT_FLOAT_EQ(2,(line.p2()).y());
00108 }
00109
00110
00111 TEST(Line2D, test_method_rotateAtP1_negative) {
00112 Line2D line(Position2D(0,0),Position2D(2,2));
00113 line.rotateAtP1(-3*PI/4);
00114 EXPECT_FLOAT_EQ(1,SUMOReal((line.p2()).x())+1);
00115 EXPECT_FLOAT_EQ(-2*sqrt(SUMOReal(2)),(line.p2()).y());
00116 }
00117
00118
00119 TEST(Line2D, test_method_length) {
00120 Line2D line(Position2D(0,0),Position2D(0,2));
00121 EXPECT_FLOAT_EQ(2,line.length());
00122 Line2D line2(Position2D(0,0),Position2D(-1,0));
00123 EXPECT_FLOAT_EQ(1,line2.length());
00124 Line2D line3(Position2D(2,2),Position2D(2,2));
00125 EXPECT_FLOAT_EQ(0,line3.length());
00126 }
00127
00128
00129 TEST(Line2D, test_method_intersects) {
00130 Line2D line(Position2D(0,0),Position2D(2,2));
00131 EXPECT_TRUE(line.intersects(Line2D(Position2D(2,0),Position2D(0,2))));
00132 Line2D line2(Position2D(0,0),Position2D(2,2));
00133 EXPECT_FALSE(line.intersects(Line2D(Position2D(0,3),Position2D(0,6))));
00134 Line2D line3(Position2D(0,0),Position2D(2,2));
00135 EXPECT_TRUE(line.intersects(Line2D(Position2D(0,-1),Position2D(0,6))));
00136 }
00137
00138
00139 TEST(Line2D, test_method_intersectsAt) {
00140 Line2D line(Position2D(0,0),Position2D(2,2));
00141 Position2D pos = line.intersectsAt(Line2D(Position2D(2,0),Position2D(0,2)));
00142 EXPECT_FLOAT_EQ(1,pos.x());
00143 EXPECT_FLOAT_EQ(1,pos.y());
00144 }
00145
00146
00147 TEST(Line2D, test_method_move2side) {
00148 Line2D line(Position2D(0,0),Position2D(2,2));
00149 line.move2side(SUMOReal(3));
00150
00151
00152
00153
00154
00155
00156
00157 }