@@ -14,14 +14,14 @@ namespace testing {
14
14
TEST (RectTest, RectOriginSizeGetters) {
15
15
{
16
16
Rect r = Rect::MakeOriginSize ({10 , 20 }, {50 , 40 });
17
- ASSERT_EQ (r.GetOrigin (), Point (10 , 20 ));
18
- ASSERT_EQ (r.GetSize (), Size (50 , 40 ));
17
+ EXPECT_EQ (r.GetOrigin (), Point (10 , 20 ));
18
+ EXPECT_EQ (r.GetSize (), Size (50 , 40 ));
19
19
}
20
20
21
21
{
22
22
Rect r = Rect::MakeLTRB (10 , 20 , 50 , 40 );
23
- ASSERT_EQ (r.GetOrigin (), Point (10 , 20 ));
24
- ASSERT_EQ (r.GetSize (), Size (40 , 20 ));
23
+ EXPECT_EQ (r.GetOrigin (), Point (10 , 20 ));
24
+ EXPECT_EQ (r.GetSize (), Size (40 , 20 ));
25
25
}
26
26
}
27
27
@@ -44,14 +44,152 @@ TEST(RectTest, RectMakeSize) {
44
44
Size s (100 , 200 );
45
45
IRect r = IRect::MakeSize (s);
46
46
IRect expected = IRect::MakeLTRB (0 , 0 , 100 , 200 );
47
- ASSERT_EQ (r, expected);
47
+ EXPECT_EQ (r, expected);
48
48
}
49
49
50
50
{
51
51
ISize s (100 , 200 );
52
52
IRect r = IRect::MakeSize (s);
53
53
IRect expected = IRect::MakeLTRB (0 , 0 , 100 , 200 );
54
- ASSERT_EQ (r, expected);
54
+ EXPECT_EQ (r, expected);
55
+ }
56
+ }
57
+
58
+ TEST (RectTest, RectGetNormalizingTransform) {
59
+ {
60
+ // Checks for expected matrix values
61
+
62
+ auto r = Rect::MakeXYWH (100 , 200 , 200 , 400 );
63
+
64
+ EXPECT_EQ (r.GetNormalizingTransform (),
65
+ Matrix::MakeScale ({0.005 , 0.0025 , 1.0 }) *
66
+ Matrix::MakeTranslation ({-100 , -200 }));
67
+ }
68
+
69
+ {
70
+ // Checks for expected transformation of points relative to the rect
71
+
72
+ auto r = Rect::MakeLTRB (300 , 500 , 400 , 700 );
73
+ auto m = r.GetNormalizingTransform ();
74
+
75
+ // The 4 corners of the rect => (0, 0) to (1, 1)
76
+ EXPECT_EQ (m * Point (300 , 500 ), Point (0 , 0 ));
77
+ EXPECT_EQ (m * Point (400 , 500 ), Point (1 , 0 ));
78
+ EXPECT_EQ (m * Point (400 , 700 ), Point (1 , 1 ));
79
+ EXPECT_EQ (m * Point (300 , 700 ), Point (0 , 1 ));
80
+
81
+ // The center => (0.5, 0.5)
82
+ EXPECT_EQ (m * Point (350 , 600 ), Point (0.5 , 0.5 ));
83
+
84
+ // Outside the 4 corners => (-1, -1) to (2, 2)
85
+ EXPECT_EQ (m * Point (200 , 300 ), Point (-1 , -1 ));
86
+ EXPECT_EQ (m * Point (500 , 300 ), Point (2 , -1 ));
87
+ EXPECT_EQ (m * Point (500 , 900 ), Point (2 , 2 ));
88
+ EXPECT_EQ (m * Point (200 , 900 ), Point (-1 , 2 ));
89
+ }
90
+
91
+ {
92
+ // Checks for behavior with empty rects
93
+
94
+ auto zero = Matrix::MakeScale ({0.0 , 0.0 , 1.0 });
95
+
96
+ // Empty for width and/or height == 0
97
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , 0 , 10 ).GetNormalizingTransform (), zero);
98
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , 10 , 0 ).GetNormalizingTransform (), zero);
99
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , 0 , 0 ).GetNormalizingTransform (), zero);
100
+
101
+ // Empty for width and/or height < 0
102
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , -1 , 10 ).GetNormalizingTransform (), zero);
103
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , 10 , -1 ).GetNormalizingTransform (), zero);
104
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , -1 , -1 ).GetNormalizingTransform (), zero);
105
+ }
106
+
107
+ {
108
+ // Checks for behavior with non-finite rects
109
+
110
+ auto z = Matrix::MakeScale ({0.0 , 0.0 , 1.0 });
111
+ auto nan = std::numeric_limits<Scalar>::quiet_NaN ();
112
+ auto inf = std::numeric_limits<Scalar>::infinity ();
113
+
114
+ // Non-finite for width and/or height == nan
115
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , nan , 10 ).GetNormalizingTransform (), z);
116
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , 10 , nan ).GetNormalizingTransform (), z);
117
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , nan , nan ).GetNormalizingTransform (), z);
118
+
119
+ // Non-finite for width and/or height == inf
120
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , inf, 10 ).GetNormalizingTransform (), z);
121
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , 10 , inf).GetNormalizingTransform (), z);
122
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , inf, inf).GetNormalizingTransform (), z);
123
+
124
+ // Non-finite for width and/or height == -inf
125
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , -inf, 10 ).GetNormalizingTransform (), z);
126
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , 10 , -inf).GetNormalizingTransform (), z);
127
+ EXPECT_EQ (Rect::MakeXYWH (10 , 10 , -inf, -inf).GetNormalizingTransform (), z);
128
+
129
+ // Non-finite for origin X and/or Y == nan
130
+ EXPECT_EQ (Rect::MakeXYWH (nan , 10 , 10 , 10 ).GetNormalizingTransform (), z);
131
+ EXPECT_EQ (Rect::MakeXYWH (10 , nan , 10 , 10 ).GetNormalizingTransform (), z);
132
+ EXPECT_EQ (Rect::MakeXYWH (nan , nan , 10 , 10 ).GetNormalizingTransform (), z);
133
+
134
+ // Non-finite for origin X and/or Y == inf
135
+ EXPECT_EQ (Rect::MakeXYWH (inf, 10 , 10 , 10 ).GetNormalizingTransform (), z);
136
+ EXPECT_EQ (Rect::MakeXYWH (10 , inf, 10 , 10 ).GetNormalizingTransform (), z);
137
+ EXPECT_EQ (Rect::MakeXYWH (inf, inf, 10 , 10 ).GetNormalizingTransform (), z);
138
+
139
+ // Non-finite for origin X and/or Y == -inf
140
+ EXPECT_EQ (Rect::MakeXYWH (-inf, 10 , 10 , 10 ).GetNormalizingTransform (), z);
141
+ EXPECT_EQ (Rect::MakeXYWH (10 , -inf, 10 , 10 ).GetNormalizingTransform (), z);
142
+ EXPECT_EQ (Rect::MakeXYWH (-inf, -inf, 10 , 10 ).GetNormalizingTransform (), z);
143
+ }
144
+ }
145
+
146
+ TEST (RectTest, IRectGetNormalizingTransform) {
147
+ {
148
+ // Checks for expected matrix values
149
+
150
+ auto r = IRect::MakeXYWH (100 , 200 , 200 , 400 );
151
+
152
+ EXPECT_EQ (r.GetNormalizingTransform (),
153
+ Matrix::MakeScale ({0.005 , 0.0025 , 1.0 }) *
154
+ Matrix::MakeTranslation ({-100 , -200 }));
155
+ }
156
+
157
+ {
158
+ // Checks for expected transformation of points relative to the rect
159
+
160
+ auto r = IRect::MakeLTRB (300 , 500 , 400 , 700 );
161
+ auto m = r.GetNormalizingTransform ();
162
+
163
+ // The 4 corners of the rect => (0, 0) to (1, 1)
164
+ EXPECT_EQ (m * Point (300 , 500 ), Point (0 , 0 ));
165
+ EXPECT_EQ (m * Point (400 , 500 ), Point (1 , 0 ));
166
+ EXPECT_EQ (m * Point (400 , 700 ), Point (1 , 1 ));
167
+ EXPECT_EQ (m * Point (300 , 700 ), Point (0 , 1 ));
168
+
169
+ // The center => (0.5, 0.5)
170
+ EXPECT_EQ (m * Point (350 , 600 ), Point (0.5 , 0.5 ));
171
+
172
+ // Outside the 4 corners => (-1, -1) to (2, 2)
173
+ EXPECT_EQ (m * Point (200 , 300 ), Point (-1 , -1 ));
174
+ EXPECT_EQ (m * Point (500 , 300 ), Point (2 , -1 ));
175
+ EXPECT_EQ (m * Point (500 , 900 ), Point (2 , 2 ));
176
+ EXPECT_EQ (m * Point (200 , 900 ), Point (-1 , 2 ));
177
+ }
178
+
179
+ {
180
+ // Checks for behavior with empty rects
181
+
182
+ auto zero = Matrix::MakeScale ({0.0 , 0.0 , 1.0 });
183
+
184
+ // Empty for width and/or height == 0
185
+ EXPECT_EQ (IRect::MakeXYWH (10 , 10 , 0 , 10 ).GetNormalizingTransform (), zero);
186
+ EXPECT_EQ (IRect::MakeXYWH (10 , 10 , 10 , 0 ).GetNormalizingTransform (), zero);
187
+ EXPECT_EQ (IRect::MakeXYWH (10 , 10 , 0 , 0 ).GetNormalizingTransform (), zero);
188
+
189
+ // Empty for width and/or height < 0
190
+ EXPECT_EQ (IRect::MakeXYWH (10 , 10 , -1 , 10 ).GetNormalizingTransform (), zero);
191
+ EXPECT_EQ (IRect::MakeXYWH (10 , 10 , 10 , -1 ).GetNormalizingTransform (), zero);
192
+ EXPECT_EQ (IRect::MakeXYWH (10 , 10 , -1 , -1 ).GetNormalizingTransform (), zero);
55
193
}
56
194
}
57
195
0 commit comments