$Id: RegionInclude.cpp 4235 2003-08-06 06:46:06Z jackburton $
This file implements the include test for the Haiku BRegion
code.
*/
#include "RegionInclude.h"
#include <Region.h>
#include <Rect.h>
#include <assert.h>
* Method: RegionInclude::RegionInclude()
* Descr: This is the constructor for this class.
*/
RegionInclude::RegionInclude(std::string name) :
RegionTestcase(name)
{
}
* Method: RegionInclude::~RegionInclude()
* Descr: This is the destructor for this class.
*/
RegionInclude::~RegionInclude()
{
}
* Method: RegionExclude::CheckInclude()
* Descr: This member function checks that the result region is in fact
* region A with region B included.
*/
void RegionInclude::CheckInclude(BRegion *resultRegion, BRegion *testRegionA,
BRegion *testRegionB)
{
bool resultRegionEmpty = RegionIsEmpty(resultRegion);
bool testRegionAEmpty = RegionIsEmpty(testRegionA);
bool testRegionBEmpty = RegionIsEmpty(testRegionB);
if (RegionsAreEqual(testRegionA, testRegionB)) {
assert(RegionsAreEqual(resultRegion, testRegionA));
}
if (RegionsAreEqual(resultRegion, testRegionA)) {
BRegion tempRegion(*testRegionA);
tempRegion.IntersectWith(testRegionB);
assert(RegionsAreEqual(&tempRegion, testRegionB));
}
if (RegionsAreEqual(resultRegion, testRegionB)) {
BRegion tempRegion(*testRegionA);
tempRegion.IntersectWith(testRegionB);
assert(RegionsAreEqual(&tempRegion, testRegionA));
}
if ((!resultRegionEmpty) && (!testRegionAEmpty) && (!testRegionBEmpty)) {
BRect resultRegionFrame(resultRegion->Frame());
BRect testRegionAFrame(testRegionA->Frame());
BRect testRegionBFrame(testRegionB->Frame());
assert(resultRegionFrame == (testRegionAFrame | testRegionBFrame));
}
if (testRegionBEmpty) {
assert(RegionsAreEqual(resultRegion, testRegionA));
} else {
for(int i = 0; i < testRegionB->CountRects(); i++) {
BRect tempRect = testRegionB->RectAt(i);
assert(testRegionB->Intersects(tempRect));
assert(resultRegion->Intersects(tempRect));
BPoint *pointArray;
int numPoints = GetPointsInRect(tempRect, &pointArray);
for (int j = 0; j < numPoints; j++) {
assert(testRegionB->Contains(pointArray[j]));
assert(resultRegion->Contains(pointArray[j]));
}
}
}
if (testRegionAEmpty) {
assert(RegionsAreEqual(resultRegion, testRegionB));
} else {
for(int i = 0; i < testRegionA->CountRects(); i++) {
BRect tempRect = testRegionA->RectAt(i);
assert(testRegionA->Intersects(tempRect));
assert(resultRegion->Intersects(tempRect));
BPoint *pointArray;
int numPoints = GetPointsInRect(tempRect, &pointArray);
for (int j = 0; j < numPoints; j++) {
assert(testRegionA->Contains(pointArray[j]));
assert(resultRegion->Contains(pointArray[j]));
}
}
}
if (resultRegionEmpty) {
assert(testRegionAEmpty);
assert(testRegionBEmpty);
} else {
for(int i = 0; i < resultRegion->CountRects(); i++) {
BRect tempRect = resultRegion->RectAt(i);
assert(resultRegion->Intersects(tempRect));
assert((testRegionA->Intersects(tempRect)) ||
(testRegionB->Intersects(tempRect)));
BPoint *pointArray;
int numPoints = GetPointsInRect(tempRect, &pointArray);
for (int j = 0; j < numPoints; j++) {
assert(resultRegion->Contains(pointArray[j]));
assert((testRegionA->Contains(pointArray[j])) ||
(testRegionB->Contains(pointArray[j])));
}
}
}
}
* Method: RegionInclude::testOneRegion()
* Descr: This member function performs a test on a single passed in
* region.
*/
void RegionInclude::testOneRegion(BRegion *testRegion)
{
}
* Method: RegionInclude::testTwoRegions()
* Descr: This member function performs a test on two regions passed in.
*/
void RegionInclude::testTwoRegions(BRegion *testRegionA, BRegion *testRegionB)
{
BRegion tempRegion1(*testRegionA);
CheckFrame(&tempRegion1);
assert(RegionsAreEqual(&tempRegion1, testRegionA));
tempRegion1.Include(testRegionB);
CheckFrame(&tempRegion1);
CheckInclude(&tempRegion1, testRegionA, testRegionB);
tempRegion1 = *testRegionA;
CheckFrame(&tempRegion1);
assert(RegionsAreEqual(&tempRegion1, testRegionA));
for(int i = 0; i < testRegionB->CountRects(); i++) {
tempRegion1.Include(testRegionB->RectAt(i));
CheckFrame(&tempRegion1);
}
CheckInclude(&tempRegion1, testRegionA, testRegionB);
}
* Method: RegionInclude::suite()
* Descr: This static member function returns a test caller for performing
* all combinations of "RegionInclude".
*/
Test *RegionInclude::suite(void)
{
typedef CppUnit::TestCaller<RegionInclude>
RegionIncludeCaller;
return(new RegionIncludeCaller("BRegion::Include Test", &RegionInclude::PerformTest));
}