From: Bart Van Assche Date: Sat, 10 May 2008 08:21:07 +0000 (+0000) Subject: Added more tests. X-Git-Tag: svn/VALGRIND_3_4_0~614 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ae3d166080a01ed621da3255ec85b06334274f45;p=thirdparty%2Fvalgrind.git Added more tests. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@8024 --- diff --git a/exp-drd/tests/drd_bitmap_test.c b/exp-drd/tests/drd_bitmap_test.c index 115e97545c..bc17a7533a 100644 --- a/exp-drd/tests/drd_bitmap_test.c +++ b/exp-drd/tests/drd_bitmap_test.c @@ -116,7 +116,7 @@ void bm_test1(void) bm_delete(bm2); } -/* Test whether bm_equal() works correctly. */ +/** Test whether bm_equal() works correctly. */ void bm_test2() { struct bitmap* bm1; @@ -134,8 +134,101 @@ void bm_test2() bm_access_store_1(bm1, ADDR0_COUNT + 7); assert(! bm_equal(bm1, bm2)); assert(! bm_equal(bm2, bm1)); + bm_delete(bm2); bm_delete(bm1); +} + +/** Torture test of the functions that set or clear a range of bits. */ +void bm_test3() +{ + unsigned i, j; + struct bitmap* bm1; + struct bitmap* bm2; + + bm1 = bm_new(); + bm2 = bm_new(); + for (i = ADDR0_COUNT - 2 * BITS_PER_UWORD; + i < ADDR0_COUNT + 2 * BITS_PER_UWORD; + i+=3) + { + for (j = i + 1; j < ADDR0_COUNT + 2 * BITS_PER_UWORD; j+=5) + { + bm_access_range_load(bm1, i, j); + bm_clear_load(bm1, i, j); + assert(bm_equal(bm1, bm2)); + bm_access_load_1(bm1, i); + bm_clear_load(bm1, i, i+1); + assert(bm_equal(bm1, bm2)); + bm_access_load_2(bm1, i); + bm_clear_load(bm1, i, i+2); + assert(bm_equal(bm1, bm2)); + bm_access_load_4(bm1, i); + bm_clear_load(bm1, i, i+4); + assert(bm_equal(bm1, bm2)); + bm_access_load_8(bm1, i); + bm_clear_load(bm1, i, i+8); + assert(bm_equal(bm1, bm2)); + bm_access_range_store(bm1, i, j); + bm_clear_store(bm1, i, j); + assert(bm_equal(bm1, bm2)); + bm_access_store_1(bm1, i); + bm_clear_store(bm1, i, i + 1); + assert(bm_equal(bm1, bm2)); + bm_access_store_2(bm1, i); + bm_clear_store(bm1, i, i + 2); + assert(bm_equal(bm1, bm2)); + bm_access_store_4(bm1, i); + bm_clear_store(bm1, i, i + 4); + assert(bm_equal(bm1, bm2)); + bm_access_store_8(bm1, i); + bm_clear_store(bm1, i, i + 8); + assert(bm_equal(bm1, bm2)); + } + } + bm_access_range_load(bm1, 0, 2 * ADDR0_COUNT + 2 * BITS_PER_UWORD); + bm_access_range_store(bm1, 0, 2 * ADDR0_COUNT + 2 * BITS_PER_UWORD); + bm_access_range_load(bm2, 0, 2 * ADDR0_COUNT + 2 * BITS_PER_UWORD); + bm_access_range_store(bm2, 0, 2 * ADDR0_COUNT + 2 * BITS_PER_UWORD); + for (i = ADDR0_COUNT - 2 * BITS_PER_UWORD; + i < ADDR0_COUNT + 2 * BITS_PER_UWORD; + i+=3) + { + for (j = i + 1; j < ADDR0_COUNT + 2 * BITS_PER_UWORD; j+=5) + { + bm_clear_load(bm1, i, j); + bm_access_range_load(bm1, i, j); + assert(bm_equal(bm1, bm2)); + bm_clear_load(bm1, i, i+1); + bm_access_load_1(bm1, i); + assert(bm_equal(bm1, bm2)); + bm_clear_load(bm1, i, i+2); + bm_access_load_2(bm1, i); + assert(bm_equal(bm1, bm2)); + bm_clear_load(bm1, i, i+4); + bm_access_load_4(bm1, i); + assert(bm_equal(bm1, bm2)); + bm_clear_load(bm1, i, i+8); + bm_access_load_8(bm1, i); + assert(bm_equal(bm1, bm2)); + bm_clear_store(bm1, i, j); + bm_access_range_store(bm1, i, j); + assert(bm_equal(bm1, bm2)); + bm_clear_store(bm1, i, i+1); + bm_access_store_1(bm1, i); + assert(bm_equal(bm1, bm2)); + bm_clear_store(bm1, i, i+2); + bm_access_store_2(bm1, i); + assert(bm_equal(bm1, bm2)); + bm_clear_store(bm1, i, i+4); + bm_access_store_4(bm1, i); + assert(bm_equal(bm1, bm2)); + bm_clear_store(bm1, i, i+8); + bm_access_store_8(bm1, i); + assert(bm_equal(bm1, bm2)); + } + } bm_delete(bm2); + bm_delete(bm1); } int main(int argc, char** argv) @@ -159,6 +252,7 @@ int main(int argc, char** argv) bm_test1(); bm_test2(); + bm_test3(); VG_(printf)("End of DRD BM unit test.\n");