xref: /haiku/src/tests/kits/interface/bregion/RegionInclude.cpp (revision c237c4ce593ee823d9867fd997e51e4c447f5623)
1 /*
2 	$Id: RegionInclude.cpp 4235 2003-08-06 06:46:06Z jackburton $
3 
4 	This file implements the include test for the Haiku BRegion
5 	code.
6 
7 	*/
8 
9 
10 #include "RegionInclude.h"
11 #include <Region.h>
12 #include <Rect.h>
13 
14 #include <assert.h>
15 
16 
17 /*
18  *  Method:  RegionInclude::RegionInclude()
19  *   Descr:  This is the constructor for this class.
20  */
21 
22 RegionInclude::RegionInclude(std::string name) :
23 	RegionTestcase(name)
24 {
25 	}
26 
27 
28 /*
29  *  Method:  RegionInclude::~RegionInclude()
30  *   Descr:  This is the destructor for this class.
31  */
32 
33 RegionInclude::~RegionInclude()
34 {
35 	}
36 
37 
38 /*
39  *  Method:  RegionExclude::CheckInclude()
40  *   Descr:  This member function checks that the result region is in fact
41  *           region A with region B included.
42  */
43 
44 void RegionInclude::CheckInclude(BRegion *resultRegion, BRegion *testRegionA,
45                                  BRegion *testRegionB)
46 {
47 	bool resultRegionEmpty = RegionIsEmpty(resultRegion);
48 	bool testRegionAEmpty = RegionIsEmpty(testRegionA);
49 	bool testRegionBEmpty = RegionIsEmpty(testRegionB);
50 
51 	if (RegionsAreEqual(testRegionA, testRegionB)) {
52 		assert(RegionsAreEqual(resultRegion, testRegionA));
53 	}
54 
55 	if (RegionsAreEqual(resultRegion, testRegionA)) {
56 		BRegion tempRegion(*testRegionA);
57 		tempRegion.IntersectWith(testRegionB);
58 		assert(RegionsAreEqual(&tempRegion, testRegionB));
59 	}
60 
61 	if (RegionsAreEqual(resultRegion, testRegionB)) {
62 		BRegion tempRegion(*testRegionA);
63 		tempRegion.IntersectWith(testRegionB);
64 		assert(RegionsAreEqual(&tempRegion, testRegionA));
65 	}
66 
67 	if ((!resultRegionEmpty) && (!testRegionAEmpty) && (!testRegionBEmpty)) {
68 		BRect resultRegionFrame(resultRegion->Frame());
69 		BRect testRegionAFrame(testRegionA->Frame());
70 		BRect testRegionBFrame(testRegionB->Frame());
71 
72 		assert(resultRegionFrame == (testRegionAFrame | testRegionBFrame));
73 	}
74 
75 	if (testRegionBEmpty) {
76 		assert(RegionsAreEqual(resultRegion, testRegionA));
77 	} else {
78 		for(int i = 0; i < testRegionB->CountRects(); i++) {
79 			BRect tempRect = testRegionB->RectAt(i);
80 
81 			assert(testRegionB->Intersects(tempRect));
82 			assert(resultRegion->Intersects(tempRect));
83 
84 			BPoint *pointArray;
85 			int numPoints = GetPointsInRect(tempRect, &pointArray);
86 			for (int j = 0; j < numPoints; j++) {
87 				assert(testRegionB->Contains(pointArray[j]));
88 				assert(resultRegion->Contains(pointArray[j]));
89 			}
90 		}
91 	}
92 
93 	if (testRegionAEmpty) {
94 		assert(RegionsAreEqual(resultRegion, testRegionB));
95 	} else {
96 		for(int i = 0; i < testRegionA->CountRects(); i++) {
97 			BRect tempRect = testRegionA->RectAt(i);
98 
99 			assert(testRegionA->Intersects(tempRect));
100 			assert(resultRegion->Intersects(tempRect));
101 
102 			BPoint *pointArray;
103 			int numPoints = GetPointsInRect(tempRect, &pointArray);
104 			for (int j = 0; j < numPoints; j++) {
105 				assert(testRegionA->Contains(pointArray[j]));
106 				assert(resultRegion->Contains(pointArray[j]));
107 			}
108 		}
109 	}
110 
111 	if (resultRegionEmpty) {
112 		assert(testRegionAEmpty);
113 		assert(testRegionBEmpty);
114 	} else {
115 		for(int i = 0; i < resultRegion->CountRects(); i++) {
116 			BRect tempRect = resultRegion->RectAt(i);
117 
118 			assert(resultRegion->Intersects(tempRect));
119 			assert((testRegionA->Intersects(tempRect)) ||
120 			       (testRegionB->Intersects(tempRect)));
121 
122 			BPoint *pointArray;
123 			int numPoints = GetPointsInRect(tempRect, &pointArray);
124 			for (int j = 0; j < numPoints; j++) {
125 				assert(resultRegion->Contains(pointArray[j]));
126 				assert((testRegionA->Contains(pointArray[j])) ||
127 				       (testRegionB->Contains(pointArray[j])));
128 			}
129 		}
130 	}
131 }
132 
133 
134 /*
135  *  Method:  RegionInclude::testOneRegion()
136  *   Descr:  This member function performs a test on a single passed in
137  *           region.
138  */
139 
140 void RegionInclude::testOneRegion(BRegion *testRegion)
141 {
142 
143 }
144 
145 
146 /*
147  *  Method:  RegionInclude::testTwoRegions()
148  *   Descr:  This member function performs a test on two regions passed in.
149  */
150 
151 void RegionInclude::testTwoRegions(BRegion *testRegionA, BRegion *testRegionB)
152 {
153 	BRegion tempRegion1(*testRegionA);
154 	CheckFrame(&tempRegion1);
155 	assert(RegionsAreEqual(&tempRegion1, testRegionA));
156 
157 	tempRegion1.Include(testRegionB);
158 	CheckFrame(&tempRegion1);
159 	CheckInclude(&tempRegion1, testRegionA, testRegionB);
160 
161 	tempRegion1 = *testRegionA;
162 	CheckFrame(&tempRegion1);
163 	assert(RegionsAreEqual(&tempRegion1, testRegionA));
164 
165 	for(int i = 0; i < testRegionB->CountRects(); i++) {
166 		tempRegion1.Include(testRegionB->RectAt(i));
167 		CheckFrame(&tempRegion1);
168 	}
169 	CheckInclude(&tempRegion1, testRegionA, testRegionB);
170 }
171 
172 
173 /*
174  *  Method:  RegionInclude::suite()
175  *   Descr:  This static member function returns a test caller for performing
176  *           all combinations of "RegionInclude".
177  */
178 
179  Test *RegionInclude::suite(void)
180 {
181 	typedef CppUnit::TestCaller<RegionInclude>
182 		RegionIncludeCaller;
183 
184 	return(new RegionIncludeCaller("BRegion::Include Test", &RegionInclude::PerformTest));
185 	}
186