Imported Upstream version 1.7.6
[platform/upstream/harfbuzz.git] / test / api / test-set.c
index 9634951..15958c5 100644 (file)
 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
@@ -76,12 +84,6 @@ test_set_basic (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);
@@ -92,18 +94,56 @@ test_set_basic (void)
   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);
@@ -122,6 +162,13 @@ test_set_algebra (void)
 
   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);
@@ -155,7 +202,56 @@ test_set_algebra (void)
   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
@@ -167,6 +263,8 @@ test_set_iter (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);
@@ -184,10 +282,35 @@ test_set_iter (void)
   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);
@@ -196,12 +319,38 @@ test_set_iter (void)
   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);
 }