Browse Source

Add explanatory comments to the dirty rectangle unit tests.

tags/v0.99.beta17
Sam Hocevar sam 15 years ago
parent
commit
e2f3d648f9
1 changed files with 96 additions and 75 deletions
  1. +96
    -75
      tests/dirty.cpp

+ 96
- 75
tests/dirty.cpp View File

@@ -41,24 +41,22 @@ public:
void test_create() void test_create()
{ {
caca_canvas_t *cv; 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); 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); 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. */ /* Invalidate the dirty rectangle and check that it stays so. */
caca_clear_dirty_rect_list(cv); 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); caca_free_canvas(cv);
} }
@@ -66,124 +64,139 @@ public:
void test_put_char_dirty() void test_put_char_dirty()
{ {
caca_canvas_t *cv; caca_canvas_t *cv;
int i, dx, dy, dw, dh;
int dx, dy, dw, dh;


cv = caca_create_canvas(WIDTH, HEIGHT); cv = caca_create_canvas(WIDTH, HEIGHT);


/* Check that one character creates a 1x1 dirty rect. */
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);
caca_put_char(cv, 7, 3, 'x'); 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); 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_canvas(cv);
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);
caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); 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); 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_clear_canvas(cv);
caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);
caca_put_char(cv, 7, 3, 'x'); 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); 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_clear_canvas(cv);
caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);
caca_put_char(cv, 8, 3, 'x'); 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); 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_clear_canvas(cv);
caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);
caca_put_char(cv, 6, 3, 0x2f06 /* ⼆ */); 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); 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_clear_canvas(cv);
caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);
caca_put_char(cv, 8, 3, 0x2f06 /* ⼆ */); 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); 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() void test_put_char_not_dirty()
{ {
caca_canvas_t *cv; caca_canvas_t *cv;
int i;


cv = caca_create_canvas(WIDTH, HEIGHT); 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_put_char(cv, 7, 3, 'x');
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);
caca_put_char(cv, 7, 3, 'x'); 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_clear_canvas(cv);
caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);
caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */); 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() void test_box()
{ {
caca_canvas_t *cv; caca_canvas_t *cv;
int i, dx, dy, dw, dh;
int dx, dy, dw, dh;


cv = caca_create_canvas(WIDTH, HEIGHT); cv = caca_create_canvas(WIDTH, HEIGHT);
caca_clear_dirty_rect_list(cv); 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'); 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); 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_clear_dirty_rect_list(cv);
caca_fill_box(cv, 7, 3, 14, 9, 'x'); 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() void test_blit()
@@ -198,37 +211,45 @@ public:


/* Check that blitting a canvas make a dirty rectangle /* Check that blitting a canvas make a dirty rectangle
* only for modified lines */ * only for modified lines */
/* FIXME: check this test's validity */


caca_blit(cv, 1, 1, cv2, NULL); caca_blit(cv, 1, 1, cv2, NULL);
i = caca_get_dirty_rect_count(cv); 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); 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_canvas(cv);
caca_clear_dirty_rect_list(cv); caca_clear_dirty_rect_list(cv);


/* Check that blitting a canvas make a dirty rectangle /* Check that blitting a canvas make a dirty rectangle
* only for modified chars when we have a mask */ * only for modified chars when we have a mask */
/* FIXME: check this test's validity */


caca_blit(cv, 1, 1, cv2, cv2); caca_blit(cv, 1, 1, cv2, cv2);
i = caca_get_dirty_rect_count(cv); 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); 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: 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); CPPUNIT_TEST_SUITE_REGISTRATION(DirtyTest);



Loading…
Cancel
Save