#include #include static void test_rectangle_equal (void) { GdkRectangle a = { 0, 0, 1, 1 }; GdkRectangle b = { 1, 1, 2, 2 }; GdkRectangle c = { 0, 0, 2, 2 }; GdkRectangle d = { 0, 0, 1, 1 }; GdkRectangle e = { 0, 0, 0, 0 }; GdkRectangle f = { 1, 1, 0, 0 }; g_assert_true (!gdk_rectangle_equal (&a, &b)); g_assert_true (!gdk_rectangle_equal (&a, &c)); g_assert_true (!gdk_rectangle_equal (&b, &c)); g_assert_true ( gdk_rectangle_equal (&a, &d)); g_assert_true (!gdk_rectangle_equal (&e, &f)); } static void test_rectangle_intersect (void) { GdkRectangle a = { 0, 0, 10, 10 }; GdkRectangle b = { 5, 5, 10, 10 }; GdkRectangle c = { 0, 0, 0, 0 }; GdkRectangle d = { 5, 5, 5, 5 }; GdkRectangle e = { 0, 0, 10, 10 }; GdkRectangle f = { 20, 20, 10, 10 }; GdkRectangle g = { 0, 0, 0, 0 }; GdkRectangle h = { 10, 10, 0, 0 }; gboolean res; res = gdk_rectangle_intersect (&a, &b, &c); g_assert_true (res); g_assert_true (gdk_rectangle_equal (&c, &d)); /* non-empty, non-intersecting rectangles */ res = gdk_rectangle_intersect (&e, &f, &f); g_assert_false (res); g_assert_cmpint (f.width, ==, 0); g_assert_cmpint (f.height, ==, 0); /* empty rectangles */ res = gdk_rectangle_intersect (&g, &h, NULL); g_assert_true (!res); } static void test_rectangle_union (void) { GdkRectangle a = { 0, 0, 10, 10 }; GdkRectangle b = { 5, 5, 10, 10 }; GdkRectangle c = { 0, 0, 0, 0 }; GdkRectangle d = { 0, 0, 15, 15 }; GdkRectangle e = { 0, 0, 0, 0 }; GdkRectangle f = { 50, 50, 0, 0 }; GdkRectangle g = { 0, 0, 50, 50 }; gdk_rectangle_union (&a, &b, &c); g_assert_true (gdk_rectangle_equal (&c, &d)); gdk_rectangle_union (&a, &b, &b); g_assert_true (gdk_rectangle_equal (&b, &d)); gdk_rectangle_union (&e, &f, &f); g_assert_true (gdk_rectangle_equal (&f, &g)); } /* Test that GdkRectangle works as a boxed type */ static void test_rectangle_type (void) { GValue value = G_VALUE_INIT; GdkRectangle b = { 5, 5, 10, 10 }; GdkRectangle *c; GValue value2 = G_VALUE_INIT; cairo_rectangle_int_t *c2; g_value_init (&value, GDK_TYPE_RECTANGLE); g_value_set_boxed (&value, &b); c = g_value_get_boxed (&value); g_assert_true (gdk_rectangle_equal (&b, c)); g_assert_true (g_value_type_transformable (GDK_TYPE_RECTANGLE, CAIRO_GOBJECT_TYPE_RECTANGLE_INT)); g_value_init (&value2, CAIRO_GOBJECT_TYPE_RECTANGLE_INT); g_assert_true (g_value_transform (&value, &value2)); c2 = g_value_get_boxed (&value2); g_assert_cmpint (c->x, ==, c2->x); g_assert_cmpint (c->y, ==, c2->y); g_assert_cmpint (c->width, ==, c2->width); g_assert_cmpint (c->height, ==, c2->height); g_value_unset (&value); g_value_unset (&value2); } static void test_rectangle_contains (void) { GdkRectangle b = { 5, 5, 5, 5 }; g_assert_true (gdk_rectangle_contains_point (&b, 5, 5)); g_assert_true (gdk_rectangle_contains_point (&b, 9, 9)); g_assert_false (gdk_rectangle_contains_point (&b, 4, 8)); g_assert_false (gdk_rectangle_contains_point (&b, 10, 6)); } int main (int argc, char *argv[]) { (g_test_init) (&argc, &argv, NULL); gtk_init (); g_test_add_func ("/rectangle/equal", test_rectangle_equal); g_test_add_func ("/rectangle/intersect", test_rectangle_intersect); g_test_add_func ("/rectangle/union", test_rectangle_union); g_test_add_func ("/rectangle/type", test_rectangle_type); g_test_add_func ("/rectangle/contains", test_rectangle_contains); return g_test_run (); }