doc: update copyright line for 2021
[adg.git] / src / cpml / tests / test-extents.c
blob67d74294f46d50952461583c27644e5c21da96fd
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.
21 #include <adg-test.h>
22 #include <cpml.h>
25 static void
26 _cmpl_behavior_misc(void)
28 CpmlExtents extents = { 0 };
29 CpmlExtents extents2 = { 0 };
30 cairo_bool_t equals;
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);
54 static void
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);
115 static void
116 _cpml_method_transform(void)
118 CpmlExtents extents;
119 cairo_matrix_t matrix;
120 CpmlPair nord = { 1, 0 };
121 cairo_bool_t is_inside;
123 extents.is_defined = 1;
124 extents.org.x = 2;
125 extents.org.y = 3;
126 extents.size.x = 4;
127 extents.size.y = 5;
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);
156 return g_test_run();