1 /* ADG - Automatic Drawing Generation
2 * Copyright (C) 2007-2021 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.
26 _cmpl_behavior_misc(void)
28 CpmlExtents extents
= { 0 };
29 CpmlExtents extents2
= { 0 };
32 extents
.is_defined
= 0;
33 extents2
.is_defined
= 0;
35 g_test_message("By convention, undefined extents are not equal to invalid extents");
36 equals
= cpml_extents_equal(&extents
, &extents2
);
37 g_assert_true(equals
);
38 equals
= cpml_extents_equal(&extents
, NULL
);
39 g_assert_false(equals
);
40 equals
= cpml_extents_equal(NULL
, &extents
);
41 g_assert_false(equals
);
42 equals
= cpml_extents_equal(NULL
, NULL
);
43 g_assert_true(equals
);
45 extents
.is_defined
= 1;
46 equals
= cpml_extents_equal(&extents
, &extents2
);
47 g_assert_false(equals
);
49 cpml_extents_copy(&extents2
, &extents
);
50 equals
= cpml_extents_equal(&extents
, &extents2
);
51 g_assert_true(equals
);
55 _cpml_method_add(void)
57 CpmlPair org
= { 0, 0 };
58 CpmlPair pair1
= { 1, 2 };
59 CpmlPair pair2
= { 3, 4 };
60 CpmlExtents extents
= { 0 };
61 CpmlExtents extents2
= { 0 };
62 cairo_bool_t equals
, is_inside
;
64 extents
.is_defined
= 0;
65 extents2
.is_defined
= 0;
67 g_test_message("By convention, nothing is inside undefined extents...");
68 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
69 g_assert_false(is_inside
);
70 is_inside
= cpml_extents_pair_is_inside(&extents
, &org
);
71 g_assert_false(is_inside
);
73 cpml_extents_pair_add(&extents
, &pair1
);
74 equals
= cpml_extents_equal(&extents
, &extents2
);
75 g_assert_false(equals
);
77 g_test_message("...but undefined extents are always inside defined extents");
78 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
79 g_assert_true(is_inside
);
81 is_inside
= cpml_extents_pair_is_inside(&extents
, &pair1
);
82 g_assert_true(is_inside
);
83 is_inside
= cpml_extents_pair_is_inside(&extents
, &pair2
);
84 g_assert_false(is_inside
);
86 cpml_extents_pair_add(&extents2
, &pair1
);
87 equals
= cpml_extents_equal(&extents
, &extents2
);
88 g_assert_true(equals
);
89 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
90 g_assert_true(is_inside
);
92 cpml_extents_pair_add(&extents
, &pair2
);
93 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
94 g_assert_true(is_inside
);
95 is_inside
= cpml_extents_pair_is_inside(&extents
, &pair1
);
96 g_assert_true(is_inside
);
97 is_inside
= cpml_extents_pair_is_inside(&extents
, &pair2
);
98 g_assert_true(is_inside
);
100 cpml_extents_pair_add(&extents2
, &pair2
);
101 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
102 g_assert_true(is_inside
);
104 is_inside
= cpml_extents_is_inside(&extents2
, &extents
);
105 g_assert_true(is_inside
);
107 cpml_extents_pair_add(&extents2
, &org
);
108 is_inside
= cpml_extents_is_inside(&extents
, &extents2
);
109 g_assert_false(is_inside
);
111 is_inside
= cpml_extents_is_inside(&extents2
, &extents
);
112 g_assert_true(is_inside
);
116 _cpml_method_transform(void)
119 cairo_matrix_t matrix
;
120 CpmlPair nord
= { 1, 0 };
121 cairo_bool_t is_inside
;
123 extents
.is_defined
= 1;
129 is_inside
= cpml_extents_pair_is_inside(&extents
, &nord
);
130 g_assert_false(is_inside
);
132 cairo_matrix_init_translate(&matrix
, -extents
.org
.x
- 1, -extents
.org
.y
- 1);
133 cpml_extents_transform(&extents
, &matrix
);
135 is_inside
= cpml_extents_pair_is_inside(&extents
, &nord
);
136 g_assert_true(is_inside
);
138 cairo_matrix_init_scale(&matrix
, 0.01, 0.01);
139 cpml_extents_transform(&extents
, &matrix
);
141 is_inside
= cpml_extents_pair_is_inside(&extents
, &nord
);
142 g_assert_false(is_inside
);
147 main(int argc
, char *argv
[])
149 adg_test_init(&argc
, &argv
);
151 g_test_add_func("/cpml/extents/behavior/misc", _cmpl_behavior_misc
);
153 g_test_add_func("/cpml/extents/method/add", _cpml_method_add
);
154 g_test_add_func("/cpml/extents/method/transform", _cpml_method_transform
);