From e2f3d648f935cabde38a79e6c75f1d5555a70d50 Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Fri, 24 Jul 2009 06:48:27 +0000 Subject: [PATCH] Add explanatory comments to the dirty rectangle unit tests. --- tests/dirty.cpp | 171 +++++++++++++++++++++++++++--------------------- 1 file changed, 96 insertions(+), 75 deletions(-) diff --git a/tests/dirty.cpp b/tests/dirty.cpp index 16736c2..ac48f16 100644 --- a/tests/dirty.cpp +++ b/tests/dirty.cpp @@ -41,24 +41,22 @@ public: void test_create() { caca_canvas_t *cv; - int i, dx, dy, dw, dh; + int dx, dy, dw, dh; - /* Check that the dirty rectangle contains the whole canvas - * upon creation. */ + /* Check that we only have one dirty rectangle upon creation. */ cv = caca_create_canvas(WIDTH, HEIGHT); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv)); + /* Check that our only rectangle contains the whole canvas. */ caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT_EQUAL(dx, 0); - CPPUNIT_ASSERT_EQUAL(dy, 0); - CPPUNIT_ASSERT_EQUAL(dw, caca_get_canvas_width(cv)); - CPPUNIT_ASSERT_EQUAL(dh, caca_get_canvas_height(cv)); + CPPUNIT_ASSERT_EQUAL(0, dx); + CPPUNIT_ASSERT_EQUAL(0, dy); + CPPUNIT_ASSERT_EQUAL(WIDTH, dw); + CPPUNIT_ASSERT_EQUAL(HEIGHT, dh); /* Invalidate the dirty rectangle and check that it stays so. */ caca_clear_dirty_rect_list(cv); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 0); + CPPUNIT_ASSERT_EQUAL(0, caca_get_dirty_rect_count(cv)); caca_free_canvas(cv); } @@ -66,124 +64,139 @@ public: void test_put_char_dirty() { caca_canvas_t *cv; - int i, dx, dy, dw, dh; + int dx, dy, dw, dh; cv = caca_create_canvas(WIDTH, HEIGHT); + /* Check that one character creates a 1x1 dirty rect. */ caca_clear_dirty_rect_list(cv); caca_put_char(cv, 7, 3, 'x'); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + + CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv)); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT_EQUAL(dx, 7); - CPPUNIT_ASSERT_EQUAL(dy, 3); - CPPUNIT_ASSERT_EQUAL(dw, 1); - CPPUNIT_ASSERT_EQUAL(dh, 1); + CPPUNIT_ASSERT_EQUAL(7, dx); + CPPUNIT_ASSERT_EQUAL(3, dy); + CPPUNIT_ASSERT_EQUAL(1, dw); + CPPUNIT_ASSERT_EQUAL(1, dh); + /* Check that a fullwidth character creates a 2x1 dirty rect. */ caca_clear_canvas(cv); caca_clear_dirty_rect_list(cv); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + + CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv)); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT_EQUAL(dx, 7); - CPPUNIT_ASSERT_EQUAL(dy, 3); - CPPUNIT_ASSERT_EQUAL(dw, 2); - CPPUNIT_ASSERT_EQUAL(dh, 1); + CPPUNIT_ASSERT_EQUAL(7, dx); + CPPUNIT_ASSERT_EQUAL(3, dy); + CPPUNIT_ASSERT_EQUAL(2, dw); + CPPUNIT_ASSERT_EQUAL(1, dh); + /* Check that a character over a fullwidth character creates a + * 2x1 dirty rect because of clobbering on the left side. */ caca_clear_canvas(cv); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_clear_dirty_rect_list(cv); caca_put_char(cv, 7, 3, 'x'); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + + CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv)); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT_EQUAL(dx, 7); - CPPUNIT_ASSERT_EQUAL(dy, 3); - CPPUNIT_ASSERT_EQUAL(dw, 2); - CPPUNIT_ASSERT_EQUAL(dh, 1); + CPPUNIT_ASSERT_EQUAL(7, dx); + CPPUNIT_ASSERT_EQUAL(3, dy); + CPPUNIT_ASSERT_EQUAL(2, dw); + CPPUNIT_ASSERT_EQUAL(1, dh); + /* Check that a character over a fullwidth character creates a + * 2x1 dirty rect because of clobbering on the right side. */ caca_clear_canvas(cv); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_clear_dirty_rect_list(cv); caca_put_char(cv, 8, 3, 'x'); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + + CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv)); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT_EQUAL(dx, 7); - CPPUNIT_ASSERT_EQUAL(dy, 3); - CPPUNIT_ASSERT_EQUAL(dw, 2); - CPPUNIT_ASSERT_EQUAL(dh, 1); + CPPUNIT_ASSERT_EQUAL(7, dx); + CPPUNIT_ASSERT_EQUAL(3, dy); + CPPUNIT_ASSERT_EQUAL(2, dw); + CPPUNIT_ASSERT_EQUAL(1, dh); + /* Check that a fullwidth character over a fullwidth character creates + * a 3x1 dirty rect because of clobbering on the left side. */ caca_clear_canvas(cv); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_clear_dirty_rect_list(cv); caca_put_char(cv, 6, 3, 0x2f06 /* ⼆ */); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + + CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv)); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT_EQUAL(dx, 6); - CPPUNIT_ASSERT_EQUAL(dy, 3); - CPPUNIT_ASSERT_EQUAL(dw, 3); - CPPUNIT_ASSERT_EQUAL(dh, 1); + CPPUNIT_ASSERT_EQUAL(6, dx); + CPPUNIT_ASSERT_EQUAL(3, dy); + CPPUNIT_ASSERT_EQUAL(3, dw); + CPPUNIT_ASSERT_EQUAL(1, dh); + /* Check that a fullwidth character over a fullwidth character creates + * a 3x1 dirty rect because of clobbering on the right side. */ caca_clear_canvas(cv); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_clear_dirty_rect_list(cv); caca_put_char(cv, 8, 3, 0x2f06 /* ⼆ */); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + + CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv)); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT_EQUAL(dx, 7); - CPPUNIT_ASSERT_EQUAL(dy, 3); - CPPUNIT_ASSERT_EQUAL(dw, 3); - CPPUNIT_ASSERT_EQUAL(dh, 1); + CPPUNIT_ASSERT_EQUAL(7, dx); + CPPUNIT_ASSERT_EQUAL(3, dy); + CPPUNIT_ASSERT_EQUAL(3, dw); + CPPUNIT_ASSERT_EQUAL(1, dh); } void test_put_char_not_dirty() { caca_canvas_t *cv; - int i; cv = caca_create_canvas(WIDTH, HEIGHT); - /* Check that pasting the same character does not cause - * a dirty rectangle to be created. */ + /* Check that pasting the same character does not cause a dirty + * rectangle to be created. */ caca_put_char(cv, 7, 3, 'x'); caca_clear_dirty_rect_list(cv); caca_put_char(cv, 7, 3, 'x'); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 0); + CPPUNIT_ASSERT_EQUAL(0, caca_get_dirty_rect_count(cv)); + + /* Check that pasting the same fullwidth character does not cause + * a dirty rectangle to be created. */ caca_clear_canvas(cv); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_clear_dirty_rect_list(cv); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 0); + + CPPUNIT_ASSERT_EQUAL(0, caca_get_dirty_rect_count(cv)); } void test_box() { caca_canvas_t *cv; - int i, dx, dy, dw, dh; + int dx, dy, dw, dh; cv = caca_create_canvas(WIDTH, HEIGHT); caca_clear_dirty_rect_list(cv); + /* Check that a filled box creates one dirty rectangle of the same + * size. */ caca_fill_box(cv, 7, 3, 14, 9, 'x'); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + + CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv)); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT_EQUAL(dx, 7); - CPPUNIT_ASSERT_EQUAL(dy, 3); - CPPUNIT_ASSERT_EQUAL(dw, 14); - CPPUNIT_ASSERT_EQUAL(dh, 9); + CPPUNIT_ASSERT_EQUAL(7, dx); + CPPUNIT_ASSERT_EQUAL(3, dy); + CPPUNIT_ASSERT_EQUAL(14, dw); + CPPUNIT_ASSERT_EQUAL(9, dh); + /* Check that the same filled box does not create a new dirty + * rectangle. */ caca_clear_dirty_rect_list(cv); caca_fill_box(cv, 7, 3, 14, 9, 'x'); - i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 0); + + CPPUNIT_ASSERT_EQUAL(0, caca_get_dirty_rect_count(cv)); } void test_blit() @@ -198,37 +211,45 @@ public: /* Check that blitting a canvas make a dirty rectangle * only for modified lines */ + /* FIXME: check this test's validity */ caca_blit(cv, 1, 1, cv2, NULL); i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + CPPUNIT_ASSERT_EQUAL(1, i); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT(dx == 1); - CPPUNIT_ASSERT(dy == 1); - CPPUNIT_ASSERT(dw >= 2); - CPPUNIT_ASSERT(dh == 1); + CPPUNIT_ASSERT(1 == dx); + CPPUNIT_ASSERT(1 == dy); + CPPUNIT_ASSERT(2 <= dw); + CPPUNIT_ASSERT(1 == dh); caca_clear_canvas(cv); caca_clear_dirty_rect_list(cv); /* Check that blitting a canvas make a dirty rectangle * only for modified chars when we have a mask */ + /* FIXME: check this test's validity */ caca_blit(cv, 1, 1, cv2, cv2); i = caca_get_dirty_rect_count(cv); - CPPUNIT_ASSERT_EQUAL(i, 1); + CPPUNIT_ASSERT_EQUAL(1, i); caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh); - CPPUNIT_ASSERT(dx == 1); - CPPUNIT_ASSERT(dy == 1); - CPPUNIT_ASSERT(dw == 2); - CPPUNIT_ASSERT(dh == 1); + CPPUNIT_ASSERT(1 == dx); + CPPUNIT_ASSERT(1 == dy); + CPPUNIT_ASSERT(2 == dw); + CPPUNIT_ASSERT(1 == dh); + + CPPUNIT_ASSERT(' ' == caca_get_char(cv, 0, 0)); + } private: - static int const WIDTH = 80, HEIGHT = 50; + static int const WIDTH, HEIGHT; }; +int const DirtyTest::WIDTH = 80; +int const DirtyTest::HEIGHT = 50; + CPPUNIT_TEST_SUITE_REGISTRATION(DirtyTest);