bitset: Add more tests

Add some tests for rectangles, and for iters.
This commit is contained in:
Matthias Clasen
2020-06-28 21:39:02 -04:00
parent c8b57154cb
commit c4e8218f49

View File

@@ -345,7 +345,7 @@ test_subtract (void)
gtk_bitset_unref (testset);
gtk_bitset_unref (jset);
}
gtk_bitset_unref (iset);
}
}
@@ -404,11 +404,7 @@ test_shift_right (void)
for (k = min; k <= max; k++)
{
if (k <= G_MAXUINT - j)
{
if (gtk_bitset_contains (iset, k) != gtk_bitset_contains (testset, k + j))
g_print ("right-shift fail set %u shift %u test %u\n", i, j, k);
g_assert_cmpint (gtk_bitset_contains (iset, k), ==, gtk_bitset_contains (testset, k + j));
}
}
gtk_bitset_unref (testset);
@@ -418,6 +414,135 @@ test_shift_right (void)
}
}
static void
test_slice (void)
{
GtkBitset *set;
guint i;
set = gtk_bitset_new_empty ();
gtk_bitset_add_range (set, 10, 30);
gtk_bitset_slice (set, 20, 10, 20);
for (i = 0; i < 60; i++)
g_assert_cmpint (gtk_bitset_contains (set, i), ==, (i >= 10 && i < 20) ||
(i >= 40 && i < 50));
gtk_bitset_slice (set, 25, 10, 0);
for (i = 0; i < 60; i++)
g_assert_cmpint (gtk_bitset_contains (set, i), ==, (i >= 10 && i < 20) ||
(i >= 30 && i < 40));
gtk_bitset_unref (set);
}
static void
test_rectangle (void)
{
GtkBitset *set;
GString *s;
guint i, j;
set = gtk_bitset_new_empty ();
gtk_bitset_add_rectangle (set, 8, 5, 5, 7);
gtk_bitset_remove_rectangle (set, 16, 3, 3, 7);
gtk_bitset_add_rectangle (set, 24, 1, 1, 7);
s = g_string_new ("");
for (i = 0; i < 7; i++)
{
for (j = 0; j < 7; j++)
g_string_append_printf (s, "%c ",
gtk_bitset_contains (set, i * 7 + j) ? '*' : ' ');
g_string_append (s, "\n");
}
g_assert_cmpstr (s->str, ==,
" \n"
" * * * * * \n"
" * * \n"
" * * * \n"
" * * \n"
" * * * * * \n"
" \n");
g_string_free (s, TRUE);
gtk_bitset_unref (set);
}
static void
test_iter (void)
{
GtkBitset *set;
GtkBitsetIter iter;
gboolean ret;
guint value;
set = gtk_bitset_new_empty ();
ret = gtk_bitset_iter_init_first (&iter, set, &value);
g_assert_false (ret);
g_assert_false (gtk_bitset_iter_is_valid (&iter));
g_assert_cmpuint (gtk_bitset_iter_get_value (&iter), ==, 0);
g_assert_false (gtk_bitset_iter_previous (&iter, &value));
g_assert_false (gtk_bitset_iter_next (&iter, &value));
ret = gtk_bitset_iter_init_last (&iter, set, &value);
g_assert_false (ret);
g_assert_false (gtk_bitset_iter_is_valid (&iter));
g_assert_cmpuint (gtk_bitset_iter_get_value (&iter), ==, 0);
g_assert_false (gtk_bitset_iter_previous (&iter, &value));
g_assert_false (gtk_bitset_iter_next (&iter, &value));
ret = gtk_bitset_iter_init_at (&iter, set, 0, &value);
g_assert_false (gtk_bitset_iter_is_valid (&iter));
g_assert_cmpuint (gtk_bitset_iter_get_value (&iter), ==, 0);
g_assert_false (gtk_bitset_iter_previous (&iter, &value));
g_assert_false (gtk_bitset_iter_next (&iter, &value));
gtk_bitset_add_range_closed (set, 10, 20);
ret = gtk_bitset_iter_init_first (&iter, set, &value);
g_assert_true (ret);
g_assert_true (gtk_bitset_iter_is_valid (&iter));
g_assert_cmpuint (value, ==, 10);
g_assert_cmpuint (gtk_bitset_iter_get_value (&iter), ==, 10);
ret = gtk_bitset_iter_next (&iter, &value);
g_assert_true (ret);
g_assert_cmpuint (value, ==, 11);
ret = gtk_bitset_iter_next (&iter, NULL);
g_assert_true (ret);
g_assert_cmpuint (gtk_bitset_iter_get_value (&iter), ==, 12);
ret = gtk_bitset_iter_init_last (&iter, set, &value);
g_assert_true (ret);
g_assert_true (gtk_bitset_iter_is_valid (&iter));
g_assert_cmpuint (value, ==, 20);
ret = gtk_bitset_iter_init_at (&iter, set, 5, NULL);
g_assert_true (ret);
g_assert_true (gtk_bitset_iter_is_valid (&iter));
g_assert_cmpuint (gtk_bitset_iter_get_value (&iter), ==, 10);
ret = gtk_bitset_iter_previous (&iter, NULL);
g_assert_false (ret);
g_assert_false (gtk_bitset_iter_is_valid (&iter));
ret = gtk_bitset_iter_init_at (&iter, set, 100, NULL);
g_assert_false (ret);
gtk_bitset_unref (set);
}
int
main (int argc, char *argv[])
{
@@ -434,6 +559,9 @@ main (int argc, char *argv[])
g_test_add_func ("/bitset/subtract", test_subtract);
g_test_add_func ("/bitset/shift-left", test_shift_left);
g_test_add_func ("/bitset/shift-right", test_shift_right);
g_test_add_func ("/bitset/slice", test_slice);
g_test_add_func ("/bitset/rectangle", test_rectangle);
g_test_add_func ("/bitset/iter", test_iter);
return g_test_run ();
}