[tests] Added complete CpmlExtents test
[adg.git] / src / cpml / tests / test-extents.c
blobbfff7841a432c78efd533f0317c364ac9d7b18fd
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"
24 static void
25 _cpml_test_basic(void)
27 CpmlExtents extents = { 0 };
28 CpmlExtents extents2 = { 0 };
29 cairo_bool_t equals;
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);
36 g_assert(equals);
37 equals = cpml_extents_equal(&extents, NULL);
38 g_assert(! equals);
39 equals = cpml_extents_equal(NULL, &extents);
40 g_assert(! equals);
41 equals = cpml_extents_equal(NULL, NULL);
42 g_assert(equals);
44 extents.is_defined = 1;
45 equals = cpml_extents_equal(&extents, &extents2);
46 g_assert(! equals);
48 cpml_extents_copy(&extents2, &extents);
49 equals = cpml_extents_equal(&extents, &extents2);
50 g_assert(equals);
53 static void
54 _cpml_test_add(void)
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);
74 g_assert(! equals);
76 g_test_message("...but undefined extents are always inside defined extents");
77 is_inside = cpml_extents_is_inside(&extents, &extents2);
78 g_assert(is_inside);
80 is_inside = cpml_extents_pair_is_inside(&extents, &pair1);
81 g_assert(is_inside);
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);
87 g_assert(equals);
88 is_inside = cpml_extents_is_inside(&extents, &extents2);
89 g_assert(is_inside);
91 cpml_extents_pair_add(&extents, &pair2);
92 is_inside = cpml_extents_is_inside(&extents, &extents2);
93 g_assert(is_inside);
94 is_inside = cpml_extents_pair_is_inside(&extents, &pair1);
95 g_assert(is_inside);
96 is_inside = cpml_extents_pair_is_inside(&extents, &pair2);
97 g_assert(is_inside);
99 cpml_extents_pair_add(&extents2, &pair2);
100 is_inside = cpml_extents_is_inside(&extents, &extents2);
101 g_assert(is_inside);
103 is_inside = cpml_extents_is_inside(&extents2, &extents);
104 g_assert(is_inside);
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);
118 static void
119 _cpml_test_transform(void)
121 CpmlExtents extents;
122 cairo_matrix_t matrix;
123 CpmlPair nord = { 1, 0 };
124 cairo_bool_t equals, is_inside;
126 extents.is_defined = 1;
127 extents.org.x = 2;
128 extents.org.y = 3;
129 extents.size.x = 4;
130 extents.size.y = 5;
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);
139 g_assert(is_inside);
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);
158 return g_test_run();