Changeset 3567 for libcaca/trunk


Ignore:
Timestamp:
Jul 24, 2009, 8:48:27 AM (10 years ago)
Author:
Sam Hocevar
Message:

Add explanatory comments to the dirty rectangle unit tests.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/tests/dirty.cpp

    r3557 r3567  
    4242    {
    4343        caca_canvas_t *cv;
    44         int i, dx, dy, dw, dh;
    45 
    46         /* Check that the dirty rectangle contains the whole canvas
    47          * upon creation. */
    48         cv = caca_create_canvas(WIDTH, HEIGHT);
    49         i = caca_get_dirty_rect_count(cv);
    50         CPPUNIT_ASSERT_EQUAL(i, 1);
    51 
    52         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    53         CPPUNIT_ASSERT_EQUAL(dx, 0);
    54         CPPUNIT_ASSERT_EQUAL(dy, 0);
    55         CPPUNIT_ASSERT_EQUAL(dw, caca_get_canvas_width(cv));
    56         CPPUNIT_ASSERT_EQUAL(dh, caca_get_canvas_height(cv));
     44        int dx, dy, dw, dh;
     45
     46        /* Check that we only have one dirty rectangle upon creation. */
     47        cv = caca_create_canvas(WIDTH, HEIGHT);
     48        CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv));
     49
     50        /* Check that our only rectangle contains the whole canvas. */
     51        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     52        CPPUNIT_ASSERT_EQUAL(0, dx);
     53        CPPUNIT_ASSERT_EQUAL(0, dy);
     54        CPPUNIT_ASSERT_EQUAL(WIDTH, dw);
     55        CPPUNIT_ASSERT_EQUAL(HEIGHT, dh);
    5756
    5857        /* Invalidate the dirty rectangle and check that it stays so. */
    5958        caca_clear_dirty_rect_list(cv);
    60         i = caca_get_dirty_rect_count(cv);
    61         CPPUNIT_ASSERT_EQUAL(i, 0);
     59        CPPUNIT_ASSERT_EQUAL(0, caca_get_dirty_rect_count(cv));
    6260
    6361        caca_free_canvas(cv);
     
    6765    {
    6866        caca_canvas_t *cv;
    69         int i, dx, dy, dw, dh;
    70 
    71         cv = caca_create_canvas(WIDTH, HEIGHT);
    72 
    73         caca_clear_dirty_rect_list(cv);
    74         caca_put_char(cv, 7, 3, 'x');
    75         i = caca_get_dirty_rect_count(cv);
    76         CPPUNIT_ASSERT_EQUAL(i, 1);
    77         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    78         CPPUNIT_ASSERT_EQUAL(dx, 7);
    79         CPPUNIT_ASSERT_EQUAL(dy, 3);
    80         CPPUNIT_ASSERT_EQUAL(dw, 1);
    81         CPPUNIT_ASSERT_EQUAL(dh, 1);
    82 
    83         caca_clear_canvas(cv);
    84         caca_clear_dirty_rect_list(cv);
    85         caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    86         i = caca_get_dirty_rect_count(cv);
    87         CPPUNIT_ASSERT_EQUAL(i, 1);
    88         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    89         CPPUNIT_ASSERT_EQUAL(dx, 7);
    90         CPPUNIT_ASSERT_EQUAL(dy, 3);
    91         CPPUNIT_ASSERT_EQUAL(dw, 2);
    92         CPPUNIT_ASSERT_EQUAL(dh, 1);
    93 
    94         caca_clear_canvas(cv);
    95         caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    96         caca_clear_dirty_rect_list(cv);
    97         caca_put_char(cv, 7, 3, 'x');
    98         i = caca_get_dirty_rect_count(cv);
    99         CPPUNIT_ASSERT_EQUAL(i, 1);
    100         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    101         CPPUNIT_ASSERT_EQUAL(dx, 7);
    102         CPPUNIT_ASSERT_EQUAL(dy, 3);
    103         CPPUNIT_ASSERT_EQUAL(dw, 2);
    104         CPPUNIT_ASSERT_EQUAL(dh, 1);
    105 
     67        int dx, dy, dw, dh;
     68
     69        cv = caca_create_canvas(WIDTH, HEIGHT);
     70
     71        /* Check that one character creates a 1x1 dirty rect. */
     72        caca_clear_dirty_rect_list(cv);
     73        caca_put_char(cv, 7, 3, 'x');
     74
     75        CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv));
     76        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     77        CPPUNIT_ASSERT_EQUAL(7, dx);
     78        CPPUNIT_ASSERT_EQUAL(3, dy);
     79        CPPUNIT_ASSERT_EQUAL(1, dw);
     80        CPPUNIT_ASSERT_EQUAL(1, dh);
     81
     82        /* Check that a fullwidth character creates a 2x1 dirty rect. */
     83        caca_clear_canvas(cv);
     84        caca_clear_dirty_rect_list(cv);
     85        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
     86
     87        CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv));
     88        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     89        CPPUNIT_ASSERT_EQUAL(7, dx);
     90        CPPUNIT_ASSERT_EQUAL(3, dy);
     91        CPPUNIT_ASSERT_EQUAL(2, dw);
     92        CPPUNIT_ASSERT_EQUAL(1, dh);
     93
     94        /* Check that a character over a fullwidth character creates a
     95         * 2x1 dirty rect because of clobbering on the left side. */
     96        caca_clear_canvas(cv);
     97        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
     98        caca_clear_dirty_rect_list(cv);
     99        caca_put_char(cv, 7, 3, 'x');
     100
     101        CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv));
     102        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     103        CPPUNIT_ASSERT_EQUAL(7, dx);
     104        CPPUNIT_ASSERT_EQUAL(3, dy);
     105        CPPUNIT_ASSERT_EQUAL(2, dw);
     106        CPPUNIT_ASSERT_EQUAL(1, dh);
     107
     108        /* Check that a character over a fullwidth character creates a
     109         * 2x1 dirty rect because of clobbering on the right side. */
    106110        caca_clear_canvas(cv);
    107111        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    108112        caca_clear_dirty_rect_list(cv);
    109113        caca_put_char(cv, 8, 3, 'x');
    110         i = caca_get_dirty_rect_count(cv);
    111         CPPUNIT_ASSERT_EQUAL(i, 1);
    112         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    113         CPPUNIT_ASSERT_EQUAL(dx, 7);
    114         CPPUNIT_ASSERT_EQUAL(dy, 3);
    115         CPPUNIT_ASSERT_EQUAL(dw, 2);
    116         CPPUNIT_ASSERT_EQUAL(dh, 1);
    117 
     114
     115        CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv));
     116        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     117        CPPUNIT_ASSERT_EQUAL(7, dx);
     118        CPPUNIT_ASSERT_EQUAL(3, dy);
     119        CPPUNIT_ASSERT_EQUAL(2, dw);
     120        CPPUNIT_ASSERT_EQUAL(1, dh);
     121
     122        /* Check that a fullwidth character over a fullwidth character creates
     123         * a 3x1 dirty rect because of clobbering on the left side. */
    118124        caca_clear_canvas(cv);
    119125        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    120126        caca_clear_dirty_rect_list(cv);
    121127        caca_put_char(cv, 6, 3, 0x2f06 /* ⼆ */);
    122         i = caca_get_dirty_rect_count(cv);
    123         CPPUNIT_ASSERT_EQUAL(i, 1);
    124         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    125         CPPUNIT_ASSERT_EQUAL(dx, 6);
    126         CPPUNIT_ASSERT_EQUAL(dy, 3);
    127         CPPUNIT_ASSERT_EQUAL(dw, 3);
    128         CPPUNIT_ASSERT_EQUAL(dh, 1);
    129 
     128
     129        CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv));
     130        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     131        CPPUNIT_ASSERT_EQUAL(6, dx);
     132        CPPUNIT_ASSERT_EQUAL(3, dy);
     133        CPPUNIT_ASSERT_EQUAL(3, dw);
     134        CPPUNIT_ASSERT_EQUAL(1, dh);
     135
     136        /* Check that a fullwidth character over a fullwidth character creates
     137         * a 3x1 dirty rect because of clobbering on the right side. */
    130138        caca_clear_canvas(cv);
    131139        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    132140        caca_clear_dirty_rect_list(cv);
    133141        caca_put_char(cv, 8, 3, 0x2f06 /* ⼆ */);
    134         i = caca_get_dirty_rect_count(cv);
    135         CPPUNIT_ASSERT_EQUAL(i, 1);
    136         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    137         CPPUNIT_ASSERT_EQUAL(dx, 7);
    138         CPPUNIT_ASSERT_EQUAL(dy, 3);
    139         CPPUNIT_ASSERT_EQUAL(dw, 3);
    140         CPPUNIT_ASSERT_EQUAL(dh, 1);
     142
     143        CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv));
     144        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     145        CPPUNIT_ASSERT_EQUAL(7, dx);
     146        CPPUNIT_ASSERT_EQUAL(3, dy);
     147        CPPUNIT_ASSERT_EQUAL(3, dw);
     148        CPPUNIT_ASSERT_EQUAL(1, dh);
    141149    }
    142150
     
    144152    {
    145153        caca_canvas_t *cv;
    146         int i;
    147 
    148         cv = caca_create_canvas(WIDTH, HEIGHT);
    149 
    150         /* Check that pasting the same character does not cause
     154
     155        cv = caca_create_canvas(WIDTH, HEIGHT);
     156
     157        /* Check that pasting the same character does not cause a dirty
     158         * rectangle to be created. */
     159        caca_put_char(cv, 7, 3, 'x');
     160        caca_clear_dirty_rect_list(cv);
     161        caca_put_char(cv, 7, 3, 'x');
     162
     163        CPPUNIT_ASSERT_EQUAL(0, caca_get_dirty_rect_count(cv));
     164
     165        /* Check that pasting the same fullwidth character does not cause
    151166         * a dirty rectangle to be created. */
    152         caca_put_char(cv, 7, 3, 'x');
    153         caca_clear_dirty_rect_list(cv);
    154         caca_put_char(cv, 7, 3, 'x');
    155         i = caca_get_dirty_rect_count(cv);
    156         CPPUNIT_ASSERT_EQUAL(i, 0);
    157 
    158         caca_clear_canvas(cv);
    159         caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    160         caca_clear_dirty_rect_list(cv);
    161         caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
    162         i = caca_get_dirty_rect_count(cv);
    163         CPPUNIT_ASSERT_EQUAL(i, 0);
     167        caca_clear_canvas(cv);
     168        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
     169        caca_clear_dirty_rect_list(cv);
     170        caca_put_char(cv, 7, 3, 0x2f06 /* ⼆ */);
     171
     172        CPPUNIT_ASSERT_EQUAL(0, caca_get_dirty_rect_count(cv));
    164173    }
    165174
     
    167176    {
    168177        caca_canvas_t *cv;
    169         int i, dx, dy, dw, dh;
    170 
    171         cv = caca_create_canvas(WIDTH, HEIGHT);
    172         caca_clear_dirty_rect_list(cv);
    173 
     178        int dx, dy, dw, dh;
     179
     180        cv = caca_create_canvas(WIDTH, HEIGHT);
     181        caca_clear_dirty_rect_list(cv);
     182
     183        /* Check that a filled box creates one dirty rectangle of the same
     184         * size. */
    174185        caca_fill_box(cv, 7, 3, 14, 9, 'x');
    175         i = caca_get_dirty_rect_count(cv);
    176         CPPUNIT_ASSERT_EQUAL(i, 1);
    177         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    178         CPPUNIT_ASSERT_EQUAL(dx, 7);
    179         CPPUNIT_ASSERT_EQUAL(dy, 3);
    180         CPPUNIT_ASSERT_EQUAL(dw, 14);
    181         CPPUNIT_ASSERT_EQUAL(dh, 9);
    182 
     186
     187        CPPUNIT_ASSERT_EQUAL(1, caca_get_dirty_rect_count(cv));
     188        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     189        CPPUNIT_ASSERT_EQUAL(7, dx);
     190        CPPUNIT_ASSERT_EQUAL(3, dy);
     191        CPPUNIT_ASSERT_EQUAL(14, dw);
     192        CPPUNIT_ASSERT_EQUAL(9, dh);
     193
     194        /* Check that the same filled box does not create a new dirty
     195         * rectangle. */
    183196        caca_clear_dirty_rect_list(cv);
    184197        caca_fill_box(cv, 7, 3, 14, 9, 'x');
    185         i = caca_get_dirty_rect_count(cv);
    186         CPPUNIT_ASSERT_EQUAL(i, 0);
     198
     199        CPPUNIT_ASSERT_EQUAL(0, caca_get_dirty_rect_count(cv));
    187200    }
    188201
     
    199212        /* Check that blitting a canvas make a dirty rectangle
    200213         * only for modified lines */
     214        /* FIXME: check this test's validity */
    201215
    202216        caca_blit(cv, 1, 1, cv2, NULL);
    203217        i = caca_get_dirty_rect_count(cv);
    204         CPPUNIT_ASSERT_EQUAL(i, 1);
    205         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    206 
    207         CPPUNIT_ASSERT(dx == 1);
    208         CPPUNIT_ASSERT(dy == 1);
    209         CPPUNIT_ASSERT(dw >= 2);
    210         CPPUNIT_ASSERT(dh == 1);
     218        CPPUNIT_ASSERT_EQUAL(1, i);
     219        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     220
     221        CPPUNIT_ASSERT(1 == dx);
     222        CPPUNIT_ASSERT(1 == dy);
     223        CPPUNIT_ASSERT(2 <= dw);
     224        CPPUNIT_ASSERT(1 == dh);
    211225
    212226        caca_clear_canvas(cv);
     
    215229        /* Check that blitting a canvas make a dirty rectangle
    216230         * only for modified chars when we have a mask */
     231        /* FIXME: check this test's validity */
    217232
    218233        caca_blit(cv, 1, 1, cv2, cv2);
    219234        i = caca_get_dirty_rect_count(cv);
    220         CPPUNIT_ASSERT_EQUAL(i, 1);
    221         caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
    222 
    223         CPPUNIT_ASSERT(dx == 1);
    224         CPPUNIT_ASSERT(dy == 1);
    225         CPPUNIT_ASSERT(dw == 2);
    226         CPPUNIT_ASSERT(dh == 1);
     235        CPPUNIT_ASSERT_EQUAL(1, i);
     236        caca_get_dirty_rect(cv, 0, &dx, &dy, &dw, &dh);
     237
     238        CPPUNIT_ASSERT(1 == dx);
     239        CPPUNIT_ASSERT(1 == dy);
     240        CPPUNIT_ASSERT(2 == dw);
     241        CPPUNIT_ASSERT(1 == dh);
     242
     243        CPPUNIT_ASSERT(' ' == caca_get_char(cv, 0, 0));
     244
    227245    }
    228246
    229247private:
    230     static int const WIDTH = 80, HEIGHT = 50;
     248    static int const WIDTH, HEIGHT;
    231249};
    232250
     251int const DirtyTest::WIDTH = 80;
     252int const DirtyTest::HEIGHT = 50;
     253
    233254CPPUNIT_TEST_SUITE_REGISTRATION(DirtyTest);
    234255
Note: See TracChangeset for help on using the changeset viewer.