@@ -14,14 +14,14 @@ namespace testing {
1414TEST (RectTest, RectOriginSizeGetters) {
1515 {
1616 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 ));
1919 }
2020
2121 {
2222 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 ));
2525 }
2626}
2727
@@ -44,14 +44,152 @@ TEST(RectTest, RectMakeSize) {
4444 Size s (100 , 200 );
4545 IRect r = IRect::MakeSize (s);
4646 IRect expected = IRect::MakeLTRB (0 , 0 , 100 , 200 );
47- ASSERT_EQ (r, expected);
47+ EXPECT_EQ (r, expected);
4848 }
4949
5050 {
5151 ISize s (100 , 200 );
5252 IRect r = IRect::MakeSize (s);
5353 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);
55193 }
56194}
57195
0 commit comments