diff options
author | Benjamin Otte <otte@redhat.com> | 2012-11-10 18:54:35 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-11-10 18:55:14 +0100 |
commit | 5f20d909e6a7c73a128b8990efd639211cacabb2 (patch) | |
tree | 1c14513889443d9c256e173502e81d3b10fe45da | |
parent | c59e8de533058f17fc51ab415295f88d5867bb0a (diff) | |
download | gtk+-5f20d909e6a7c73a128b8990efd639211cacabb2.tar.gz |
tests: Add an intersection test for the recent bug
Just using the hardcoded bitmasks triggered the bug fixed in commit
e8f2eeac9221d91ba32447bbcbdc5ba057647f8e - so just do that as the test.
-rw-r--r-- | gtk/tests/bitmask.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/gtk/tests/bitmask.c b/gtk/tests/bitmask.c index 1d4eaa5121..33e4b42653 100644 --- a/gtk/tests/bitmask.c +++ b/gtk/tests/bitmask.c @@ -237,6 +237,49 @@ test_intersect (void) } } +static void +test_intersect_hardcoded (void) +{ + GtkBitmask *left, *right, *intersection, *expected; + const char *left_str, *right_str; + guint left_len, right_len; + guint i, l, r; + + for (l = 0; l < G_N_ELEMENTS (tests); l++) + { + for (r = 0; r < G_N_ELEMENTS (tests); r++) + { + left = masks[l]; + right = masks[r]; + left_str = tests[l]; + right_str = tests[r]; + left_len = strlen (tests[l]); + right_len = strlen (tests[r]); + + expected = _gtk_bitmask_new (); + if (left_len > right_len) + left_str += left_len - right_len; + if (right_len > left_len) + right_str += right_len - left_len; + i = MIN (right_len, left_len); + while (i--) + { + expected = _gtk_bitmask_set (expected, i, left_str[0] == '1' && right_str[0] == '1'); + right_str++; + left_str++; + } + + intersection = _gtk_bitmask_intersect (_gtk_bitmask_copy (left), right); + + assert_cmpmasks (intersection, expected); + g_assert_cmpint (_gtk_bitmask_is_empty (expected), ==, !_gtk_bitmask_intersects (left, right)); + + _gtk_bitmask_free (intersection); + _gtk_bitmask_free (expected); + } + } +} + #define SWAP(_a, _b) G_STMT_START{ \ guint _tmp = _a; \ _a = _b; \ @@ -331,6 +374,7 @@ main (int argc, char *argv[]) g_test_add_func ("/bitmask/set", test_set); g_test_add_func ("/bitmask/union", test_union); g_test_add_func ("/bitmask/intersect", test_intersect); + g_test_add_func ("/bitmask/intersect_hardcoded", test_intersect_hardcoded); g_test_add_func ("/bitmask/invert_range", test_invert_range); result = g_test_run (); |