static void
test_empty (hb_set_t *s)
{
- hb_codepoint_t next = HB_SET_VALUE_INVALID;
+ hb_codepoint_t next;
g_assert_cmpint (hb_set_get_population (s), ==, 0);
g_assert_cmpint (hb_set_get_min (s), ==, HB_SET_VALUE_INVALID);
g_assert_cmpint (hb_set_get_max (s), ==, HB_SET_VALUE_INVALID);
g_assert (!hb_set_has (s, 13));
+ next = 53043;
g_assert (!hb_set_next (s, &next));
g_assert_cmpint (next, ==, HB_SET_VALUE_INVALID);
+ next = 07734;
+ g_assert (!hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, HB_SET_VALUE_INVALID);
g_assert (hb_set_is_empty (s));
}
static void
test_not_empty (hb_set_t *s)
{
- hb_codepoint_t next = HB_SET_VALUE_INVALID;
+ hb_codepoint_t next;
g_assert_cmpint (hb_set_get_population (s), !=, 0);
g_assert_cmpint (hb_set_get_min (s), !=, HB_SET_VALUE_INVALID);
g_assert_cmpint (hb_set_get_max (s), !=, HB_SET_VALUE_INVALID);
+ next = HB_SET_VALUE_INVALID;
g_assert (hb_set_next (s, &next));
g_assert_cmpint (next, !=, HB_SET_VALUE_INVALID);
+ next = HB_SET_VALUE_INVALID;
+ g_assert (hb_set_previous (s, &next));
+ g_assert_cmpint (next, !=, HB_SET_VALUE_INVALID);
}
static void
g_assert_cmpint (hb_set_get_min (s), ==, 10);
g_assert_cmpint (hb_set_get_max (s), ==, 29);
- hb_set_invert (s);
- test_not_empty (s);
- g_assert (!hb_set_has (s, 13));
- g_assert_cmpint (hb_set_get_min (s), ==, 0);
-
- hb_set_invert (s);
test_not_empty (s);
g_assert (hb_set_has (s, 13));
g_assert_cmpint (hb_set_get_population (s), ==, 20);
test_not_empty (s);
g_assert (!hb_set_has (s, 13));
+ hb_set_add_range (s, 200, 800);
+ test_not_empty (s);
+ g_assert (!hb_set_has (s, 100));
+ g_assert (!hb_set_has (s, 199));
+ g_assert (hb_set_has (s, 200));
+ g_assert (hb_set_has (s, 201));
+ g_assert (hb_set_has (s, 243));
+ g_assert (hb_set_has (s, 254));
+ g_assert (hb_set_has (s, 255));
+ g_assert (hb_set_has (s, 256));
+ g_assert (hb_set_has (s, 257));
+ g_assert (hb_set_has (s, 511));
+ g_assert (hb_set_has (s, 512));
+ g_assert (hb_set_has (s, 600));
+ g_assert (hb_set_has (s, 767));
+ g_assert (hb_set_has (s, 768));
+ g_assert (hb_set_has (s, 769));
+ g_assert (hb_set_has (s, 782));
+ g_assert (hb_set_has (s, 798));
+ g_assert (hb_set_has (s, 799));
+ g_assert (hb_set_has (s, 800));
+ g_assert (!hb_set_has (s, 801));
+ g_assert (!hb_set_has (s, 802));
+
hb_set_destroy (s);
}
+
+// static inline void
+// print_set (hb_set_t *s)
+// {
+// hb_codepoint_t next;
+// printf ("{");
+// for (next = HB_SET_VALUE_INVALID; hb_set_next (s, &next); )
+// printf ("%d, ", next);
+// printf ("}\n");
+// }
+
static void
test_set_algebra (void)
{
hb_set_t *s = hb_set_create ();
hb_set_t *o = hb_set_create ();
+ hb_set_t *o2 = hb_set_create ();
hb_set_add (o, 13);
hb_set_add (o, 19);
+ hb_set_add (o2, 0x660E);
+
test_empty (s);
g_assert (!hb_set_is_equal (s, o));
hb_set_set (s, o);
hb_set_clear (s);
test_empty (s);
+ g_assert_cmpint (hb_set_get_population (s), ==, 0);
+ hb_set_union (s, o2);
+ g_assert_cmpint (hb_set_get_population (s), ==, 1);
+ g_assert (hb_set_has (s, 0x660E));
+
+ hb_set_clear (s);
+ test_empty (s);
hb_set_add_range (s, 10, 17);
g_assert (!hb_set_is_equal (s, o));
hb_set_intersect (s, o);
g_assert (!hb_set_has (s, 13));
g_assert (hb_set_has (s, 19));
+ /* https://github.com/harfbuzz/harfbuzz/issues/579 */
+ hb_set_clear (s);
+ test_empty (s);
+ hb_set_add_range (s, 886, 895);
+ hb_set_add (s, 1024);
+ hb_set_add (s, 1152);
+ hb_set_clear (o);
+ test_empty (o);
+ hb_set_add (o, 889);
+ hb_set_add (o, 1024);
+ g_assert (!hb_set_is_equal (s, o));
+ hb_set_intersect (o, s);
+ test_not_empty (o);
+ g_assert (!hb_set_is_equal (s, o));
+ g_assert_cmpint (hb_set_get_population (o), ==, 2);
+ g_assert (hb_set_has (o, 889));
+ g_assert (hb_set_has (o, 1024));
+ hb_set_clear (o);
+ test_empty (o);
+ hb_set_add_range (o, 887, 889);
+ hb_set_add (o, 1121);
+ g_assert (!hb_set_is_equal (s, o));
+ hb_set_intersect (o, s);
+ test_not_empty (o);
+ g_assert (!hb_set_is_equal (s, o));
+ g_assert_cmpint (hb_set_get_population (o), ==, 3);
+ g_assert (hb_set_has (o, 887));
+ g_assert (hb_set_has (o, 888));
+ g_assert (hb_set_has (o, 889));
+
+ hb_set_clear (s);
+ test_empty (s);
+ hb_set_add_range (s, 886, 895);
+ hb_set_add (s, 1014);
+ hb_set_add (s, 1017);
+ hb_set_add (s, 1024);
+ hb_set_add (s, 1113);
+ hb_set_add (s, 1121);
+ g_assert_cmpint (hb_set_get_population (s), ==, 15);
+
+ hb_set_clear (o);
+ test_empty (o);
+ hb_set_add (o, 889);
+ g_assert_cmpint (hb_set_get_population (o), ==, 1);
+ hb_set_intersect (o, s);
+ g_assert_cmpint (hb_set_get_population (o), ==, 1);
+ g_assert (hb_set_has (o, 889));
+
hb_set_destroy (s);
+ hb_set_destroy (o);
}
static void
hb_set_add (s, 13);
hb_set_add_range (s, 6, 6);
hb_set_add_range (s, 10, 15);
+ hb_set_add (s, 1100);
+ hb_set_add (s, 1200);
hb_set_add (s, 20005);
test_not_empty (s);
g_assert (hb_set_next (s, &next));
g_assert_cmpint (next, ==, 15);
g_assert (hb_set_next (s, &next));
+ g_assert_cmpint (next, ==, 1100);
+ g_assert (hb_set_next (s, &next));
+ g_assert_cmpint (next, ==, 1200);
+ g_assert (hb_set_next (s, &next));
g_assert_cmpint (next, ==, 20005);
g_assert (!hb_set_next (s, &next));
g_assert_cmpint (next, ==, HB_SET_VALUE_INVALID);
+ next = HB_SET_VALUE_INVALID;
+ g_assert (hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, 20005);
+ g_assert (hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, 1200);
+ g_assert (hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, 1100);
+ g_assert (hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, 15);
+ g_assert (hb_set_previous (s, &next));
+ g_assert (hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, 13);
+ g_assert (hb_set_previous (s, &next));
+ g_assert (hb_set_previous (s, &next));
+ g_assert (hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, 10);
+ g_assert (hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, 6);
+ g_assert (!hb_set_previous (s, &next));
+ g_assert_cmpint (next, ==, HB_SET_VALUE_INVALID);
+
first = last = HB_SET_VALUE_INVALID;
g_assert (hb_set_next_range (s, &first, &last));
g_assert_cmpint (first, ==, 6);
g_assert_cmpint (first, ==, 10);
g_assert_cmpint (last, ==, 15);
g_assert (hb_set_next_range (s, &first, &last));
+ g_assert_cmpint (first, ==, 1100);
+ g_assert_cmpint (last, ==, 1100);
+ g_assert (hb_set_next_range (s, &first, &last));
+ g_assert_cmpint (first, ==, 1200);
+ g_assert_cmpint (last, ==, 1200);
+ g_assert (hb_set_next_range (s, &first, &last));
g_assert_cmpint (first, ==, 20005);
g_assert_cmpint (last, ==, 20005);
g_assert (!hb_set_next_range (s, &first, &last));
g_assert_cmpint (first, ==, HB_SET_VALUE_INVALID);
g_assert_cmpint (last, ==, HB_SET_VALUE_INVALID);
+ first = last = HB_SET_VALUE_INVALID;
+ g_assert (hb_set_previous_range (s, &first, &last));
+ g_assert_cmpint (first, ==, 20005);
+ g_assert_cmpint (last, ==, 20005);
+ g_assert (hb_set_previous_range (s, &first, &last));
+ g_assert_cmpint (first, ==, 1200);
+ g_assert_cmpint (last, ==, 1200);
+ g_assert (hb_set_previous_range (s, &first, &last));
+ g_assert_cmpint (first, ==, 1100);
+ g_assert_cmpint (last, ==, 1100);
+ g_assert (hb_set_previous_range (s, &first, &last));
+ g_assert_cmpint (first, ==, 10);
+ g_assert_cmpint (last, ==, 15);
+ g_assert (hb_set_previous_range (s, &first, &last));
+ g_assert_cmpint (first, ==, 6);
+ g_assert_cmpint (last, ==, 6);
+ g_assert (!hb_set_previous_range (s, &first, &last));
+ g_assert_cmpint (first, ==, HB_SET_VALUE_INVALID);
+ g_assert_cmpint (last, ==, HB_SET_VALUE_INVALID);
+
hb_set_destroy (s);
}