1 /* ADG - Automatic Drawing Generation
2 * Copyright (C) 2011 Nicola Fontana <ntd at entidi.it>
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
21 #include "test-internal.h"
25 _cpml_test_basic(void)
27 CpmlExtents extents
= { 0 };
28 CpmlExtents extents2
= { 0 };
31 extents
.is_defined
= 0;
32 extents2
.is_defined
= 0;
34 g_test_message("By convention, undefined extents are not equal to invalid extents");
35 equals
= cpml_extents_equal(&extents
, &extents2
);
37 equals
= cpml_extents_equal(&extents
, NULL
);
39 equals
= cpml_extents_equal(NULL
, &extents
);
41 equals
= cpml_extents_equal(NULL
, NULL
);
44 extents
.is_defined
= 1;
45 equals
= cpml_extents_equal(&extents
, &extents2
);
48 cpml_extents_copy(&extents2
, &extents
);
49 equals
= cpml_extents_equal(&extents
, &extents2
);
56 CpmlPair org
= { 0, 0 };
57 CpmlPair pair1
= { 1, 2 };
58 CpmlPair pair2
= { 3, 4 };
59 CpmlExtents extents
= { 0 };
60 CpmlExtents extents2
= { 0 };
61 cairo_bool_t equals
, is_inside
;
63 extents
.is_defined
= 0;
64 extents2
.is_defined
= 0;
66 g_test_message("By convention, nothing is inside undefined extents...");
67 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
68 g_assert(! is_inside
);
69 is_inside
= cpml_extents_pair_is_inside(&extents
, &org
);
70 g_assert(! is_inside
);
72 cpml_extents_pair_add(&extents
, &pair1
);
73 equals
= cpml_extents_equal(&extents
, &extents2
);
76 g_test_message("...but undefined extents are always inside defined extents");
77 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
80 is_inside
= cpml_extents_pair_is_inside(&extents
, &pair1
);
82 is_inside
= cpml_extents_pair_is_inside(&extents
, &pair2
);
83 g_assert(! is_inside
);
85 cpml_extents_pair_add(&extents2
, &pair1
);
86 equals
= cpml_extents_equal(&extents
, &extents2
);
88 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
91 cpml_extents_pair_add(&extents
, &pair2
);
92 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
94 is_inside
= cpml_extents_pair_is_inside(&extents
, &pair1
);
96 is_inside
= cpml_extents_pair_is_inside(&extents
, &pair2
);
99 cpml_extents_pair_add(&extents2
, &pair2
);
100 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
103 is_inside
= cpml_extents_is_inside(&extents2
, &extents
);
106 cpml_extents_pair_add(&extents2
, &org
);
107 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
108 g_assert(! is_inside
);
110 /* The following test fails on FreeBSD 8.2, probably due
111 * to rounding problems:
113 * is_inside = cpml_extents_is_inside(&extents2, &extents);
114 * g_assert(is_inside);
119 _cpml_test_transform(void)
122 cairo_matrix_t matrix
;
123 CpmlPair nord
= { 1, 0 };
124 cairo_bool_t equals
, is_inside
;
126 extents
.is_defined
= 1;
132 is_inside
= cpml_extents_pair_is_inside(&extents
, &nord
);
133 g_assert(! is_inside
);
135 cairo_matrix_init_translate(&matrix
, -extents
.org
.x
- 1, -extents
.org
.y
- 1);
136 cpml_extents_transform(&extents
, &matrix
);
138 is_inside
= cpml_extents_pair_is_inside(&extents
, &nord
);
141 cairo_matrix_init_scale(&matrix
, 0.01, 0.01);
142 cpml_extents_transform(&extents
, &matrix
);
144 is_inside
= cpml_extents_pair_is_inside(&extents
, &nord
);
145 g_assert(! is_inside
);
150 main(int argc
, char *argv
[])
152 cpml_test_init(&argc
, &argv
);
154 cpml_test_add_func("/cpml/extents/basic", _cpml_test_basic
);
155 cpml_test_add_func("/cpml/extents/add", _cpml_test_add
);
156 cpml_test_add_func("/cpml/extents/transform", _cpml_test_transform
);