summaryrefslogtreecommitdiff
path: root/testsuite/gtk/bitmask.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2015-02-25 00:35:45 +0100
committerBenjamin Otte <otte@redhat.com>2015-02-25 01:55:28 +0100
commit0ab48fcc4227ab112835f8fc1b922cfb21a7927f (patch)
treee2b3d0b8d860af641f873c01c376cde4c6e9c059 /testsuite/gtk/bitmask.c
parent9e50fe0aeba1dba5a151efcdf39b9f0142d26e3d (diff)
downloadgtk+-0ab48fcc4227ab112835f8fc1b922cfb21a7927f.tar.gz
css: Fix _gtk_bitmask_subtract()
We were doing the wrong thing *and* writing uninitialized memory while doing so. BAD. Also added tests exposing these. https://bugzilla.redhat.com/show_bug.cgi?id=1185585
Diffstat (limited to 'testsuite/gtk/bitmask.c')
-rw-r--r--testsuite/gtk/bitmask.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/testsuite/gtk/bitmask.c b/testsuite/gtk/bitmask.c
index 7d186a986a..b457c08fd8 100644
--- a/testsuite/gtk/bitmask.c
+++ b/testsuite/gtk/bitmask.c
@@ -280,6 +280,53 @@ test_intersect_hardcoded (void)
}
}
+static void
+test_subtract_hardcoded (void)
+{
+ GtkBitmask *left, *right, *subtracted, *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 ();
+ for (i = MIN (right_len, left_len); i < left_len; i++)
+ {
+ expected = _gtk_bitmask_set (expected, i, left_str[left_len - i - 1] == '1');
+ }
+ 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] == '0');
+ right_str++;
+ left_str++;
+ }
+
+ g_print ("%s - %s\n", _gtk_bitmask_to_string (left), _gtk_bitmask_to_string (right));
+ subtracted = _gtk_bitmask_subtract (_gtk_bitmask_copy (left), right);
+
+ assert_cmpmasks (subtracted, expected);
+
+ _gtk_bitmask_free (subtracted);
+ _gtk_bitmask_free (expected);
+ }
+ }
+}
+
#define SWAP(_a, _b) G_STMT_START{ \
guint _tmp = _a; \
_a = _b; \
@@ -375,6 +422,7 @@ main (int argc, char *argv[])
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/subtract_hardcoded", test_subtract_hardcoded);
g_test_add_func ("/bitmask/invert_range", test_invert_range);
result = g_test_run ();