Scroom  0.14
rectangletests.cc File Reference
#include <boost/mpl/list.hpp>
#include <boost/test/unit_test.hpp>
#include <scroom/gtk-helpers.hh>
#include <scroom/linearsegment.hh>
#include <scroom/rectangle.hh>
Include dependency graph for rectangletests.cc:

Classes

class  RectangleHorizontalTestScaffold
 
class  RectangleVerticalTestScaffold
 

Typedefs

using test_types = boost::mpl::list< Segment< int >, RectangleHorizontalTestScaffold, RectangleVerticalTestScaffold >
 

Functions

template<class Scaffold >
void containedSegmentEqualsIntersection (const Scaffold &container, const Scaffold &contained)
 
template<class Scaffold >
void intersectsImpliesNonEmptyIntersection (const Scaffold &a, const Scaffold &b)
 
 BOOST_AUTO_TEST_CASE_TEMPLATE (testCreateSegment, Scaffold, test_types)
 
 BOOST_AUTO_TEST_CASE_TEMPLATE (testMoveTo, Scaffold, test_types)
 
 BOOST_AUTO_TEST_CASE_TEMPLATE (testReduceSizeToMultipleOf, Scaffold, test_types)
 
 BOOST_AUTO_TEST_CASE_TEMPLATE (testContainsPoint, Scaffold, test_types)
 
 BOOST_AUTO_TEST_CASE_TEMPLATE (testContainsSegment, Scaffold, test_types)
 
 BOOST_AUTO_TEST_CASE_TEMPLATE (testIntersects, Scaffold, test_types)
 
 BOOST_AUTO_TEST_CASE_TEMPLATE (testIntersection, Scaffold, test_types)
 
 BOOST_AUTO_TEST_CASE (testRetrievingHorizontallyAndVertically)
 
 BOOST_AUTO_TEST_CASE (testConversionToAndFromGdkRectangle)
 
 BOOST_AUTO_TEST_CASE (testCorners)
 
 BOOST_AUTO_TEST_CASE (testMath)
 
 BOOST_AUTO_TEST_CASE (testCuts)
 
 BOOST_AUTO_TEST_CASE (testPlus)
 
 BOOST_AUTO_TEST_CASE (testMinus)
 
 BOOST_AUTO_TEST_CASE (testMultiply)
 
 BOOST_AUTO_TEST_CASE (testAnd)
 

Typedef Documentation

◆ test_types

Function Documentation

◆ BOOST_AUTO_TEST_CASE() [1/9]

BOOST_AUTO_TEST_CASE ( testAnd  )
402 {
403  Segment<int> const left(1, 4);
404  Segment<int> const right(3, 7);
405  Segment<int> const result = left & right;
406  Segment<int> const expected(3, 2);
407  BOOST_CHECK_EQUAL(expected, result);
408 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [2/9]

BOOST_AUTO_TEST_CASE ( testConversionToAndFromGdkRectangle  )
322 {
323  const cairo_rectangle_int_t original = Scroom::GtkHelpers::createCairoIntRectangle(1, 2, 3, 4);
324  const auto rect = Rectangle<int>(original);
325  BOOST_CHECK_EQUAL(make_rect(1, 2, 3, 4), rect);
326 
327  const GdkRectangle grect = rect.toGdkRectangle();
328  BOOST_CHECK_EQUAL(original, grect);
329 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [3/9]

BOOST_AUTO_TEST_CASE ( testCorners  )
332 {
333  const Rectangle<int> rect(1, 2, 3, 4);
334  BOOST_CHECK_EQUAL(make_point(1, 2), rect.getTopLeft());
335  BOOST_CHECK_EQUAL(make_point(4, 2), rect.getTopRight());
336  BOOST_CHECK_EQUAL(make_point(1, 6), rect.getBottomLeft());
337  BOOST_CHECK_EQUAL(make_point(4, 6), rect.getBottomRight());
338 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [4/9]

BOOST_AUTO_TEST_CASE ( testCuts  )
357 {
358  const Rectangle<int> original(10, 20, 30, 40);
359 
360  BOOST_CHECK(original.leftOf(5).isEmpty());
361  BOOST_CHECK_EQUAL(original, original.leftOf(40));
362  BOOST_CHECK_EQUAL(Rectangle<int>(10, 20, 10, 40), original.leftOf(20));
363 
364  BOOST_CHECK(original.rightOf(40).isEmpty());
365  BOOST_CHECK_EQUAL(original, original.rightOf(5));
366  BOOST_CHECK_EQUAL(Rectangle<int>(20, 20, 20, 40), original.rightOf(20));
367 
368  BOOST_CHECK(original.above(5).isEmpty());
369  BOOST_CHECK_EQUAL(original, original.above(60));
370  BOOST_CHECK_EQUAL(Rectangle<int>(10, 20, 30, 20), original.above(40));
371 
372  BOOST_CHECK(original.below(60).isEmpty());
373  BOOST_CHECK_EQUAL(original, original.below(20));
374  BOOST_CHECK_EQUAL(Rectangle<int>(10, 40, 30, 20), original.below(40));
375 
376  BOOST_CHECK_EQUAL(Rectangle<int>(10, 30, 5, 5), original.leftOf(Rectangle<int>(15, 30, 10, 5)));
377  BOOST_CHECK_EQUAL(Rectangle<int>(10, 20, 10, 40), original.above(Rectangle<int>(0, 100, 20, 10)));
378 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [5/9]

BOOST_AUTO_TEST_CASE ( testMath  )
341 {
342  BOOST_CHECK_EQUAL(make_point(4, 6), make_point(1, 2) + make_point(3, 4));
343  BOOST_CHECK_EQUAL(make_point(4, 6) - make_point(1, 2), make_point(3, 4));
344  BOOST_CHECK_EQUAL(make_point(2, 4), make_point(1, 2) * 2);
345 
346  BOOST_CHECK_EQUAL(make_rect(6, 8, 3, 4), make_point(5, 6) + make_rect(1, 2, 3, 4));
347  BOOST_CHECK_EQUAL(make_rect(6, 8, 3, 4) - make_point(5, 6), make_rect(1, 2, 3, 4));
348 
349  auto result = 0.5 * make_rect(1, 3, 5, 7);
350  BOOST_CHECK_CLOSE(0.5, result.getLeft(), 1e-6);
351  BOOST_CHECK_CLOSE(2.5, result.getWidth(), 1e-6);
352  BOOST_CHECK_CLOSE(1.5, result.getTop(), 1e-6);
353  BOOST_CHECK_CLOSE(3.5, result.getHeight(), 1e-6);
354 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [6/9]

BOOST_AUTO_TEST_CASE ( testMinus  )
388 {
389  Segment<int> const result = make_segment(7, 3) - 10;
390  Segment<int> const expected(-3, 3);
391  BOOST_CHECK_EQUAL(expected, result);
392 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [7/9]

BOOST_AUTO_TEST_CASE ( testMultiply  )
395 {
396  Segment<int> const result = make_segment(7, 3) * 5;
397  Segment<int> const expected(35, 15);
398  BOOST_CHECK_EQUAL(expected, result);
399 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [8/9]

BOOST_AUTO_TEST_CASE ( testPlus  )
381 {
382  Segment<int> const result = 5 + make_segment(7, 3);
383  Segment<int> const expected(12, 3);
384  BOOST_CHECK_EQUAL(expected, result);
385 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE() [9/9]

BOOST_AUTO_TEST_CASE ( testRetrievingHorizontallyAndVertically  )
314 {
315  const Rectangle<int> r(1, 2, 3, 4);
316 
317  BOOST_CHECK_EQUAL(make_segment(1, 3), r.getHorizontally());
318  BOOST_CHECK_EQUAL(make_segment(2, 4), r.getVertically());
319 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE_TEMPLATE() [1/7]

BOOST_AUTO_TEST_CASE_TEMPLATE ( testContainsPoint  ,
Scaffold  ,
test_types   
)
187 {
188  Scaffold s1;
189  Scaffold s2(2, 5);
190 
191  BOOST_CHECK(!s1.contains(0));
192  BOOST_CHECK(!s2.contains(0));
193  BOOST_CHECK(s2.contains(2));
194  BOOST_CHECK(s2.contains(6));
195  BOOST_CHECK(!s2.contains(7));
196  BOOST_CHECK(!s2.contains(8));
197 }

◆ BOOST_AUTO_TEST_CASE_TEMPLATE() [2/7]

BOOST_AUTO_TEST_CASE_TEMPLATE ( testContainsSegment  ,
Scaffold  ,
test_types   
)
200 {
201  Scaffold s1;
202  Scaffold s2(-1, 3);
203  Scaffold s3(-3, 2);
204  Scaffold s4(-2, 2);
205  Scaffold s5(-1, 2);
206  Scaffold s6(0, 2);
207  Scaffold s7(1, 2);
208  Scaffold s8(2, 2);
209 
210  BOOST_CHECK(!s1.contains(s2));
212  BOOST_CHECK(!s1.contains(s3));
214  BOOST_CHECK(!s1.contains(s4));
216  BOOST_CHECK(!s1.contains(s5));
218  BOOST_CHECK(!s1.contains(s6));
220  BOOST_CHECK(!s1.contains(s7));
222  BOOST_CHECK(!s1.contains(s8));
224 
225  BOOST_CHECK(s2.contains(s1));
227  BOOST_CHECK(!s2.contains(s3));
229  BOOST_CHECK(!s2.contains(s4));
231  BOOST_CHECK(s2.contains(s5));
233  BOOST_CHECK(s2.contains(s6));
235  BOOST_CHECK(!s2.contains(s7));
237  BOOST_CHECK(!s2.contains(s8));
239 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE_TEMPLATE() [3/7]

BOOST_AUTO_TEST_CASE_TEMPLATE ( testCreateSegment  ,
Scaffold  ,
test_types   
)
128 {
129  Scaffold s1;
130  Scaffold s2(2, 5);
131  Scaffold s3;
132  Scaffold s4(2, 5);
133  Scaffold s5(3, 5);
134  Scaffold s6(2, 6);
135  Scaffold s7(7, -5);
136 
137  BOOST_CHECK(s1.isEmpty());
138  BOOST_CHECK_EQUAL(0, s1.getSize());
139 
140  BOOST_CHECK(!s2.isEmpty());
141  BOOST_CHECK(s3.isEmpty());
142  BOOST_CHECK(!s4.isEmpty());
143  BOOST_CHECK(!s5.isEmpty());
144  BOOST_CHECK(!s6.isEmpty());
145 
146  BOOST_CHECK_EQUAL(2, s2.getStart());
147  BOOST_CHECK_EQUAL(5, s2.getSize());
148  BOOST_CHECK_EQUAL(7, s2.getEnd());
149  BOOST_CHECK(s1 == s3);
150  BOOST_CHECK(s2 == s4);
151  BOOST_CHECK(s1 != s2);
152  BOOST_CHECK(s2 != s5);
153  BOOST_CHECK(s2 != s6);
154 
155  BOOST_CHECK_EQUAL(2, s7.getStart());
156  BOOST_CHECK_EQUAL(5, s7.getSize());
157  BOOST_CHECK_EQUAL(7, s7.getEnd());
158  BOOST_CHECK_EQUAL(s2, s7);
159 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE_TEMPLATE() [4/7]

BOOST_AUTO_TEST_CASE_TEMPLATE ( testIntersection  ,
Scaffold  ,
test_types   
)
284 {
285  Scaffold s1;
286  Scaffold s2(-1, 3);
287  Scaffold s3(-3, 2);
288  Scaffold s4(-2, 2);
289  Scaffold s5(-1, 2);
290  Scaffold s6(0, 2);
291  Scaffold s7(1, 2);
292  Scaffold s8(2, 2);
293 
294  BOOST_CHECK(s1.intersection(s2).isEmpty());
295  BOOST_CHECK(s1.intersection(s3).isEmpty());
296  BOOST_CHECK(s1.intersection(s4).isEmpty());
297  BOOST_CHECK(s1.intersection(s5).isEmpty());
298  BOOST_CHECK(s1.intersection(s6).isEmpty());
299  BOOST_CHECK(s1.intersection(s7).isEmpty());
300  BOOST_CHECK(s1.intersection(s8).isEmpty());
301 
302  BOOST_CHECK(s2.intersection(s1).isEmpty());
303  BOOST_CHECK(s2.intersection(s3).isEmpty());
304  BOOST_CHECK_EQUAL(Scaffold(-1, 1), s2.intersection(s4));
305  BOOST_CHECK_EQUAL(s5, s2.intersection(s5));
306  BOOST_CHECK_EQUAL(s6, s2.intersection(s6));
307  BOOST_CHECK_EQUAL(Scaffold(1, 1), s2.intersection(s7));
308  BOOST_CHECK(s2.intersection(s8).isEmpty());
309 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE_TEMPLATE() [5/7]

BOOST_AUTO_TEST_CASE_TEMPLATE ( testIntersects  ,
Scaffold  ,
test_types   
)
242 {
243  Scaffold s1;
244  Scaffold s2(-1, 3);
245  Scaffold s3(-3, 2);
246  Scaffold s4(-2, 2);
247  Scaffold s5(-1, 2);
248  Scaffold s6(0, 2);
249  Scaffold s7(1, 2);
250  Scaffold s8(2, 2);
251 
252  BOOST_CHECK(!s1.intersects(s2));
254  BOOST_CHECK(!s1.intersects(s3));
256  BOOST_CHECK(!s1.intersects(s4));
258  BOOST_CHECK(!s1.intersects(s5));
260  BOOST_CHECK(!s1.intersects(s6));
262  BOOST_CHECK(!s1.intersects(s7));
264  BOOST_CHECK(!s1.intersects(s8));
266 
267  BOOST_CHECK(!s2.intersects(s1));
269  BOOST_CHECK(!s2.intersects(s3));
271  BOOST_CHECK(s2.intersects(s4));
273  BOOST_CHECK(s2.intersects(s5));
275  BOOST_CHECK(s2.intersects(s6));
277  BOOST_CHECK(s2.intersects(s7));
279  BOOST_CHECK(!s2.intersects(s8));
281 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE_TEMPLATE() [6/7]

BOOST_AUTO_TEST_CASE_TEMPLATE ( testMoveTo  ,
Scaffold  ,
test_types   
)
162 {
163  Scaffold orig(2, 5);
164  Scaffold s = orig.moveTo(5);
165 
166  BOOST_CHECK(!s.isEmpty());
167 
168  BOOST_CHECK_EQUAL(5, s.getStart());
169  BOOST_CHECK_EQUAL(5, s.getSize());
170  BOOST_CHECK_EQUAL(10, s.getEnd());
171 }
Here is the call graph for this function:

◆ BOOST_AUTO_TEST_CASE_TEMPLATE() [7/7]

BOOST_AUTO_TEST_CASE_TEMPLATE ( testReduceSizeToMultipleOf  ,
Scaffold  ,
test_types   
)
174 {
175  Scaffold s(2, 10);
176 
177  s.reduceSizeToMultipleOf(5);
178  BOOST_CHECK_EQUAL(2, s.getStart());
179  BOOST_CHECK_EQUAL(10, s.getSize());
180 
181  s.reduceSizeToMultipleOf(3);
182  BOOST_CHECK_EQUAL(2, s.getStart());
183  BOOST_CHECK_EQUAL(9, s.getSize());
184 }
Here is the call graph for this function:

◆ containedSegmentEqualsIntersection()

template<class Scaffold >
void containedSegmentEqualsIntersection ( const Scaffold &  container,
const Scaffold &  contained 
)
110 {
111  if(container.contains(contained))
112  {
113  BOOST_CHECK_EQUAL(contained, container.intersection(contained));
114  BOOST_CHECK_EQUAL(contained, contained.intersection(container));
115  }
116 }

Referenced by BOOST_AUTO_TEST_CASE_TEMPLATE().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ intersectsImpliesNonEmptyIntersection()

template<class Scaffold >
void intersectsImpliesNonEmptyIntersection ( const Scaffold &  a,
const Scaffold &  b 
)
120 {
121  BOOST_CHECK_EQUAL(a.intersects(b), b.intersects(a));
122  BOOST_CHECK_EQUAL(a.intersects(b), !a.intersection(b).isEmpty());
123  BOOST_CHECK_EQUAL(b.intersects(a), !b.intersection(a).isEmpty());
124  BOOST_CHECK_EQUAL(a.intersection(b), b.intersection(a));
125 }

Referenced by BOOST_AUTO_TEST_CASE_TEMPLATE().

Here is the call graph for this function:
Here is the caller graph for this function:
Scroom::Utils::Rectangle::rightOf
Rectangle< value_type > rightOf(value_type v) const
Definition: rectangle.hh:148
BOOST_CHECK_EQUAL
BOOST_CHECK_EQUAL(sample.expectedColors, originalColormap->colors.size())
Scroom::Utils::make_rect
Rectangle< T > make_rect(T x, T y, T width, T height)
Definition: rectangle.hh:284
containedSegmentEqualsIntersection
void containedSegmentEqualsIntersection(const Scaffold &container, const Scaffold &contained)
Definition: rectangletests.cc:109
Scroom::Utils::make_point
Point< T > make_point(T x, T y)
Definition: point.hh:116
Scroom::Utils::Rectangle::below
Rectangle< value_type > below(value_type v) const
Definition: rectangle.hh:158
Scroom::Utils::Segment
Definition: linearsegment.hh:44
Scroom::Utils::Rectangle::above
Rectangle< value_type > above(value_type v) const
Definition: rectangle.hh:153
b
static void b(const B::Ptr &)
Definition: gtkhelper-tests.cc:32
Scroom::Utils::make_segment
Segment< T > make_segment(T start, T size)
Definition: linearsegment.hh:223
Scroom::Utils::Rectangle
Definition: rectangle.hh:22
Scroom::GtkHelpers::createCairoIntRectangle
cairo_rectangle_int_t createCairoIntRectangle(int x, int y, int width, int height)
Definition: gtk-helpers.hh:71
intersectsImpliesNonEmptyIntersection
void intersectsImpliesNonEmptyIntersection(const Scaffold &a, const Scaffold &b)
Definition: rectangletests.cc:119
Scroom::Utils::Rectangle::leftOf
Rectangle< value_type > leftOf(value_type v) const
Definition: rectangle.hh:143