2 * Copyright © 2013 Google, Inc.
4 * This is part of HarfBuzz, a text shaping library.
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
24 * Google Author(s): Behdad Esfahbod
29 /* Unit tests for hb-set.h */
33 test_empty (hb_set_t *s)
35 hb_codepoint_t next = HB_SET_VALUE_INVALID;
36 g_assert_cmpint (hb_set_get_population (s), ==, 0);
37 g_assert_cmpint (hb_set_get_min (s), ==, HB_SET_VALUE_INVALID);
38 g_assert_cmpint (hb_set_get_max (s), ==, HB_SET_VALUE_INVALID);
39 g_assert (!hb_set_has (s, 13));
40 g_assert (!hb_set_next (s, &next));
41 g_assert_cmpint (next, ==, HB_SET_VALUE_INVALID);
42 g_assert (hb_set_is_empty (s));
46 test_not_empty (hb_set_t *s)
48 hb_codepoint_t next = HB_SET_VALUE_INVALID;
49 g_assert_cmpint (hb_set_get_population (s), !=, 0);
50 g_assert_cmpint (hb_set_get_min (s), !=, HB_SET_VALUE_INVALID);
51 g_assert_cmpint (hb_set_get_max (s), !=, HB_SET_VALUE_INVALID);
52 g_assert (hb_set_next (s, &next));
53 g_assert_cmpint (next, !=, HB_SET_VALUE_INVALID);
59 hb_set_t *s = hb_set_create ();
68 hb_set_add (s, 33000);
72 hb_set_add_range (s, 10, 29);
74 g_assert (hb_set_has (s, 13));
75 g_assert_cmpint (hb_set_get_population (s), ==, 20);
76 g_assert_cmpint (hb_set_get_min (s), ==, 10);
77 g_assert_cmpint (hb_set_get_max (s), ==, 29);
81 g_assert (!hb_set_has (s, 13));
82 g_assert_cmpint (hb_set_get_min (s), ==, 0);
86 g_assert (hb_set_has (s, 13));
87 g_assert_cmpint (hb_set_get_population (s), ==, 20);
88 g_assert_cmpint (hb_set_get_min (s), ==, 10);
89 g_assert_cmpint (hb_set_get_max (s), ==, 29);
91 hb_set_del_range (s, 10, 18);
93 g_assert (!hb_set_has (s, 13));
99 test_set_algebra (void)
101 hb_set_t *s = hb_set_create ();
102 hb_set_t *o = hb_set_create ();
108 g_assert (!hb_set_is_equal (s, o));
110 g_assert (hb_set_is_equal (s, o));
112 g_assert_cmpint (hb_set_get_population (s), ==, 2);
117 g_assert_cmpint (hb_set_get_population (s), ==, 1);
119 g_assert_cmpint (hb_set_get_population (s), ==, 3);
120 g_assert (hb_set_has (s, 10));
121 g_assert (hb_set_has (s, 13));
125 hb_set_add_range (s, 10, 17);
126 g_assert (!hb_set_is_equal (s, o));
127 hb_set_intersect (s, o);
128 g_assert (!hb_set_is_equal (s, o));
130 g_assert_cmpint (hb_set_get_population (s), ==, 1);
131 g_assert (!hb_set_has (s, 10));
132 g_assert (hb_set_has (s, 13));
136 hb_set_add_range (s, 10, 17);
137 g_assert (!hb_set_is_equal (s, o));
138 hb_set_subtract (s, o);
139 g_assert (!hb_set_is_equal (s, o));
141 g_assert_cmpint (hb_set_get_population (s), ==, 7);
142 g_assert (hb_set_has (s, 12));
143 g_assert (!hb_set_has (s, 13));
144 g_assert (!hb_set_has (s, 19));
148 hb_set_add_range (s, 10, 17);
149 g_assert (!hb_set_is_equal (s, o));
150 hb_set_symmetric_difference (s, o);
151 g_assert (!hb_set_is_equal (s, o));
153 g_assert_cmpint (hb_set_get_population (s), ==, 8);
154 g_assert (hb_set_has (s, 12));
155 g_assert (!hb_set_has (s, 13));
156 g_assert (hb_set_has (s, 19));
164 hb_codepoint_t next, first, last;
165 hb_set_t *s = hb_set_create ();
168 hb_set_add_range (s, 6, 6);
169 hb_set_add_range (s, 10, 15);
170 hb_set_add (s, 20005);
174 next = HB_SET_VALUE_INVALID;
175 g_assert (hb_set_next (s, &next));
176 g_assert_cmpint (next, ==, 6);
177 g_assert (hb_set_next (s, &next));
178 g_assert_cmpint (next, ==, 10);
179 g_assert (hb_set_next (s, &next));
180 g_assert (hb_set_next (s, &next));
181 g_assert (hb_set_next (s, &next));
182 g_assert_cmpint (next, ==, 13);
183 g_assert (hb_set_next (s, &next));
184 g_assert (hb_set_next (s, &next));
185 g_assert_cmpint (next, ==, 15);
186 g_assert (hb_set_next (s, &next));
187 g_assert_cmpint (next, ==, 20005);
188 g_assert (!hb_set_next (s, &next));
189 g_assert_cmpint (next, ==, HB_SET_VALUE_INVALID);
191 first = last = HB_SET_VALUE_INVALID;
192 g_assert (hb_set_next_range (s, &first, &last));
193 g_assert_cmpint (first, ==, 6);
194 g_assert_cmpint (last, ==, 6);
195 g_assert (hb_set_next_range (s, &first, &last));
196 g_assert_cmpint (first, ==, 10);
197 g_assert_cmpint (last, ==, 15);
198 g_assert (hb_set_next_range (s, &first, &last));
199 g_assert_cmpint (first, ==, 20005);
200 g_assert_cmpint (last, ==, 20005);
201 g_assert (!hb_set_next_range (s, &first, &last));
202 g_assert_cmpint (first, ==, HB_SET_VALUE_INVALID);
203 g_assert_cmpint (last, ==, HB_SET_VALUE_INVALID);
209 test_set_empty (void)
211 hb_set_t *b = hb_set_get_empty ();
213 g_assert (hb_set_get_empty ());
214 g_assert (hb_set_get_empty () == b);
216 g_assert (!hb_set_allocation_successful (b));
228 g_assert (!hb_set_allocation_successful (b));
234 g_assert (!hb_set_allocation_successful (b));
240 main (int argc, char **argv)
242 hb_test_init (&argc, &argv);
244 hb_test_add (test_set_basic);
245 hb_test_add (test_set_algebra);
246 hb_test_add (test_set_iter);
247 hb_test_add (test_set_empty);
249 return hb_test_run();