1 | /** |
2 | * Original code: automated SDL rect test written by Edgar Simo "bobbens" |
3 | * New/updated tests: aschiffler at ferzkopp dot net |
4 | */ |
5 | |
6 | #include <stdio.h> |
7 | |
8 | #include "SDL.h" |
9 | #include "SDL_test.h" |
10 | |
11 | /* ================= Test Case Implementation ================== */ |
12 | |
13 | /* Helper functions */ |
14 | |
15 | /* ! |
16 | * \brief Private helper to check SDL_IntersectRectAndLine results |
17 | */ |
18 | void _validateIntersectRectAndLineResults( |
19 | SDL_bool intersection, SDL_bool expectedIntersection, |
20 | SDL_Rect *rect, SDL_Rect * refRect, |
21 | int x1, int y1, int x2, int y2, |
22 | int x1Ref, int y1Ref, int x2Ref, int y2Ref) |
23 | { |
24 | SDLTest_AssertCheck(intersection == expectedIntersection, |
25 | "Check for correct intersection result: expected %s, got %s intersecting rect (%d,%d,%d,%d) with line (%d,%d - %d,%d)" , |
26 | (expectedIntersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
27 | (intersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
28 | refRect->x, refRect->y, refRect->w, refRect->h, |
29 | x1Ref, y1Ref, x2Ref, y2Ref); |
30 | SDLTest_AssertCheck(rect->x == refRect->x && rect->y == refRect->y && rect->w == refRect->w && rect->h == refRect->h, |
31 | "Check that source rectangle was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
32 | rect->x, rect->y, rect->w, rect->h, |
33 | refRect->x, refRect->y, refRect->w, refRect->h); |
34 | SDLTest_AssertCheck(x1 == x1Ref && y1 == y1Ref && x2 == x2Ref && y2 == y2Ref, |
35 | "Check if line was incorrectly clipped or modified: got (%d,%d - %d,%d) expected (%d,%d - %d,%d)" , |
36 | x1, y1, x2, y2, |
37 | x1Ref, y1Ref, x2Ref, y2Ref); |
38 | } |
39 | |
40 | /* Test case functions */ |
41 | |
42 | /* ! |
43 | * \brief Tests SDL_IntersectRectAndLine() clipping cases |
44 | * |
45 | * \sa |
46 | * http://wiki.libsdl.org/SDL_IntersectRectAndLine |
47 | */ |
48 | int |
49 | rect_testIntersectRectAndLine (void *arg) |
50 | { |
51 | SDL_Rect refRect = { 0, 0, 32, 32 }; |
52 | SDL_Rect rect; |
53 | int x1, y1; |
54 | int x2, y2; |
55 | SDL_bool intersected; |
56 | |
57 | int xLeft = -SDLTest_RandomIntegerInRange(1, refRect.w); |
58 | int xRight = refRect.w + SDLTest_RandomIntegerInRange(1, refRect.w); |
59 | int yTop = -SDLTest_RandomIntegerInRange(1, refRect.h); |
60 | int yBottom = refRect.h + SDLTest_RandomIntegerInRange(1, refRect.h); |
61 | |
62 | x1 = xLeft; |
63 | y1 = 15; |
64 | x2 = xRight; |
65 | y2 = 15; |
66 | rect = refRect; |
67 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
68 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 15, 31, 15); |
69 | |
70 | x1 = 15; |
71 | y1 = yTop; |
72 | x2 = 15; |
73 | y2 = yBottom; |
74 | rect = refRect; |
75 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
76 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 15, 0, 15, 31); |
77 | |
78 | x1 = -refRect.w; |
79 | y1 = -refRect.h; |
80 | x2 = 2*refRect.w; |
81 | y2 = 2*refRect.h; |
82 | rect = refRect; |
83 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
84 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 0, 31, 31); |
85 | |
86 | x1 = 2*refRect.w; |
87 | y1 = 2*refRect.h; |
88 | x2 = -refRect.w; |
89 | y2 = -refRect.h; |
90 | rect = refRect; |
91 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
92 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 31, 31, 0, 0); |
93 | |
94 | x1 = -1; |
95 | y1 = 32; |
96 | x2 = 32; |
97 | y2 = -1; |
98 | rect = refRect; |
99 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
100 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 0, 31, 31, 0); |
101 | |
102 | x1 = 32; |
103 | y1 = -1; |
104 | x2 = -1; |
105 | y2 = 32; |
106 | rect = refRect; |
107 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
108 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, 31, 0, 0, 31); |
109 | |
110 | return TEST_COMPLETED; |
111 | } |
112 | |
113 | /* ! |
114 | * \brief Tests SDL_IntersectRectAndLine() non-clipping case line inside |
115 | * |
116 | * \sa |
117 | * http://wiki.libsdl.org/SDL_IntersectRectAndLine |
118 | */ |
119 | int |
120 | rect_testIntersectRectAndLineInside (void *arg) |
121 | { |
122 | SDL_Rect refRect = { 0, 0, 32, 32 }; |
123 | SDL_Rect rect; |
124 | int x1, y1; |
125 | int x2, y2; |
126 | SDL_bool intersected; |
127 | |
128 | int xmin = refRect.x; |
129 | int xmax = refRect.x + refRect.w - 1; |
130 | int ymin = refRect.y; |
131 | int ymax = refRect.y + refRect.h - 1; |
132 | int x1Ref = SDLTest_RandomIntegerInRange(xmin + 1, xmax - 1); |
133 | int y1Ref = SDLTest_RandomIntegerInRange(ymin + 1, ymax - 1); |
134 | int x2Ref = SDLTest_RandomIntegerInRange(xmin + 1, xmax - 1); |
135 | int y2Ref = SDLTest_RandomIntegerInRange(ymin + 1, ymax - 1); |
136 | |
137 | x1 = x1Ref; |
138 | y1 = y1Ref; |
139 | x2 = x2Ref; |
140 | y2 = y2Ref; |
141 | rect = refRect; |
142 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
143 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, x2Ref, y2Ref); |
144 | |
145 | x1 = x1Ref; |
146 | y1 = y1Ref; |
147 | x2 = xmax; |
148 | y2 = ymax; |
149 | rect = refRect; |
150 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
151 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, xmax, ymax); |
152 | |
153 | x1 = xmin; |
154 | y1 = ymin; |
155 | x2 = x2Ref; |
156 | y2 = y2Ref; |
157 | rect = refRect; |
158 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
159 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymin, x2Ref, y2Ref); |
160 | |
161 | x1 = xmin; |
162 | y1 = ymin; |
163 | x2 = xmax; |
164 | y2 = ymax; |
165 | rect = refRect; |
166 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
167 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymin, xmax, ymax); |
168 | |
169 | x1 = xmin; |
170 | y1 = ymax; |
171 | x2 = xmax; |
172 | y2 = ymin; |
173 | rect = refRect; |
174 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
175 | _validateIntersectRectAndLineResults(intersected, SDL_TRUE, &rect, &refRect, x1, y1, x2, y2, xmin, ymax, xmax, ymin); |
176 | |
177 | return TEST_COMPLETED; |
178 | } |
179 | |
180 | /* ! |
181 | * \brief Tests SDL_IntersectRectAndLine() non-clipping cases outside |
182 | * |
183 | * \sa |
184 | * http://wiki.libsdl.org/SDL_IntersectRectAndLine |
185 | */ |
186 | int |
187 | rect_testIntersectRectAndLineOutside (void *arg) |
188 | { |
189 | SDL_Rect refRect = { 0, 0, 32, 32 }; |
190 | SDL_Rect rect; |
191 | int x1, y1; |
192 | int x2, y2; |
193 | SDL_bool intersected; |
194 | |
195 | int xLeft = -SDLTest_RandomIntegerInRange(1, refRect.w); |
196 | int xRight = refRect.w + SDLTest_RandomIntegerInRange(1, refRect.w); |
197 | int yTop = -SDLTest_RandomIntegerInRange(1, refRect.h); |
198 | int yBottom = refRect.h + SDLTest_RandomIntegerInRange(1, refRect.h); |
199 | |
200 | x1 = xLeft; |
201 | y1 = 0; |
202 | x2 = xLeft; |
203 | y2 = 31; |
204 | rect = refRect; |
205 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
206 | _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, xLeft, 0, xLeft, 31); |
207 | |
208 | x1 = xRight; |
209 | y1 = 0; |
210 | x2 = xRight; |
211 | y2 = 31; |
212 | rect = refRect; |
213 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
214 | _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, xRight, 0, xRight, 31); |
215 | |
216 | x1 = 0; |
217 | y1 = yTop; |
218 | x2 = 31; |
219 | y2 = yTop; |
220 | rect = refRect; |
221 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
222 | _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, 0, yTop, 31, yTop); |
223 | |
224 | x1 = 0; |
225 | y1 = yBottom; |
226 | x2 = 31; |
227 | y2 = yBottom; |
228 | rect = refRect; |
229 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
230 | _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, 0, yBottom, 31, yBottom); |
231 | |
232 | return TEST_COMPLETED; |
233 | } |
234 | |
235 | /* ! |
236 | * \brief Tests SDL_IntersectRectAndLine() with empty rectangle |
237 | * |
238 | * \sa |
239 | * http://wiki.libsdl.org/SDL_IntersectRectAndLine |
240 | */ |
241 | int |
242 | rect_testIntersectRectAndLineEmpty (void *arg) |
243 | { |
244 | SDL_Rect refRect; |
245 | SDL_Rect rect; |
246 | int x1, y1, x1Ref, y1Ref; |
247 | int x2, y2, x2Ref, y2Ref; |
248 | SDL_bool intersected; |
249 | |
250 | refRect.x = SDLTest_RandomIntegerInRange(1, 1024); |
251 | refRect.y = SDLTest_RandomIntegerInRange(1, 1024); |
252 | refRect.w = 0; |
253 | refRect.h = 0; |
254 | x1Ref = refRect.x; |
255 | y1Ref = refRect.y; |
256 | x2Ref = SDLTest_RandomIntegerInRange(1, 1024); |
257 | y2Ref = SDLTest_RandomIntegerInRange(1, 1024); |
258 | |
259 | x1 = x1Ref; |
260 | y1 = y1Ref; |
261 | x2 = x2Ref; |
262 | y2 = y2Ref; |
263 | rect = refRect; |
264 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
265 | _validateIntersectRectAndLineResults(intersected, SDL_FALSE, &rect, &refRect, x1, y1, x2, y2, x1Ref, y1Ref, x2Ref, y2Ref); |
266 | |
267 | return TEST_COMPLETED; |
268 | } |
269 | |
270 | /* ! |
271 | * \brief Negative tests against SDL_IntersectRectAndLine() with invalid parameters |
272 | * |
273 | * \sa |
274 | * http://wiki.libsdl.org/SDL_IntersectRectAndLine |
275 | */ |
276 | int |
277 | rect_testIntersectRectAndLineParam (void *arg) |
278 | { |
279 | SDL_Rect rect = { 0, 0, 32, 32 }; |
280 | int x1 = rect.w / 2; |
281 | int y1 = rect.h / 2; |
282 | int x2 = x1; |
283 | int y2 = 2 * rect.h; |
284 | SDL_bool intersected; |
285 | |
286 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2); |
287 | SDLTest_AssertCheck(intersected == SDL_TRUE, "Check that intersection result was SDL_TRUE" ); |
288 | |
289 | intersected = SDL_IntersectRectAndLine((SDL_Rect *)NULL, &x1, &y1, &x2, &y2); |
290 | SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL" ); |
291 | intersected = SDL_IntersectRectAndLine(&rect, (int *)NULL, &y1, &x2, &y2); |
292 | SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL" ); |
293 | intersected = SDL_IntersectRectAndLine(&rect, &x1, (int *)NULL, &x2, &y2); |
294 | SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 3rd parameter is NULL" ); |
295 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, (int *)NULL, &y2); |
296 | SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 4th parameter is NULL" ); |
297 | intersected = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, (int *)NULL); |
298 | SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when 5th parameter is NULL" ); |
299 | intersected = SDL_IntersectRectAndLine((SDL_Rect *)NULL, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL); |
300 | SDLTest_AssertCheck(intersected == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL" ); |
301 | |
302 | return TEST_COMPLETED; |
303 | } |
304 | |
305 | /* ! |
306 | * \brief Private helper to check SDL_HasIntersection results |
307 | */ |
308 | void _validateHasIntersectionResults( |
309 | SDL_bool intersection, SDL_bool expectedIntersection, |
310 | SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB) |
311 | { |
312 | SDLTest_AssertCheck(intersection == expectedIntersection, |
313 | "Check intersection result: expected %s, got %s intersecting A (%d,%d,%d,%d) with B (%d,%d,%d,%d)" , |
314 | (expectedIntersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
315 | (intersection == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
316 | rectA->x, rectA->y, rectA->w, rectA->h, |
317 | rectB->x, rectB->y, rectB->w, rectB->h); |
318 | SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, |
319 | "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
320 | rectA->x, rectA->y, rectA->w, rectA->h, |
321 | refRectA->x, refRectA->y, refRectA->w, refRectA->h); |
322 | SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, |
323 | "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
324 | rectB->x, rectB->y, rectB->w, rectB->h, |
325 | refRectB->x, refRectB->y, refRectB->w, refRectB->h); |
326 | } |
327 | |
328 | /* ! |
329 | * \brief Private helper to check SDL_IntersectRect results |
330 | */ |
331 | void _validateIntersectRectResults( |
332 | SDL_bool intersection, SDL_bool expectedIntersection, |
333 | SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB, |
334 | SDL_Rect *result, SDL_Rect *expectedResult) |
335 | { |
336 | _validateHasIntersectionResults(intersection, expectedIntersection, rectA, rectB, refRectA, refRectB); |
337 | if (result && expectedResult) { |
338 | SDLTest_AssertCheck(result->x == expectedResult->x && result->y == expectedResult->y && result->w == expectedResult->w && result->h == expectedResult->h, |
339 | "Check that intersection of rectangles A (%d,%d,%d,%d) and B (%d,%d,%d,%d) was correctly calculated, got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
340 | rectA->x, rectA->y, rectA->w, rectA->h, |
341 | rectB->x, rectB->y, rectB->w, rectB->h, |
342 | result->x, result->y, result->w, result->h, |
343 | expectedResult->x, expectedResult->y, expectedResult->w, expectedResult->h); |
344 | } |
345 | } |
346 | |
347 | /* ! |
348 | * \brief Private helper to check SDL_UnionRect results |
349 | */ |
350 | void _validateUnionRectResults( |
351 | SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB, |
352 | SDL_Rect *result, SDL_Rect *expectedResult) |
353 | { |
354 | SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, |
355 | "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
356 | rectA->x, rectA->y, rectA->w, rectA->h, |
357 | refRectA->x, refRectA->y, refRectA->w, refRectA->h); |
358 | SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, |
359 | "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
360 | rectB->x, rectB->y, rectB->w, rectB->h, |
361 | refRectB->x, refRectB->y, refRectB->w, refRectB->h); |
362 | SDLTest_AssertCheck(result->x == expectedResult->x && result->y == expectedResult->y && result->w == expectedResult->w && result->h == expectedResult->h, |
363 | "Check that union of rectangles A (%d,%d,%d,%d) and B (%d,%d,%d,%d) was correctly calculated, got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
364 | rectA->x, rectA->y, rectA->w, rectA->h, |
365 | rectB->x, rectB->y, rectB->w, rectB->h, |
366 | result->x, result->y, result->w, result->h, |
367 | expectedResult->x, expectedResult->y, expectedResult->w, expectedResult->h); |
368 | } |
369 | |
370 | /* ! |
371 | * \brief Private helper to check SDL_RectEmpty results |
372 | */ |
373 | void _validateRectEmptyResults( |
374 | SDL_bool empty, SDL_bool expectedEmpty, |
375 | SDL_Rect *rect, SDL_Rect *refRect) |
376 | { |
377 | SDLTest_AssertCheck(empty == expectedEmpty, |
378 | "Check for correct empty result: expected %s, got %s testing (%d,%d,%d,%d)" , |
379 | (expectedEmpty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
380 | (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
381 | rect->x, rect->y, rect->w, rect->h); |
382 | SDLTest_AssertCheck(rect->x == refRect->x && rect->y == refRect->y && rect->w == refRect->w && rect->h == refRect->h, |
383 | "Check that source rectangle was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
384 | rect->x, rect->y, rect->w, rect->h, |
385 | refRect->x, refRect->y, refRect->w, refRect->h); |
386 | } |
387 | |
388 | /* ! |
389 | * \brief Private helper to check SDL_RectEquals results |
390 | */ |
391 | void _validateRectEqualsResults( |
392 | SDL_bool equals, SDL_bool expectedEquals, |
393 | SDL_Rect *rectA, SDL_Rect *rectB, SDL_Rect *refRectA, SDL_Rect *refRectB) |
394 | { |
395 | SDLTest_AssertCheck(equals == expectedEquals, |
396 | "Check for correct equals result: expected %s, got %s testing (%d,%d,%d,%d) and (%d,%d,%d,%d)" , |
397 | (expectedEquals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
398 | (equals == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
399 | rectA->x, rectA->y, rectA->w, rectA->h, |
400 | rectB->x, rectB->y, rectB->w, rectB->h); |
401 | SDLTest_AssertCheck(rectA->x == refRectA->x && rectA->y == refRectA->y && rectA->w == refRectA->w && rectA->h == refRectA->h, |
402 | "Check that source rectangle A was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
403 | rectA->x, rectA->y, rectA->w, rectA->h, |
404 | refRectA->x, refRectA->y, refRectA->w, refRectA->h); |
405 | SDLTest_AssertCheck(rectB->x == refRectB->x && rectB->y == refRectB->y && rectB->w == refRectB->w && rectB->h == refRectB->h, |
406 | "Check that source rectangle B was not modified: got (%d,%d,%d,%d) expected (%d,%d,%d,%d)" , |
407 | rectB->x, rectB->y, rectB->w, rectB->h, |
408 | refRectB->x, refRectB->y, refRectB->w, refRectB->h); |
409 | } |
410 | |
411 | /* ! |
412 | * \brief Tests SDL_IntersectRect() with B fully inside A |
413 | * |
414 | * \sa |
415 | * http://wiki.libsdl.org/SDL_IntersectRect |
416 | */ |
417 | int rect_testIntersectRectInside (void *arg) |
418 | { |
419 | SDL_Rect refRectA = { 0, 0, 32, 32 }; |
420 | SDL_Rect refRectB; |
421 | SDL_Rect rectA; |
422 | SDL_Rect rectB; |
423 | SDL_Rect result; |
424 | SDL_bool intersection; |
425 | |
426 | /* rectB fully contained in rectA */ |
427 | refRectB.x = 0; |
428 | refRectB.y = 0; |
429 | refRectB.w = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); |
430 | refRectB.h = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); |
431 | rectA = refRectA; |
432 | rectB = refRectB; |
433 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
434 | _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &refRectB); |
435 | |
436 | return TEST_COMPLETED; |
437 | } |
438 | |
439 | /* ! |
440 | * \brief Tests SDL_IntersectRect() with B fully outside A |
441 | * |
442 | * \sa |
443 | * http://wiki.libsdl.org/SDL_IntersectRect |
444 | */ |
445 | int rect_testIntersectRectOutside (void *arg) |
446 | { |
447 | SDL_Rect refRectA = { 0, 0, 32, 32 }; |
448 | SDL_Rect refRectB; |
449 | SDL_Rect rectA; |
450 | SDL_Rect rectB; |
451 | SDL_Rect result; |
452 | SDL_bool intersection; |
453 | |
454 | /* rectB fully outside of rectA */ |
455 | refRectB.x = refRectA.x + refRectA.w + SDLTest_RandomIntegerInRange(1, 10); |
456 | refRectB.y = refRectA.y + refRectA.h + SDLTest_RandomIntegerInRange(1, 10); |
457 | refRectB.w = refRectA.w; |
458 | refRectB.h = refRectA.h; |
459 | rectA = refRectA; |
460 | rectB = refRectB; |
461 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
462 | _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); |
463 | |
464 | return TEST_COMPLETED; |
465 | } |
466 | |
467 | /* ! |
468 | * \brief Tests SDL_IntersectRect() with B partially intersecting A |
469 | * |
470 | * \sa |
471 | * http://wiki.libsdl.org/SDL_IntersectRect |
472 | */ |
473 | int rect_testIntersectRectPartial (void *arg) |
474 | { |
475 | SDL_Rect refRectA = { 0, 0, 32, 32 }; |
476 | SDL_Rect refRectB; |
477 | SDL_Rect rectA; |
478 | SDL_Rect rectB; |
479 | SDL_Rect result; |
480 | SDL_Rect expectedResult; |
481 | SDL_bool intersection; |
482 | |
483 | /* rectB partially contained in rectA */ |
484 | refRectB.x = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); |
485 | refRectB.y = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); |
486 | refRectB.w = refRectA.w; |
487 | refRectB.h = refRectA.h; |
488 | rectA = refRectA; |
489 | rectB = refRectB; |
490 | expectedResult.x = refRectB.x; |
491 | expectedResult.y = refRectB.y; |
492 | expectedResult.w = refRectA.w - refRectB.x; |
493 | expectedResult.h = refRectA.h - refRectB.y; |
494 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
495 | _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
496 | |
497 | /* rectB right edge */ |
498 | refRectB.x = rectA.w - 1; |
499 | refRectB.y = rectA.y; |
500 | refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); |
501 | refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); |
502 | rectA = refRectA; |
503 | rectB = refRectB; |
504 | expectedResult.x = refRectB.x; |
505 | expectedResult.y = refRectB.y; |
506 | expectedResult.w = 1; |
507 | expectedResult.h = refRectB.h; |
508 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
509 | _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
510 | |
511 | /* rectB left edge */ |
512 | refRectB.x = 1 - rectA.w; |
513 | refRectB.y = rectA.y; |
514 | refRectB.w = refRectA.w; |
515 | refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); |
516 | rectA = refRectA; |
517 | rectB = refRectB; |
518 | expectedResult.x = 0; |
519 | expectedResult.y = refRectB.y; |
520 | expectedResult.w = 1; |
521 | expectedResult.h = refRectB.h; |
522 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
523 | _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
524 | |
525 | /* rectB bottom edge */ |
526 | refRectB.x = rectA.x; |
527 | refRectB.y = rectA.h - 1; |
528 | refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); |
529 | refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); |
530 | rectA = refRectA; |
531 | rectB = refRectB; |
532 | expectedResult.x = refRectB.x; |
533 | expectedResult.y = refRectB.y; |
534 | expectedResult.w = refRectB.w; |
535 | expectedResult.h = 1; |
536 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
537 | _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
538 | |
539 | /* rectB top edge */ |
540 | refRectB.x = rectA.x; |
541 | refRectB.y = 1 - rectA.h; |
542 | refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); |
543 | refRectB.h = rectA.h; |
544 | rectA = refRectA; |
545 | rectB = refRectB; |
546 | expectedResult.x = refRectB.x; |
547 | expectedResult.y = 0; |
548 | expectedResult.w = refRectB.w; |
549 | expectedResult.h = 1; |
550 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
551 | _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
552 | |
553 | return TEST_COMPLETED; |
554 | } |
555 | |
556 | /* ! |
557 | * \brief Tests SDL_IntersectRect() with 1x1 pixel sized rectangles |
558 | * |
559 | * \sa |
560 | * http://wiki.libsdl.org/SDL_IntersectRect |
561 | */ |
562 | int rect_testIntersectRectPoint (void *arg) |
563 | { |
564 | SDL_Rect refRectA = { 0, 0, 1, 1 }; |
565 | SDL_Rect refRectB = { 0, 0, 1, 1 }; |
566 | SDL_Rect rectA; |
567 | SDL_Rect rectB; |
568 | SDL_Rect result; |
569 | SDL_bool intersection; |
570 | int offsetX, offsetY; |
571 | |
572 | /* intersecting pixels */ |
573 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
574 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
575 | refRectB.x = refRectA.x; |
576 | refRectB.y = refRectA.y; |
577 | rectA = refRectA; |
578 | rectB = refRectB; |
579 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
580 | _validateIntersectRectResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB, &result, &refRectA); |
581 | |
582 | /* non-intersecting pixels cases */ |
583 | for (offsetX = -1; offsetX <= 1; offsetX++) { |
584 | for (offsetY = -1; offsetY <= 1; offsetY++) { |
585 | if (offsetX != 0 || offsetY != 0) { |
586 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
587 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
588 | refRectB.x = refRectA.x; |
589 | refRectB.y = refRectA.y; |
590 | refRectB.x += offsetX; |
591 | refRectB.y += offsetY; |
592 | rectA = refRectA; |
593 | rectB = refRectB; |
594 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
595 | _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); |
596 | } |
597 | } |
598 | } |
599 | |
600 | return TEST_COMPLETED; |
601 | } |
602 | |
603 | /* ! |
604 | * \brief Tests SDL_IntersectRect() with empty rectangles |
605 | * |
606 | * \sa |
607 | * http://wiki.libsdl.org/SDL_IntersectRect |
608 | */ |
609 | int rect_testIntersectRectEmpty (void *arg) |
610 | { |
611 | SDL_Rect refRectA; |
612 | SDL_Rect refRectB; |
613 | SDL_Rect rectA; |
614 | SDL_Rect rectB; |
615 | SDL_Rect result; |
616 | SDL_bool intersection; |
617 | SDL_bool empty; |
618 | |
619 | /* Rect A empty */ |
620 | result.w = SDLTest_RandomIntegerInRange(1, 100); |
621 | result.h = SDLTest_RandomIntegerInRange(1, 100); |
622 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
623 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
624 | refRectA.w = SDLTest_RandomIntegerInRange(1, 100); |
625 | refRectA.h = SDLTest_RandomIntegerInRange(1, 100); |
626 | refRectB = refRectA; |
627 | refRectA.w = 0; |
628 | refRectA.h = 0; |
629 | rectA = refRectA; |
630 | rectB = refRectB; |
631 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
632 | _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); |
633 | empty = (SDL_bool)SDL_RectEmpty(&result); |
634 | SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s" , (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
635 | |
636 | /* Rect B empty */ |
637 | result.w = SDLTest_RandomIntegerInRange(1, 100); |
638 | result.h = SDLTest_RandomIntegerInRange(1, 100); |
639 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
640 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
641 | refRectA.w = SDLTest_RandomIntegerInRange(1, 100); |
642 | refRectA.h = SDLTest_RandomIntegerInRange(1, 100); |
643 | refRectB = refRectA; |
644 | refRectB.w = 0; |
645 | refRectB.h = 0; |
646 | rectA = refRectA; |
647 | rectB = refRectB; |
648 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
649 | _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); |
650 | empty = (SDL_bool)SDL_RectEmpty(&result); |
651 | SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s" , (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
652 | |
653 | /* Rect A and B empty */ |
654 | result.w = SDLTest_RandomIntegerInRange(1, 100); |
655 | result.h = SDLTest_RandomIntegerInRange(1, 100); |
656 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
657 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
658 | refRectA.w = SDLTest_RandomIntegerInRange(1, 100); |
659 | refRectA.h = SDLTest_RandomIntegerInRange(1, 100); |
660 | refRectB = refRectA; |
661 | refRectA.w = 0; |
662 | refRectA.h = 0; |
663 | refRectB.w = 0; |
664 | refRectB.h = 0; |
665 | rectA = refRectA; |
666 | rectB = refRectB; |
667 | intersection = SDL_IntersectRect(&rectA, &rectB, &result); |
668 | _validateIntersectRectResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB, (SDL_Rect *)NULL, (SDL_Rect *)NULL); |
669 | empty = (SDL_bool)SDL_RectEmpty(&result); |
670 | SDLTest_AssertCheck(empty == SDL_TRUE, "Validate result is empty Rect; got: %s" , (empty == SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
671 | |
672 | return TEST_COMPLETED; |
673 | } |
674 | |
675 | /* ! |
676 | * \brief Negative tests against SDL_IntersectRect() with invalid parameters |
677 | * |
678 | * \sa |
679 | * http://wiki.libsdl.org/SDL_IntersectRect |
680 | */ |
681 | int rect_testIntersectRectParam(void *arg) |
682 | { |
683 | SDL_Rect rectA; |
684 | SDL_Rect rectB; |
685 | SDL_Rect result; |
686 | SDL_bool intersection; |
687 | |
688 | /* invalid parameter combinations */ |
689 | intersection = SDL_IntersectRect((SDL_Rect *)NULL, &rectB, &result); |
690 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL" ); |
691 | intersection = SDL_IntersectRect(&rectA, (SDL_Rect *)NULL, &result); |
692 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 2st parameter is NULL" ); |
693 | intersection = SDL_IntersectRect(&rectA, &rectB, (SDL_Rect *)NULL); |
694 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 3st parameter is NULL" ); |
695 | intersection = SDL_IntersectRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, &result); |
696 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameters are NULL" ); |
697 | intersection = SDL_IntersectRect((SDL_Rect *)NULL, &rectB, (SDL_Rect *)NULL); |
698 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 3rd parameters are NULL " ); |
699 | intersection = SDL_IntersectRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, (SDL_Rect *)NULL); |
700 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL" ); |
701 | |
702 | return TEST_COMPLETED; |
703 | } |
704 | |
705 | /* ! |
706 | * \brief Tests SDL_HasIntersection() with B fully inside A |
707 | * |
708 | * \sa |
709 | * http://wiki.libsdl.org/SDL_HasIntersection |
710 | */ |
711 | int rect_testHasIntersectionInside (void *arg) |
712 | { |
713 | SDL_Rect refRectA = { 0, 0, 32, 32 }; |
714 | SDL_Rect refRectB; |
715 | SDL_Rect rectA; |
716 | SDL_Rect rectB; |
717 | SDL_bool intersection; |
718 | |
719 | /* rectB fully contained in rectA */ |
720 | refRectB.x = 0; |
721 | refRectB.y = 0; |
722 | refRectB.w = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); |
723 | refRectB.h = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); |
724 | rectA = refRectA; |
725 | rectB = refRectB; |
726 | intersection = SDL_HasIntersection(&rectA, &rectB); |
727 | _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); |
728 | |
729 | return TEST_COMPLETED; |
730 | } |
731 | |
732 | /* ! |
733 | * \brief Tests SDL_HasIntersection() with B fully outside A |
734 | * |
735 | * \sa |
736 | * http://wiki.libsdl.org/SDL_HasIntersection |
737 | */ |
738 | int rect_testHasIntersectionOutside (void *arg) |
739 | { |
740 | SDL_Rect refRectA = { 0, 0, 32, 32 }; |
741 | SDL_Rect refRectB; |
742 | SDL_Rect rectA; |
743 | SDL_Rect rectB; |
744 | SDL_bool intersection; |
745 | |
746 | /* rectB fully outside of rectA */ |
747 | refRectB.x = refRectA.x + refRectA.w + SDLTest_RandomIntegerInRange(1, 10); |
748 | refRectB.y = refRectA.y + refRectA.h + SDLTest_RandomIntegerInRange(1, 10); |
749 | refRectB.w = refRectA.w; |
750 | refRectB.h = refRectA.h; |
751 | rectA = refRectA; |
752 | rectB = refRectB; |
753 | intersection = SDL_HasIntersection(&rectA, &rectB); |
754 | _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); |
755 | |
756 | return TEST_COMPLETED; |
757 | } |
758 | |
759 | /* ! |
760 | * \brief Tests SDL_HasIntersection() with B partially intersecting A |
761 | * |
762 | * \sa |
763 | * http://wiki.libsdl.org/SDL_HasIntersection |
764 | */ |
765 | int rect_testHasIntersectionPartial (void *arg) |
766 | { |
767 | SDL_Rect refRectA = { 0, 0, 32, 32 }; |
768 | SDL_Rect refRectB; |
769 | SDL_Rect rectA; |
770 | SDL_Rect rectB; |
771 | SDL_bool intersection; |
772 | |
773 | /* rectB partially contained in rectA */ |
774 | refRectB.x = SDLTest_RandomIntegerInRange(refRectA.x + 1, refRectA.x + refRectA.w - 1); |
775 | refRectB.y = SDLTest_RandomIntegerInRange(refRectA.y + 1, refRectA.y + refRectA.h - 1); |
776 | refRectB.w = refRectA.w; |
777 | refRectB.h = refRectA.h; |
778 | rectA = refRectA; |
779 | rectB = refRectB; |
780 | intersection = SDL_HasIntersection(&rectA, &rectB); |
781 | _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); |
782 | |
783 | /* rectB right edge */ |
784 | refRectB.x = rectA.w - 1; |
785 | refRectB.y = rectA.y; |
786 | refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); |
787 | refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); |
788 | rectA = refRectA; |
789 | rectB = refRectB; |
790 | intersection = SDL_HasIntersection(&rectA, &rectB); |
791 | _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); |
792 | |
793 | /* rectB left edge */ |
794 | refRectB.x = 1 - rectA.w; |
795 | refRectB.y = rectA.y; |
796 | refRectB.w = refRectA.w; |
797 | refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); |
798 | rectA = refRectA; |
799 | rectB = refRectB; |
800 | intersection = SDL_HasIntersection(&rectA, &rectB); |
801 | _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); |
802 | |
803 | /* rectB bottom edge */ |
804 | refRectB.x = rectA.x; |
805 | refRectB.y = rectA.h - 1; |
806 | refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); |
807 | refRectB.h = SDLTest_RandomIntegerInRange(1, refRectA.h - 1); |
808 | rectA = refRectA; |
809 | rectB = refRectB; |
810 | intersection = SDL_HasIntersection(&rectA, &rectB); |
811 | _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); |
812 | |
813 | /* rectB top edge */ |
814 | refRectB.x = rectA.x; |
815 | refRectB.y = 1 - rectA.h; |
816 | refRectB.w = SDLTest_RandomIntegerInRange(1, refRectA.w - 1); |
817 | refRectB.h = rectA.h; |
818 | rectA = refRectA; |
819 | rectB = refRectB; |
820 | intersection = SDL_HasIntersection(&rectA, &rectB); |
821 | _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); |
822 | |
823 | return TEST_COMPLETED; |
824 | } |
825 | |
826 | /* ! |
827 | * \brief Tests SDL_HasIntersection() with 1x1 pixel sized rectangles |
828 | * |
829 | * \sa |
830 | * http://wiki.libsdl.org/SDL_HasIntersection |
831 | */ |
832 | int rect_testHasIntersectionPoint (void *arg) |
833 | { |
834 | SDL_Rect refRectA = { 0, 0, 1, 1 }; |
835 | SDL_Rect refRectB = { 0, 0, 1, 1 }; |
836 | SDL_Rect rectA; |
837 | SDL_Rect rectB; |
838 | SDL_bool intersection; |
839 | int offsetX, offsetY; |
840 | |
841 | /* intersecting pixels */ |
842 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
843 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
844 | refRectB.x = refRectA.x; |
845 | refRectB.y = refRectA.y; |
846 | rectA = refRectA; |
847 | rectB = refRectB; |
848 | intersection = SDL_HasIntersection(&rectA, &rectB); |
849 | _validateHasIntersectionResults(intersection, SDL_TRUE, &rectA, &rectB, &refRectA, &refRectB); |
850 | |
851 | /* non-intersecting pixels cases */ |
852 | for (offsetX = -1; offsetX <= 1; offsetX++) { |
853 | for (offsetY = -1; offsetY <= 1; offsetY++) { |
854 | if (offsetX != 0 || offsetY != 0) { |
855 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
856 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
857 | refRectB.x = refRectA.x; |
858 | refRectB.y = refRectA.y; |
859 | refRectB.x += offsetX; |
860 | refRectB.y += offsetY; |
861 | rectA = refRectA; |
862 | rectB = refRectB; |
863 | intersection = SDL_HasIntersection(&rectA, &rectB); |
864 | _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); |
865 | } |
866 | } |
867 | } |
868 | |
869 | return TEST_COMPLETED; |
870 | } |
871 | |
872 | /* ! |
873 | * \brief Tests SDL_HasIntersection() with empty rectangles |
874 | * |
875 | * \sa |
876 | * http://wiki.libsdl.org/SDL_HasIntersection |
877 | */ |
878 | int rect_testHasIntersectionEmpty (void *arg) |
879 | { |
880 | SDL_Rect refRectA; |
881 | SDL_Rect refRectB; |
882 | SDL_Rect rectA; |
883 | SDL_Rect rectB; |
884 | SDL_bool intersection; |
885 | |
886 | /* Rect A empty */ |
887 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
888 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
889 | refRectA.w = SDLTest_RandomIntegerInRange(1, 100); |
890 | refRectA.h = SDLTest_RandomIntegerInRange(1, 100); |
891 | refRectB = refRectA; |
892 | refRectA.w = 0; |
893 | refRectA.h = 0; |
894 | rectA = refRectA; |
895 | rectB = refRectB; |
896 | intersection = SDL_HasIntersection(&rectA, &rectB); |
897 | _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); |
898 | |
899 | /* Rect B empty */ |
900 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
901 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
902 | refRectA.w = SDLTest_RandomIntegerInRange(1, 100); |
903 | refRectA.h = SDLTest_RandomIntegerInRange(1, 100); |
904 | refRectB = refRectA; |
905 | refRectB.w = 0; |
906 | refRectB.h = 0; |
907 | rectA = refRectA; |
908 | rectB = refRectB; |
909 | intersection = SDL_HasIntersection(&rectA, &rectB); |
910 | _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); |
911 | |
912 | /* Rect A and B empty */ |
913 | refRectA.x = SDLTest_RandomIntegerInRange(1, 100); |
914 | refRectA.y = SDLTest_RandomIntegerInRange(1, 100); |
915 | refRectA.w = SDLTest_RandomIntegerInRange(1, 100); |
916 | refRectA.h = SDLTest_RandomIntegerInRange(1, 100); |
917 | refRectB = refRectA; |
918 | refRectA.w = 0; |
919 | refRectA.h = 0; |
920 | refRectB.w = 0; |
921 | refRectB.h = 0; |
922 | rectA = refRectA; |
923 | rectB = refRectB; |
924 | intersection = SDL_HasIntersection(&rectA, &rectB); |
925 | _validateHasIntersectionResults(intersection, SDL_FALSE, &rectA, &rectB, &refRectA, &refRectB); |
926 | |
927 | return TEST_COMPLETED; |
928 | } |
929 | |
930 | /* ! |
931 | * \brief Negative tests against SDL_HasIntersection() with invalid parameters |
932 | * |
933 | * \sa |
934 | * http://wiki.libsdl.org/SDL_HasIntersection |
935 | */ |
936 | int rect_testHasIntersectionParam(void *arg) |
937 | { |
938 | SDL_Rect rectA; |
939 | SDL_Rect rectB; |
940 | SDL_bool intersection; |
941 | |
942 | /* invalid parameter combinations */ |
943 | intersection = SDL_HasIntersection((SDL_Rect *)NULL, &rectB); |
944 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL" ); |
945 | intersection = SDL_HasIntersection(&rectA, (SDL_Rect *)NULL); |
946 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when 2st parameter is NULL" ); |
947 | intersection = SDL_HasIntersection((SDL_Rect *)NULL, (SDL_Rect *)NULL); |
948 | SDLTest_AssertCheck(intersection == SDL_FALSE, "Check that function returns SDL_FALSE when all parameters are NULL" ); |
949 | |
950 | return TEST_COMPLETED; |
951 | } |
952 | |
953 | /* ! |
954 | * \brief Test SDL_EnclosePoints() without clipping |
955 | * |
956 | * \sa |
957 | * http://wiki.libsdl.org/SDL_EnclosePoints |
958 | */ |
959 | int rect_testEnclosePoints(void *arg) |
960 | { |
961 | const int numPoints = 16; |
962 | SDL_Point refPoints[16]; |
963 | SDL_Point points[16]; |
964 | SDL_Rect result; |
965 | SDL_bool anyEnclosed; |
966 | SDL_bool anyEnclosedNoResult; |
967 | SDL_bool expectedEnclosed = SDL_TRUE; |
968 | int newx, newy; |
969 | int minx = 0, maxx = 0, miny = 0, maxy = 0; |
970 | int i; |
971 | |
972 | /* Create input data, tracking result */ |
973 | for (i=0; i<numPoints; i++) { |
974 | newx = SDLTest_RandomIntegerInRange(-1024, 1024); |
975 | newy = SDLTest_RandomIntegerInRange(-1024, 1024); |
976 | refPoints[i].x = newx; |
977 | refPoints[i].y = newy; |
978 | points[i].x = newx; |
979 | points[i].y = newy; |
980 | if (i==0) { |
981 | minx = newx; |
982 | maxx = newx; |
983 | miny = newy; |
984 | maxy = newy; |
985 | } else { |
986 | if (newx < minx) minx = newx; |
987 | if (newx > maxx) maxx = newx; |
988 | if (newy < miny) miny = newy; |
989 | if (newy > maxy) maxy = newy; |
990 | } |
991 | } |
992 | |
993 | /* Call function and validate - special case: no result requested */ |
994 | anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, (SDL_Rect *)NULL); |
995 | SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, |
996 | "Check expected return value %s, got %s" , |
997 | (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
998 | (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
999 | for (i=0; i<numPoints; i++) { |
1000 | SDLTest_AssertCheck(refPoints[i].x==points[i].x && refPoints[i].y==points[i].y, |
1001 | "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)" , |
1002 | i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); |
1003 | } |
1004 | |
1005 | /* Call function and validate */ |
1006 | anyEnclosed = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, &result); |
1007 | SDLTest_AssertCheck(expectedEnclosed==anyEnclosed, |
1008 | "Check return value %s, got %s" , |
1009 | (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
1010 | (anyEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
1011 | for (i=0; i<numPoints; i++) { |
1012 | SDLTest_AssertCheck(refPoints[i].x==points[i].x && refPoints[i].y==points[i].y, |
1013 | "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)" , |
1014 | i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); |
1015 | } |
1016 | SDLTest_AssertCheck(result.x==minx && result.y==miny && result.w==(maxx - minx + 1) && result.h==(maxy - miny + 1), |
1017 | "Resulting enclosing rectangle incorrect: expected (%i,%i - %i,%i), actual (%i,%i - %i,%i)" , |
1018 | minx, miny, maxx, maxy, result.x, result.y, result.x + result.w - 1, result.y + result.h - 1); |
1019 | |
1020 | return TEST_COMPLETED; |
1021 | } |
1022 | |
1023 | /* ! |
1024 | * \brief Test SDL_EnclosePoints() with repeated input points |
1025 | * |
1026 | * \sa |
1027 | * http://wiki.libsdl.org/SDL_EnclosePoints |
1028 | */ |
1029 | int rect_testEnclosePointsRepeatedInput(void *arg) |
1030 | { |
1031 | const int numPoints = 8; |
1032 | const int halfPoints = 4; |
1033 | SDL_Point refPoints[8]; |
1034 | SDL_Point points[8]; |
1035 | SDL_Rect result; |
1036 | SDL_bool anyEnclosed; |
1037 | SDL_bool anyEnclosedNoResult; |
1038 | SDL_bool expectedEnclosed = SDL_TRUE; |
1039 | int newx, newy; |
1040 | int minx = 0, maxx = 0, miny = 0, maxy = 0; |
1041 | int i; |
1042 | |
1043 | /* Create input data, tracking result */ |
1044 | for (i=0; i<numPoints; i++) { |
1045 | if (i < halfPoints) { |
1046 | newx = SDLTest_RandomIntegerInRange(-1024, 1024); |
1047 | newy = SDLTest_RandomIntegerInRange(-1024, 1024); |
1048 | } else { |
1049 | newx = refPoints[i-halfPoints].x; |
1050 | newy = refPoints[i-halfPoints].y; |
1051 | } |
1052 | refPoints[i].x = newx; |
1053 | refPoints[i].y = newy; |
1054 | points[i].x = newx; |
1055 | points[i].y = newy; |
1056 | if (i==0) { |
1057 | minx = newx; |
1058 | maxx = newx; |
1059 | miny = newy; |
1060 | maxy = newy; |
1061 | } else { |
1062 | if (newx < minx) minx = newx; |
1063 | if (newx > maxx) maxx = newx; |
1064 | if (newy < miny) miny = newy; |
1065 | if (newy > maxy) maxy = newy; |
1066 | } |
1067 | } |
1068 | |
1069 | /* Call function and validate - special case: no result requested */ |
1070 | anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, (SDL_Rect *)NULL); |
1071 | SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, |
1072 | "Check return value %s, got %s" , |
1073 | (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
1074 | (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
1075 | for (i=0; i<numPoints; i++) { |
1076 | SDLTest_AssertCheck(refPoints[i].x==points[i].x && refPoints[i].y==points[i].y, |
1077 | "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)" , |
1078 | i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); |
1079 | } |
1080 | |
1081 | /* Call function and validate */ |
1082 | anyEnclosed = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)NULL, &result); |
1083 | SDLTest_AssertCheck(expectedEnclosed==anyEnclosed, |
1084 | "Check return value %s, got %s" , |
1085 | (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
1086 | (anyEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
1087 | for (i=0; i<numPoints; i++) { |
1088 | SDLTest_AssertCheck(refPoints[i].x==points[i].x && refPoints[i].y==points[i].y, |
1089 | "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)" , |
1090 | i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); |
1091 | } |
1092 | SDLTest_AssertCheck(result.x==minx && result.y==miny && result.w==(maxx - minx + 1) && result.h==(maxy - miny + 1), |
1093 | "Check resulting enclosing rectangle: expected (%i,%i - %i,%i), actual (%i,%i - %i,%i)" , |
1094 | minx, miny, maxx, maxy, result.x, result.y, result.x + result.w - 1, result.y + result.h - 1); |
1095 | |
1096 | return TEST_COMPLETED; |
1097 | } |
1098 | |
1099 | /* ! |
1100 | * \brief Test SDL_EnclosePoints() with clipping |
1101 | * |
1102 | * \sa |
1103 | * http://wiki.libsdl.org/SDL_EnclosePoints |
1104 | */ |
1105 | int rect_testEnclosePointsWithClipping(void *arg) |
1106 | { |
1107 | const int numPoints = 16; |
1108 | SDL_Point refPoints[16]; |
1109 | SDL_Point points[16]; |
1110 | SDL_Rect refClip; |
1111 | SDL_Rect clip; |
1112 | SDL_Rect result; |
1113 | SDL_bool anyEnclosed; |
1114 | SDL_bool anyEnclosedNoResult; |
1115 | SDL_bool expectedEnclosed = SDL_FALSE; |
1116 | int newx, newy; |
1117 | int minx = 0, maxx = 0, miny = 0, maxy = 0; |
1118 | int i; |
1119 | |
1120 | /* Setup clipping rectangle */ |
1121 | refClip.x = SDLTest_RandomIntegerInRange(-1024, 1024); |
1122 | refClip.y = SDLTest_RandomIntegerInRange(-1024, 1024); |
1123 | refClip.w = SDLTest_RandomIntegerInRange(1, 1024); |
1124 | refClip.h = SDLTest_RandomIntegerInRange(1, 1024); |
1125 | |
1126 | /* Create input data, tracking result */ |
1127 | for (i=0; i<numPoints; i++) { |
1128 | newx = SDLTest_RandomIntegerInRange(-1024, 1024); |
1129 | newy = SDLTest_RandomIntegerInRange(-1024, 1024); |
1130 | refPoints[i].x = newx; |
1131 | refPoints[i].y = newy; |
1132 | points[i].x = newx; |
1133 | points[i].y = newy; |
1134 | if ((newx>=refClip.x) && (newx<(refClip.x + refClip.w)) && |
1135 | (newy>=refClip.y) && (newy<(refClip.y + refClip.h))) { |
1136 | if (expectedEnclosed==SDL_FALSE) { |
1137 | minx = newx; |
1138 | maxx = newx; |
1139 | miny = newy; |
1140 | maxy = newy; |
1141 | } else { |
1142 | if (newx < minx) minx = newx; |
1143 | if (newx > maxx) maxx = newx; |
1144 | if (newy < miny) miny = newy; |
1145 | if (newy > maxy) maxy = newy; |
1146 | } |
1147 | expectedEnclosed = SDL_TRUE; |
1148 | } |
1149 | } |
1150 | |
1151 | /* Call function and validate - special case: no result requested */ |
1152 | clip = refClip; |
1153 | anyEnclosedNoResult = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)&clip, (SDL_Rect *)NULL); |
1154 | SDLTest_AssertCheck(expectedEnclosed==anyEnclosedNoResult, |
1155 | "Expected return value %s, got %s" , |
1156 | (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
1157 | (anyEnclosedNoResult==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
1158 | for (i=0; i<numPoints; i++) { |
1159 | SDLTest_AssertCheck(refPoints[i].x==points[i].x && refPoints[i].y==points[i].y, |
1160 | "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)" , |
1161 | i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); |
1162 | } |
1163 | SDLTest_AssertCheck(refClip.x==clip.x && refClip.y==clip.y && refClip.w==clip.w && refClip.h==clip.h, |
1164 | "Check that source clipping rectangle was not modified" ); |
1165 | |
1166 | /* Call function and validate */ |
1167 | anyEnclosed = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)&clip, &result); |
1168 | SDLTest_AssertCheck(expectedEnclosed==anyEnclosed, |
1169 | "Check return value %s, got %s" , |
1170 | (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
1171 | (anyEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
1172 | for (i=0; i<numPoints; i++) { |
1173 | SDLTest_AssertCheck(refPoints[i].x==points[i].x && refPoints[i].y==points[i].y, |
1174 | "Check that source point %i was not modified: expected (%i,%i) actual (%i,%i)" , |
1175 | i, refPoints[i].x, refPoints[i].y, points[i].x, points[i].y); |
1176 | } |
1177 | SDLTest_AssertCheck(refClip.x==clip.x && refClip.y==clip.y && refClip.w==clip.w && refClip.h==clip.h, |
1178 | "Check that source clipping rectangle was not modified" ); |
1179 | if (expectedEnclosed==SDL_TRUE) { |
1180 | SDLTest_AssertCheck(result.x==minx && result.y==miny && result.w==(maxx - minx + 1) && result.h==(maxy - miny + 1), |
1181 | "Check resulting enclosing rectangle: expected (%i,%i - %i,%i), actual (%i,%i - %i,%i)" , |
1182 | minx, miny, maxx, maxy, result.x, result.y, result.x + result.w - 1, result.y + result.h - 1); |
1183 | } |
1184 | |
1185 | /* Empty clipping rectangle */ |
1186 | clip.w = 0; |
1187 | clip.h = 0; |
1188 | expectedEnclosed = SDL_FALSE; |
1189 | anyEnclosed = SDL_EnclosePoints((const SDL_Point *)points, numPoints, (const SDL_Rect *)&clip, &result); |
1190 | SDLTest_AssertCheck(expectedEnclosed==anyEnclosed, |
1191 | "Check return value %s, got %s" , |
1192 | (expectedEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" , |
1193 | (anyEnclosed==SDL_TRUE) ? "SDL_TRUE" : "SDL_FALSE" ); |
1194 | |
1195 | return TEST_COMPLETED; |
1196 | } |
1197 | |
1198 | /* ! |
1199 | * \brief Negative tests against SDL_EnclosePoints() with invalid parameters |
1200 | * |
1201 | * \sa |
1202 | * http://wiki.libsdl.org/SDL_EnclosePoints |
1203 | */ |
1204 | int rect_testEnclosePointsParam(void *arg) |
1205 | { |
1206 | SDL_Point points[1]; |
1207 | int count; |
1208 | SDL_Rect clip; |
1209 | SDL_Rect result; |
1210 | SDL_bool anyEnclosed; |
1211 | |
1212 | /* invalid parameter combinations */ |
1213 | anyEnclosed = SDL_EnclosePoints((SDL_Point *)NULL, 1, (const SDL_Rect *)&clip, &result); |
1214 | SDLTest_AssertCheck(anyEnclosed == SDL_FALSE, "Check that functions returns SDL_FALSE when 1st parameter is NULL" ); |
1215 | anyEnclosed = SDL_EnclosePoints((const SDL_Point *)points, 0, (const SDL_Rect *)&clip, &result); |
1216 | SDLTest_AssertCheck(anyEnclosed == SDL_FALSE, "Check that functions returns SDL_FALSE when 2nd parameter is 0" ); |
1217 | count = SDLTest_RandomIntegerInRange(-100, -1); |
1218 | anyEnclosed = SDL_EnclosePoints((const SDL_Point *)points, count, (const SDL_Rect *)&clip, &result); |
1219 | SDLTest_AssertCheck(anyEnclosed == SDL_FALSE, "Check that functions returns SDL_FALSE when 2nd parameter is %i (negative)" , count); |
1220 | anyEnclosed = SDL_EnclosePoints((SDL_Point *)NULL, 0, (const SDL_Rect *)&clip, &result); |
1221 | SDLTest_AssertCheck(anyEnclosed == SDL_FALSE, "Check that functions returns SDL_FALSE when 1st parameter is NULL and 2nd parameter was 0" ); |
1222 | |
1223 | return TEST_COMPLETED; |
1224 | } |
1225 | |
1226 | /* ! |
1227 | * \brief Tests SDL_UnionRect() where rect B is outside rect A |
1228 | * |
1229 | * \sa |
1230 | * http://wiki.libsdl.org/SDL_UnionRect |
1231 | */ |
1232 | int rect_testUnionRectOutside(void *arg) |
1233 | { |
1234 | SDL_Rect refRectA, refRectB; |
1235 | SDL_Rect rectA, rectB; |
1236 | SDL_Rect expectedResult; |
1237 | SDL_Rect result; |
1238 | int minx, maxx, miny, maxy; |
1239 | int dx, dy; |
1240 | |
1241 | /* Union 1x1 outside */ |
1242 | for (dx = -1; dx < 2; dx++) { |
1243 | for (dy = -1; dy < 2; dy++) { |
1244 | if ((dx != 0) || (dy != 0)) { |
1245 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1246 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1247 | refRectA.w=1; |
1248 | refRectA.h=1; |
1249 | refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024) + dx*2048; |
1250 | refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024) + dx*2048; |
1251 | refRectB.w=1; |
1252 | refRectB.h=1; |
1253 | minx = (refRectA.x<refRectB.x) ? refRectA.x : refRectB.x; |
1254 | maxx = (refRectA.x>refRectB.x) ? refRectA.x : refRectB.x; |
1255 | miny = (refRectA.y<refRectB.y) ? refRectA.y : refRectB.y; |
1256 | maxy = (refRectA.y>refRectB.y) ? refRectA.y : refRectB.y; |
1257 | expectedResult.x = minx; |
1258 | expectedResult.y = miny; |
1259 | expectedResult.w = maxx - minx + 1; |
1260 | expectedResult.h = maxy - miny + 1; |
1261 | rectA = refRectA; |
1262 | rectB = refRectB; |
1263 | SDL_UnionRect(&rectA, &rectB, &result); |
1264 | _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
1265 | } |
1266 | } |
1267 | } |
1268 | |
1269 | /* Union outside overlap */ |
1270 | for (dx = -1; dx < 2; dx++) { |
1271 | for (dy = -1; dy < 2; dy++) { |
1272 | if ((dx != 0) || (dy != 0)) { |
1273 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1274 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1275 | refRectA.w=SDLTest_RandomIntegerInRange(256, 512); |
1276 | refRectA.h=SDLTest_RandomIntegerInRange(256, 512); |
1277 | refRectB.x=refRectA.x + 1 + dx*2; |
1278 | refRectB.y=refRectA.y + 1 + dy*2; |
1279 | refRectB.w=refRectA.w - 2; |
1280 | refRectB.h=refRectA.h - 2; |
1281 | expectedResult = refRectA; |
1282 | if (dx == -1) expectedResult.x--; |
1283 | if (dy == -1) expectedResult.y--; |
1284 | if ((dx == 1) || (dx == -1)) expectedResult.w++; |
1285 | if ((dy == 1) || (dy == -1)) expectedResult.h++; |
1286 | rectA = refRectA; |
1287 | rectB = refRectB; |
1288 | SDL_UnionRect(&rectA, &rectB, &result); |
1289 | _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
1290 | } |
1291 | } |
1292 | } |
1293 | |
1294 | return TEST_COMPLETED; |
1295 | } |
1296 | |
1297 | /* ! |
1298 | * \brief Tests SDL_UnionRect() where rect A or rect B are empty |
1299 | * |
1300 | * \sa |
1301 | * http://wiki.libsdl.org/SDL_UnionRect |
1302 | */ |
1303 | int rect_testUnionRectEmpty(void *arg) |
1304 | { |
1305 | SDL_Rect refRectA, refRectB; |
1306 | SDL_Rect rectA, rectB; |
1307 | SDL_Rect expectedResult; |
1308 | SDL_Rect result; |
1309 | |
1310 | /* A empty */ |
1311 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1312 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1313 | refRectA.w=0; |
1314 | refRectA.h=0; |
1315 | refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1316 | refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1317 | refRectB.w=SDLTest_RandomIntegerInRange(1, 1024); |
1318 | refRectB.h=SDLTest_RandomIntegerInRange(1, 1024); |
1319 | expectedResult = refRectB; |
1320 | rectA = refRectA; |
1321 | rectB = refRectB; |
1322 | SDL_UnionRect(&rectA, &rectB, &result); |
1323 | _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
1324 | |
1325 | /* B empty */ |
1326 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1327 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1328 | refRectA.w=SDLTest_RandomIntegerInRange(1, 1024); |
1329 | refRectA.h=SDLTest_RandomIntegerInRange(1, 1024); |
1330 | refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1331 | refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1332 | refRectB.w=0; |
1333 | refRectB.h=0; |
1334 | expectedResult = refRectA; |
1335 | rectA = refRectA; |
1336 | rectB = refRectB; |
1337 | SDL_UnionRect(&rectA, &rectB, &result); |
1338 | _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
1339 | |
1340 | /* A and B empty */ |
1341 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1342 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1343 | refRectA.w=0; |
1344 | refRectA.h=0; |
1345 | refRectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1346 | refRectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1347 | refRectB.w=0; |
1348 | refRectB.h=0; |
1349 | result.x=0; |
1350 | result.y=0; |
1351 | result.w=0; |
1352 | result.h=0; |
1353 | expectedResult = result; |
1354 | rectA = refRectA; |
1355 | rectB = refRectB; |
1356 | SDL_UnionRect(&rectA, &rectB, &result); |
1357 | _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
1358 | |
1359 | return TEST_COMPLETED; |
1360 | } |
1361 | |
1362 | /* ! |
1363 | * \brief Tests SDL_UnionRect() where rect B is inside rect A |
1364 | * |
1365 | * \sa |
1366 | * http://wiki.libsdl.org/SDL_UnionRect |
1367 | */ |
1368 | int rect_testUnionRectInside(void *arg) |
1369 | { |
1370 | SDL_Rect refRectA, refRectB; |
1371 | SDL_Rect rectA, rectB; |
1372 | SDL_Rect expectedResult; |
1373 | SDL_Rect result; |
1374 | int dx, dy; |
1375 | |
1376 | /* Union 1x1 with itself */ |
1377 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1378 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1379 | refRectA.w=1; |
1380 | refRectA.h=1; |
1381 | expectedResult = refRectA; |
1382 | rectA = refRectA; |
1383 | SDL_UnionRect(&rectA, &rectA, &result); |
1384 | _validateUnionRectResults(&rectA, &rectA, &refRectA, &refRectA, &result, &expectedResult); |
1385 | |
1386 | /* Union 1x1 somewhere inside */ |
1387 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1388 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1389 | refRectA.w=SDLTest_RandomIntegerInRange(256, 1024); |
1390 | refRectA.h=SDLTest_RandomIntegerInRange(256, 1024); |
1391 | refRectB.x=refRectA.x + 1 + SDLTest_RandomIntegerInRange(1, refRectA.w - 2); |
1392 | refRectB.y=refRectA.y + 1 + SDLTest_RandomIntegerInRange(1, refRectA.h - 2); |
1393 | refRectB.w=1; |
1394 | refRectB.h=1; |
1395 | expectedResult = refRectA; |
1396 | rectA = refRectA; |
1397 | rectB = refRectB; |
1398 | SDL_UnionRect(&rectA, &rectB, &result); |
1399 | _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
1400 | |
1401 | /* Union inside with edges modified */ |
1402 | for (dx = -1; dx < 2; dx++) { |
1403 | for (dy = -1; dy < 2; dy++) { |
1404 | if ((dx != 0) || (dy != 0)) { |
1405 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1406 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1407 | refRectA.w=SDLTest_RandomIntegerInRange(256, 1024); |
1408 | refRectA.h=SDLTest_RandomIntegerInRange(256, 1024); |
1409 | refRectB = refRectA; |
1410 | if (dx == -1) refRectB.x++; |
1411 | if ((dx == 1) || (dx == -1)) refRectB.w--; |
1412 | if (dy == -1) refRectB.y++; |
1413 | if ((dy == 1) || (dy == -1)) refRectB.h--; |
1414 | expectedResult = refRectA; |
1415 | rectA = refRectA; |
1416 | rectB = refRectB; |
1417 | SDL_UnionRect(&rectA, &rectB, &result); |
1418 | _validateUnionRectResults(&rectA, &rectB, &refRectA, &refRectB, &result, &expectedResult); |
1419 | } |
1420 | } |
1421 | } |
1422 | |
1423 | return TEST_COMPLETED; |
1424 | } |
1425 | |
1426 | /* ! |
1427 | * \brief Negative tests against SDL_UnionRect() with invalid parameters |
1428 | * |
1429 | * \sa |
1430 | * http://wiki.libsdl.org/SDL_UnionRect |
1431 | */ |
1432 | int rect_testUnionRectParam(void *arg) |
1433 | { |
1434 | SDL_Rect rectA, rectB; |
1435 | SDL_Rect result; |
1436 | |
1437 | /* invalid parameter combinations */ |
1438 | SDL_UnionRect((SDL_Rect *)NULL, &rectB, &result); |
1439 | SDLTest_AssertPass("Check that function returns when 1st parameter is NULL" ); |
1440 | SDL_UnionRect(&rectA, (SDL_Rect *)NULL, &result); |
1441 | SDLTest_AssertPass("Check that function returns when 2nd parameter is NULL" ); |
1442 | SDL_UnionRect(&rectA, &rectB, (SDL_Rect *)NULL); |
1443 | SDLTest_AssertPass("Check that function returns when 3rd parameter is NULL" ); |
1444 | SDL_UnionRect((SDL_Rect *)NULL, &rectB, (SDL_Rect *)NULL); |
1445 | SDLTest_AssertPass("Check that function returns when 1st and 3rd parameter are NULL" ); |
1446 | SDL_UnionRect(&rectA, (SDL_Rect *)NULL, (SDL_Rect *)NULL); |
1447 | SDLTest_AssertPass("Check that function returns when 2nd and 3rd parameter are NULL" ); |
1448 | SDL_UnionRect((SDL_Rect *)NULL, (SDL_Rect *)NULL, (SDL_Rect *)NULL); |
1449 | SDLTest_AssertPass("Check that function returns when all parameters are NULL" ); |
1450 | |
1451 | return TEST_COMPLETED; |
1452 | } |
1453 | |
1454 | /* ! |
1455 | * \brief Tests SDL_RectEmpty() with various inputs |
1456 | * |
1457 | * \sa |
1458 | * http://wiki.libsdl.org/SDL_RectEmpty |
1459 | */ |
1460 | int rect_testRectEmpty(void *arg) |
1461 | { |
1462 | SDL_Rect refRect; |
1463 | SDL_Rect rect; |
1464 | SDL_bool expectedResult; |
1465 | SDL_bool result; |
1466 | int w, h; |
1467 | |
1468 | /* Non-empty case */ |
1469 | refRect.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1470 | refRect.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1471 | refRect.w=SDLTest_RandomIntegerInRange(256, 1024); |
1472 | refRect.h=SDLTest_RandomIntegerInRange(256, 1024); |
1473 | expectedResult = SDL_FALSE; |
1474 | rect = refRect; |
1475 | result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)&rect); |
1476 | _validateRectEmptyResults(result, expectedResult, &rect, &refRect); |
1477 | |
1478 | /* Empty case */ |
1479 | for (w=-1; w<2; w++) { |
1480 | for (h=-1; h<2; h++) { |
1481 | if ((w != 1) || (h != 1)) { |
1482 | refRect.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1483 | refRect.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1484 | refRect.w=w; |
1485 | refRect.h=h; |
1486 | expectedResult = SDL_TRUE; |
1487 | rect = refRect; |
1488 | result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)&rect); |
1489 | _validateRectEmptyResults(result, expectedResult, &rect, &refRect); |
1490 | } |
1491 | } |
1492 | } |
1493 | |
1494 | return TEST_COMPLETED; |
1495 | } |
1496 | |
1497 | /* ! |
1498 | * \brief Negative tests against SDL_RectEmpty() with invalid parameters |
1499 | * |
1500 | * \sa |
1501 | * http://wiki.libsdl.org/SDL_RectEmpty |
1502 | */ |
1503 | int rect_testRectEmptyParam(void *arg) |
1504 | { |
1505 | SDL_bool result; |
1506 | |
1507 | /* invalid parameter combinations */ |
1508 | result = (SDL_bool)SDL_RectEmpty((const SDL_Rect *)NULL); |
1509 | SDLTest_AssertCheck(result == SDL_TRUE, "Check that function returns TRUE when 1st parameter is NULL" ); |
1510 | |
1511 | return TEST_COMPLETED; |
1512 | } |
1513 | |
1514 | /* ! |
1515 | * \brief Tests SDL_RectEquals() with various inputs |
1516 | * |
1517 | * \sa |
1518 | * http://wiki.libsdl.org/SDL_RectEquals |
1519 | */ |
1520 | int rect_testRectEquals(void *arg) |
1521 | { |
1522 | SDL_Rect refRectA; |
1523 | SDL_Rect refRectB; |
1524 | SDL_Rect rectA; |
1525 | SDL_Rect rectB; |
1526 | SDL_bool expectedResult; |
1527 | SDL_bool result; |
1528 | |
1529 | /* Equals */ |
1530 | refRectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1531 | refRectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1532 | refRectA.w=SDLTest_RandomIntegerInRange(1, 1024); |
1533 | refRectA.h=SDLTest_RandomIntegerInRange(1, 1024); |
1534 | refRectB = refRectA; |
1535 | expectedResult = SDL_TRUE; |
1536 | rectA = refRectA; |
1537 | rectB = refRectB; |
1538 | result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)&rectA, (const SDL_Rect *)&rectB); |
1539 | _validateRectEqualsResults(result, expectedResult, &rectA, &rectB, &refRectA, &refRectB); |
1540 | |
1541 | return TEST_COMPLETED; |
1542 | } |
1543 | |
1544 | /* ! |
1545 | * \brief Negative tests against SDL_RectEquals() with invalid parameters |
1546 | * |
1547 | * \sa |
1548 | * http://wiki.libsdl.org/SDL_RectEquals |
1549 | */ |
1550 | int rect_testRectEqualsParam(void *arg) |
1551 | { |
1552 | SDL_Rect rectA; |
1553 | SDL_Rect rectB; |
1554 | SDL_bool result; |
1555 | |
1556 | /* data setup */ |
1557 | rectA.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1558 | rectA.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1559 | rectA.w=SDLTest_RandomIntegerInRange(1, 1024); |
1560 | rectA.h=SDLTest_RandomIntegerInRange(1, 1024); |
1561 | rectB.x=SDLTest_RandomIntegerInRange(-1024, 1024); |
1562 | rectB.y=SDLTest_RandomIntegerInRange(-1024, 1024); |
1563 | rectB.w=SDLTest_RandomIntegerInRange(1, 1024); |
1564 | rectB.h=SDLTest_RandomIntegerInRange(1, 1024); |
1565 | |
1566 | /* invalid parameter combinations */ |
1567 | result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)NULL, (const SDL_Rect *)&rectB); |
1568 | SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st parameter is NULL" ); |
1569 | result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)&rectA, (const SDL_Rect *)NULL); |
1570 | SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 2nd parameter is NULL" ); |
1571 | result = (SDL_bool)SDL_RectEquals((const SDL_Rect *)NULL, (const SDL_Rect *)NULL); |
1572 | SDLTest_AssertCheck(result == SDL_FALSE, "Check that function returns SDL_FALSE when 1st and 2nd parameter are NULL" ); |
1573 | |
1574 | return TEST_COMPLETED; |
1575 | } |
1576 | |
1577 | /* ================= Test References ================== */ |
1578 | |
1579 | /* Rect test cases */ |
1580 | |
1581 | /* SDL_IntersectRectAndLine */ |
1582 | static const SDLTest_TestCaseReference rectTest1 = |
1583 | { (SDLTest_TestCaseFp)rect_testIntersectRectAndLine,"rect_testIntersectRectAndLine" , "Tests SDL_IntersectRectAndLine clipping cases" , TEST_ENABLED }; |
1584 | |
1585 | static const SDLTest_TestCaseReference rectTest2 = |
1586 | { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineInside, "rect_testIntersectRectAndLineInside" , "Tests SDL_IntersectRectAndLine with line fully contained in rect" , TEST_ENABLED }; |
1587 | |
1588 | static const SDLTest_TestCaseReference rectTest3 = |
1589 | { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineOutside, "rect_testIntersectRectAndLineOutside" , "Tests SDL_IntersectRectAndLine with line fully outside of rect" , TEST_ENABLED }; |
1590 | |
1591 | static const SDLTest_TestCaseReference rectTest4 = |
1592 | { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineEmpty, "rect_testIntersectRectAndLineEmpty" , "Tests SDL_IntersectRectAndLine with empty rectangle " , TEST_ENABLED }; |
1593 | |
1594 | static const SDLTest_TestCaseReference rectTest5 = |
1595 | { (SDLTest_TestCaseFp)rect_testIntersectRectAndLineParam, "rect_testIntersectRectAndLineParam" , "Negative tests against SDL_IntersectRectAndLine with invalid parameters" , TEST_ENABLED }; |
1596 | |
1597 | /* SDL_IntersectRect */ |
1598 | static const SDLTest_TestCaseReference rectTest6 = |
1599 | { (SDLTest_TestCaseFp)rect_testIntersectRectInside, "rect_testIntersectRectInside" , "Tests SDL_IntersectRect with B fully contained in A" , TEST_ENABLED }; |
1600 | |
1601 | static const SDLTest_TestCaseReference rectTest7 = |
1602 | { (SDLTest_TestCaseFp)rect_testIntersectRectOutside, "rect_testIntersectRectOutside" , "Tests SDL_IntersectRect with B fully outside of A" , TEST_ENABLED }; |
1603 | |
1604 | static const SDLTest_TestCaseReference rectTest8 = |
1605 | { (SDLTest_TestCaseFp)rect_testIntersectRectPartial, "rect_testIntersectRectPartial" , "Tests SDL_IntersectRect with B partially intersecting A" , TEST_ENABLED }; |
1606 | |
1607 | static const SDLTest_TestCaseReference rectTest9 = |
1608 | { (SDLTest_TestCaseFp)rect_testIntersectRectPoint, "rect_testIntersectRectPoint" , "Tests SDL_IntersectRect with 1x1 sized rectangles" , TEST_ENABLED }; |
1609 | |
1610 | static const SDLTest_TestCaseReference rectTest10 = |
1611 | { (SDLTest_TestCaseFp)rect_testIntersectRectEmpty, "rect_testIntersectRectEmpty" , "Tests SDL_IntersectRect with empty rectangles" , TEST_ENABLED }; |
1612 | |
1613 | static const SDLTest_TestCaseReference rectTest11 = |
1614 | { (SDLTest_TestCaseFp)rect_testIntersectRectParam, "rect_testIntersectRectParam" , "Negative tests against SDL_IntersectRect with invalid parameters" , TEST_ENABLED }; |
1615 | |
1616 | /* SDL_HasIntersection */ |
1617 | static const SDLTest_TestCaseReference rectTest12 = |
1618 | { (SDLTest_TestCaseFp)rect_testHasIntersectionInside, "rect_testHasIntersectionInside" , "Tests SDL_HasIntersection with B fully contained in A" , TEST_ENABLED }; |
1619 | |
1620 | static const SDLTest_TestCaseReference rectTest13 = |
1621 | { (SDLTest_TestCaseFp)rect_testHasIntersectionOutside, "rect_testHasIntersectionOutside" , "Tests SDL_HasIntersection with B fully outside of A" , TEST_ENABLED }; |
1622 | |
1623 | static const SDLTest_TestCaseReference rectTest14 = |
1624 | { (SDLTest_TestCaseFp)rect_testHasIntersectionPartial,"rect_testHasIntersectionPartial" , "Tests SDL_HasIntersection with B partially intersecting A" , TEST_ENABLED }; |
1625 | |
1626 | static const SDLTest_TestCaseReference rectTest15 = |
1627 | { (SDLTest_TestCaseFp)rect_testHasIntersectionPoint, "rect_testHasIntersectionPoint" , "Tests SDL_HasIntersection with 1x1 sized rectangles" , TEST_ENABLED }; |
1628 | |
1629 | static const SDLTest_TestCaseReference rectTest16 = |
1630 | { (SDLTest_TestCaseFp)rect_testHasIntersectionEmpty, "rect_testHasIntersectionEmpty" , "Tests SDL_HasIntersection with empty rectangles" , TEST_ENABLED }; |
1631 | |
1632 | static const SDLTest_TestCaseReference rectTest17 = |
1633 | { (SDLTest_TestCaseFp)rect_testHasIntersectionParam, "rect_testHasIntersectionParam" , "Negative tests against SDL_HasIntersection with invalid parameters" , TEST_ENABLED }; |
1634 | |
1635 | /* SDL_EnclosePoints */ |
1636 | static const SDLTest_TestCaseReference rectTest18 = |
1637 | { (SDLTest_TestCaseFp)rect_testEnclosePoints, "rect_testEnclosePoints" , "Tests SDL_EnclosePoints without clipping" , TEST_ENABLED }; |
1638 | |
1639 | static const SDLTest_TestCaseReference rectTest19 = |
1640 | { (SDLTest_TestCaseFp)rect_testEnclosePointsWithClipping, "rect_testEnclosePointsWithClipping" , "Tests SDL_EnclosePoints with clipping" , TEST_ENABLED }; |
1641 | |
1642 | static const SDLTest_TestCaseReference rectTest20 = |
1643 | { (SDLTest_TestCaseFp)rect_testEnclosePointsRepeatedInput, "rect_testEnclosePointsRepeatedInput" , "Tests SDL_EnclosePoints with repeated input" , TEST_ENABLED }; |
1644 | |
1645 | static const SDLTest_TestCaseReference rectTest21 = |
1646 | { (SDLTest_TestCaseFp)rect_testEnclosePointsParam, "rect_testEnclosePointsParam" , "Negative tests against SDL_EnclosePoints with invalid parameters" , TEST_ENABLED }; |
1647 | |
1648 | /* SDL_UnionRect */ |
1649 | static const SDLTest_TestCaseReference rectTest22 = |
1650 | { (SDLTest_TestCaseFp)rect_testUnionRectInside, "rect_testUnionRectInside" , "Tests SDL_UnionRect where rect B is inside rect A" , TEST_ENABLED }; |
1651 | |
1652 | static const SDLTest_TestCaseReference rectTest23 = |
1653 | { (SDLTest_TestCaseFp)rect_testUnionRectOutside, "rect_testUnionRectOutside" , "Tests SDL_UnionRect where rect B is outside rect A" , TEST_ENABLED }; |
1654 | |
1655 | static const SDLTest_TestCaseReference rectTest24 = |
1656 | { (SDLTest_TestCaseFp)rect_testUnionRectEmpty, "rect_testUnionRectEmpty" , "Tests SDL_UnionRect where rect A or rect B are empty" , TEST_ENABLED }; |
1657 | |
1658 | static const SDLTest_TestCaseReference rectTest25 = |
1659 | { (SDLTest_TestCaseFp)rect_testUnionRectParam, "rect_testUnionRectParam" , "Negative tests against SDL_UnionRect with invalid parameters" , TEST_ENABLED }; |
1660 | |
1661 | /* SDL_RectEmpty */ |
1662 | static const SDLTest_TestCaseReference rectTest26 = |
1663 | { (SDLTest_TestCaseFp)rect_testRectEmpty, "rect_testRectEmpty" , "Tests SDL_RectEmpty with various inputs" , TEST_ENABLED }; |
1664 | |
1665 | static const SDLTest_TestCaseReference rectTest27 = |
1666 | { (SDLTest_TestCaseFp)rect_testRectEmptyParam, "rect_testRectEmptyParam" , "Negative tests against SDL_RectEmpty with invalid parameters" , TEST_ENABLED }; |
1667 | |
1668 | /* SDL_RectEquals */ |
1669 | |
1670 | static const SDLTest_TestCaseReference rectTest28 = |
1671 | { (SDLTest_TestCaseFp)rect_testRectEquals, "rect_testRectEquals" , "Tests SDL_RectEquals with various inputs" , TEST_ENABLED }; |
1672 | |
1673 | static const SDLTest_TestCaseReference rectTest29 = |
1674 | { (SDLTest_TestCaseFp)rect_testRectEqualsParam, "rect_testRectEqualsParam" , "Negative tests against SDL_RectEquals with invalid parameters" , TEST_ENABLED }; |
1675 | |
1676 | |
1677 | /* ! |
1678 | * \brief Sequence of Rect test cases; functions that handle simple rectangles including overlaps and merges. |
1679 | * |
1680 | * \sa |
1681 | * http://wiki.libsdl.org/CategoryRect |
1682 | */ |
1683 | static const SDLTest_TestCaseReference *rectTests[] = { |
1684 | &rectTest1, &rectTest2, &rectTest3, &rectTest4, &rectTest5, &rectTest6, &rectTest7, &rectTest8, &rectTest9, &rectTest10, &rectTest11, &rectTest12, &rectTest13, &rectTest14, |
1685 | &rectTest15, &rectTest16, &rectTest17, &rectTest18, &rectTest19, &rectTest20, &rectTest21, &rectTest22, &rectTest23, &rectTest24, &rectTest25, &rectTest26, &rectTest27, |
1686 | &rectTest28, &rectTest29, NULL |
1687 | }; |
1688 | |
1689 | |
1690 | /* Rect test suite (global) */ |
1691 | SDLTest_TestSuiteReference rectTestSuite = { |
1692 | "Rect" , |
1693 | NULL, |
1694 | rectTests, |
1695 | NULL |
1696 | }; |
1697 | |