Fix Empty to Empty equals response (#703)
[geos.git] / tests / unit / geom / EnvelopeTest.cpp
blobafa2c926b362f5e74c6ac4ec69eef5455e3c96e6
1 //
2 // Test Suite for geos::geom::Envelope class.
4 // tut
5 #include <tut.hpp>
6 // geos
7 #include <geos/geom/Envelope.h>
8 #include <geos/geom/Coordinate.h>
10 namespace tut
13 // Test Group
16 // dummy data, not used
17 struct test_envelope_data {};
19 typedef test_group<test_envelope_data> group;
20 typedef group::object object;
22 group test_envelope_group("geos::geom::Envelope");
25 // Test Cases
28 // 1 - Test of default constructor
29 template<>
30 template<>
31 void object::test<1>()
33 geos::geom::Envelope empty;
35 ensure( empty.isNull() );
37 ensure_equals( empty.getWidth(), 0 );
38 ensure_equals( empty.getHeight(), 0 );
41 // 2 - Test of overriden constructor
42 template<>
43 template<>
44 void object::test<2>()
46 geos::geom::Envelope box(0, 100, 0, 100);
48 ensure( !box.isNull() );
50 ensure_equals( box.getMinX(), 0 );
51 ensure_equals( box.getMaxX(), 100 );
52 ensure_equals( box.getMinY(), 0 );
53 ensure_equals( box.getMaxY(), 100 );
55 ensure_equals( box.getMinX(), box.getMinY() );
56 ensure_equals( box.getMaxX(), box.getMaxY() );
58 ensure_equals( box.getWidth(), box.getHeight() );
61 // 3 - Test of copy constructor
62 template<>
63 template<>
64 void object::test<3>()
66 geos::geom::Envelope box(0, 100, 0, 100);
68 ensure( !box.isNull() );
69 ensure_equals( box.getWidth(), box.getHeight() );
71 geos::geom::Envelope copied(box);
73 ensure( !copied.isNull() );
74 ensure( copied == box );
75 ensure_equals( copied.getWidth(), copied.getHeight() );
78 // 4 - Test of setToNull()
79 template<>
80 template<>
81 void object::test<4>()
83 geos::geom::Envelope e(100, 200, 100, 200);
85 ensure( !e.isNull() );
86 e.setToNull();
87 ensure( e.isNull() );
90 // 5 - Test of equals()
91 template<>
92 template<>
93 void object::test<5>()
95 geos::geom::Envelope empty;
96 geos::geom::Envelope zero(0, 0, 0, 0);
97 geos::geom::Envelope zero2(0, 0, 0, 0);
98 geos::geom::Envelope box(0, 100, 0, 100);
100 ensure( empty.isNull() );
101 ensure( !zero.isNull() );
102 ensure( !zero2.isNull() );
103 ensure( !box.isNull() );
105 /* See http://trac.osgeo.org/geos/ticket/703 */
106 ensure( empty.equals( &empty ) );
108 ensure( !empty.equals( &zero ) );
109 ensure( !zero.equals( &empty ) );
111 ensure( zero.equals( &zero2 ) );
112 ensure( zero2.equals( &zero ) );
114 ensure( !box.equals( &empty ) );
115 ensure( !box.equals( &zero ) );
118 // 6 - Test of contains()
119 template<>
120 template<>
121 void object::test<6>()
123 geos::geom::Envelope empty;
124 geos::geom::Envelope small(-1, 1, -1, 1);
125 geos::geom::Envelope big(-5, 5, -5, 5);
127 ensure( empty.isNull() );
128 ensure( !small.isNull() );
129 ensure( !big.isNull() );
131 // Test empty envelope by reference
132 ensure( "empty envelope is not empty!", !empty.contains( small ) );
133 ensure( "empty envelope is not empty!", !small.contains( empty ) );
135 // Test empty envelope by pointer
136 ensure( "empty envelope is not empty!", !empty.contains( &small ) );
137 ensure( "empty envelope is not empty!", !small.contains( &empty ) );
139 // Test non-empty envelope by reference
140 ensure( !small.contains( big ) );
141 ensure( big.contains( small ) );
143 // Test raw point
144 ensure( small.contains( 0, 0 ) );
145 ensure( small.contains( -1, -1 ) );
146 ensure( !small.contains( 5, 5 ) );
148 // Test coordinate
149 geos::geom::Coordinate origin(0, 0, 0);
151 ensure_equals( origin.x, 0 );
152 ensure_equals( origin.y, 0 );
153 ensure_equals( origin.z, 0 );
154 ensure( small.contains( origin ) );
157 // Test of intersects()
158 template<>
159 template<>
160 void object::test<7>()
162 geos::geom::Envelope empty;
163 geos::geom::Envelope with_origin(-100, 100, -100, 100);
164 geos::geom::Envelope moved(50, 150, 50, 150);
166 ensure( empty.isNull() );
167 ensure( !with_origin.isNull() );
168 ensure( !moved.isNull() );
170 // Test empty envelope by reference
171 ensure( "empty envelope seems not empty!", !empty.intersects( with_origin ) );
172 ensure( "empty envelope seems not empty!", !with_origin.intersects( empty ) );
174 // Test empty envelope by pointer
175 ensure( "empty envelope seems not empty!", !empty.intersects( &with_origin ) );
176 ensure( "empty envelope seems not empty!", !with_origin.intersects( &empty ) );
178 // Test non-empty envelope by reference
179 ensure( with_origin.intersects( moved ) );
180 ensure( moved.intersects( with_origin ) );
182 // Test intersection with raw point
183 ensure( with_origin.intersects( 0, 0 ) );
184 ensure( with_origin.intersects( -100, 100 ) );
185 ensure( !with_origin.intersects( -200, 200 ) );
187 // Test intersection with coordinate
188 geos::geom::Coordinate origin(0, 0, 0);
190 ensure_equals( origin.x, 0 );
191 ensure_equals( origin.y, 0 );
192 ensure_equals( origin.z, 0 );
193 ensure( with_origin.intersects( origin ) );
197 // Test of expand()
198 template<>
199 template<>
200 void object::test<8>()
202 geos::geom::Envelope empty;
203 geos::geom::Envelope box(-5, 5, -5, 5); // Includes (0,0) point
204 const geos::geom::Envelope exemplar(-5, 5, -5, 5);
206 ensure( empty.isNull() );
207 ensure( !box.isNull() );
208 ensure( !exemplar.isNull() );
210 // Expand box envelope to include null envelope
211 box.expandToInclude(&empty);
212 ensure( box == exemplar ); // no change expected
214 // Expand null envelope to include box envelope
215 empty.expandToInclude(&box);
216 ensure( empty == exemplar );
219 // Second test of expand()
220 template<>
221 template<>
222 void object::test<9>()
224 geos::geom::Envelope empty;
225 geos::geom::Envelope box(100, 101, 100, 101); // Does not include (0,0) point
226 const geos::geom::Envelope exemplar(100, 101, 100, 101);
228 // Expand box envelope to include null envelope
229 box.expandToInclude(&empty);
230 ensure( box == exemplar ); // no change expected
232 // Expand empty envelope to include bigger envelope
233 empty.expandToInclude(&box);
234 ensure( empty == exemplar );
237 } // namespace tut