2011-06-01 18:03:09 -07:00
|
|
|
/**
|
|
|
|
* Original code: automated SDL rect test written by Edgar Simo "bobbens"
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
|
|
#include <SDL/SDL.h>
|
|
|
|
|
2011-08-06 17:35:58 +03:00
|
|
|
#include "../../include/SDL_test.h"
|
2011-06-01 18:03:09 -07:00
|
|
|
|
|
|
|
/* Test cases */
|
|
|
|
static const TestCaseReference test1 =
|
2011-06-11 21:37:28 +03:00
|
|
|
(TestCaseReference){ "rect_testIntersectRectAndLine", "description", TEST_ENABLED, 0, 0 };
|
2011-06-01 18:03:09 -07:00
|
|
|
|
2011-07-24 18:21:53 +03:00
|
|
|
|
2011-06-01 18:03:09 -07:00
|
|
|
/* Test suite */
|
|
|
|
extern const TestCaseReference *testSuite[] = {
|
2011-08-06 19:49:37 +03:00
|
|
|
&test1, NULL
|
2011-06-01 18:03:09 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
TestCaseReference **QueryTestSuite() {
|
|
|
|
return (TestCaseReference **)testSuite;
|
|
|
|
}
|
|
|
|
|
2011-06-04 17:50:23 +03:00
|
|
|
/*!
|
|
|
|
* \brief Tests SDL_IntersectRectAndLine()
|
2011-07-24 18:21:53 +03:00
|
|
|
*
|
|
|
|
* \sa
|
|
|
|
* http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine
|
2011-06-01 18:03:09 -07:00
|
|
|
*/
|
|
|
|
int rect_testIntersectRectAndLine (void *arg)
|
|
|
|
{
|
|
|
|
SDL_Rect rect = { 0, 0, 32, 32 };
|
|
|
|
int x1, y1;
|
|
|
|
int x2, y2;
|
|
|
|
SDL_bool clipped;
|
|
|
|
|
|
|
|
x1 = -10;
|
|
|
|
y1 = 0;
|
|
|
|
x2 = -10;
|
|
|
|
y2 = 31;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( !clipped &&
|
|
|
|
x1 == -10 && y1 == 0 && x2 == -10 && y2 == 31,
|
|
|
|
"line outside to the left was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = 40;
|
|
|
|
y1 = 0;
|
|
|
|
x2 = 40;
|
|
|
|
y2 = 31;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( !clipped &&
|
|
|
|
x1 == 40 && y1 == 0 && x2 == 40 && y2 == 31,
|
|
|
|
"line outside to the right was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = 0;
|
|
|
|
y1 = -10;
|
|
|
|
x2 = 31;
|
|
|
|
y2 = -10;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( !clipped &&
|
|
|
|
x1 == 0 && y1 == -10 && x2 == 31 && y2 == -10,
|
|
|
|
"line outside above was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = 0;
|
|
|
|
y1 = 40;
|
|
|
|
x2 = 31;
|
|
|
|
y2 = 40;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( !clipped &&
|
|
|
|
x1 == 0 && y1 == 40 && x2 == 31 && y2 == 40,
|
|
|
|
"line outside below was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = 0;
|
|
|
|
y1 = 0;
|
|
|
|
x2 = 31;
|
|
|
|
y2 = 31;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( clipped &&
|
|
|
|
x1 == 0 && y1 == 0 && x2 == 31 && y2 == 31,
|
|
|
|
"line fully inside rect was clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = -10;
|
|
|
|
y1 = 15;
|
|
|
|
x2 = 40;
|
|
|
|
y2 = 15;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( clipped &&
|
|
|
|
x1 == 0 && y1 == 15 && x2 == 31 && y2 == 15,
|
|
|
|
"horizontal line rect was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = -32;
|
|
|
|
y1 = -32;
|
|
|
|
x2 = 63;
|
|
|
|
y2 = 63;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( clipped &&
|
|
|
|
x1 == 0 && y1 == 0 && x2 == 31 && y2 == 31,
|
|
|
|
"diagonal line to lower right was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = 63;
|
|
|
|
y1 = 63;
|
|
|
|
x2 = -32;
|
|
|
|
y2 = -32;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( clipped &&
|
|
|
|
x1 == 31 && y1 == 31 && x2 == 0 && y2 == 0,
|
|
|
|
"diagonal line to upper left was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = 63;
|
|
|
|
y1 = -32;
|
|
|
|
x2 = -32;
|
|
|
|
y2 = 63;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( clipped &&
|
|
|
|
x1 == 31 && y1 == 0 && x2 == 0 && y2 == 31,
|
|
|
|
"diagonal line to lower left was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
|
|
|
|
x1 = -32;
|
|
|
|
y1 = 63;
|
|
|
|
x2 = 63;
|
|
|
|
y2 = -32;
|
|
|
|
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
|
|
|
|
AssertTrue( clipped &&
|
|
|
|
x1 == 0 && y1 == 31 && x2 == 31 && y2 == 0,
|
|
|
|
"diagonal line to upper right was incorrectly clipped: %d,%d - %d,%d",
|
|
|
|
x1, y1, x2, y2);
|
|
|
|
}
|