Imported Upstream version 2.3.1
[platform/upstream/harfbuzz.git] / test / api / test-set.c
index b9e7ef8..aa2b388 100644 (file)
 static void
 test_empty (hb_set_t *s)
 {
-  hb_codepoint_t next = (hb_codepoint_t) -1;
+  hb_codepoint_t next;
   g_assert_cmpint (hb_set_get_population (s), ==, 0);
-  g_assert_cmpint (hb_set_get_min (s), ==, (hb_codepoint_t) -1);
-  g_assert_cmpint (hb_set_get_max (s), ==, (hb_codepoint_t) -1);
+  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_codepoint_t) -1);
+  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_codepoint_t) -1;
+  hb_codepoint_t next;
   g_assert_cmpint (hb_set_get_population (s), !=, 0);
-  g_assert_cmpint (hb_set_get_min (s), !=, (hb_codepoint_t) -1);
-  g_assert_cmpint (hb_set_get_max (s), !=, (hb_codepoint_t) -1);
+  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_codepoint_t) -1);
+  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
@@ -64,6 +73,10 @@ test_set_basic (void)
   hb_set_clear (s);
   test_empty (s);
 
+  hb_set_add (s, 33000);
+  test_not_empty (s);
+  hb_set_clear (s);
+
   hb_set_add_range (s, 10, 29);
   test_not_empty (s);
   g_assert (hb_set_has (s, 13));
@@ -71,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);
@@ -86,21 +93,68 @@ test_set_basic (void)
   hb_set_del_range (s, 10, 18);
   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_del (s, 800);
+  g_assert (!hb_set_has (s, 800));
+
+  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));
+  g_assert (hb_set_is_subset (s, o));
+  g_assert (!hb_set_is_subset (o, s));
   hb_set_set (s, o);
   g_assert (hb_set_is_equal (s, o));
+  g_assert (hb_set_is_subset (s, o));
+  g_assert (hb_set_is_subset (o, s));
   test_not_empty (s);
   g_assert_cmpint (hb_set_get_population (s), ==, 2);
 
@@ -115,6 +169,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);
@@ -147,6 +208,64 @@ test_set_algebra (void)
   g_assert (hb_set_has (s, 12));
   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_add (o, 511);
+  g_assert_cmpint (hb_set_get_population (o), ==, 2);
+  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);
+  hb_set_destroy (o2);
 }
 
 static void
@@ -158,11 +277,13 @@ 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);
 
-  next = (hb_codepoint_t) -1;
+  next = HB_SET_VALUE_INVALID;
   g_assert (hb_set_next (s, &next));
   g_assert_cmpint (next, ==, 6);
   g_assert (hb_set_next (s, &next));
@@ -175,11 +296,36 @@ 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_codepoint_t) -1;
+  first = last = HB_SET_VALUE_INVALID;
   g_assert (hb_set_next_range (s, &first, &last));
   g_assert_cmpint (first, ==, 6);
   g_assert_cmpint (last,  ==, 6);
@@ -187,11 +333,39 @@ 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);
 }
 
 static void
@@ -210,10 +384,6 @@ test_set_empty (void)
 
   test_empty (b);
 
-  hb_set_invert (b);
-
-  test_empty (b);
-
   g_assert (!hb_set_allocation_successful (b));
 
   hb_set_clear (b);
@@ -221,6 +391,8 @@ test_set_empty (void)
   test_empty (b);
 
   g_assert (!hb_set_allocation_successful (b));
+
+  hb_set_destroy (b);
 }
 
 int