diff options
Diffstat (limited to 'src/third_party/wiredtiger/test/csuite/wt2695_checksum/main.c')
-rw-r--r-- | src/third_party/wiredtiger/test/csuite/wt2695_checksum/main.c | 208 |
1 files changed, 102 insertions, 106 deletions
diff --git a/src/third_party/wiredtiger/test/csuite/wt2695_checksum/main.c b/src/third_party/wiredtiger/test/csuite/wt2695_checksum/main.c index 6231677b8df..646c1cbc894 100644 --- a/src/third_party/wiredtiger/test/csuite/wt2695_checksum/main.c +++ b/src/third_party/wiredtiger/test/csuite/wt2695_checksum/main.c @@ -28,120 +28,116 @@ #include "test_util.h" /* - * JIRA ticket reference: WT-2695 - * Test case description: Smoke-test the CRC. + * JIRA ticket reference: WT-2695 Test case description: Smoke-test the CRC. */ static inline void check(uint32_t hw, uint32_t sw, size_t len, const char *msg) { - testutil_checkfmt(hw == sw ? 0 : 1, - "%s checksum mismatch of %" WT_SIZET_FMT " bytes: %#08x != %#08x\n", - msg, len, hw, sw); + testutil_checkfmt(hw == sw ? 0 : 1, + "%s checksum mismatch of %" WT_SIZET_FMT " bytes: %#08x != %#08x\n", msg, len, hw, sw); } -#define DATASIZE (128 * 1024) +#define DATASIZE (128 * 1024) int main(int argc, char *argv[]) { - TEST_OPTS *opts, _opts; - WT_RAND_STATE rnd; - size_t len; - uint32_t hw, sw; - uint8_t *data; - u_int i, j; - - opts = &_opts; - memset(opts, 0, sizeof(*opts)); - testutil_check(testutil_parse_opts(argc, argv, opts)); - testutil_make_work_dir(opts->home); - testutil_check( - wiredtiger_open(opts->home, NULL, "create", &opts->conn)); - - /* Initialize the RNG. */ - __wt_random_init_seed(NULL, &rnd); - - /* Allocate aligned memory for the data. */ - data = dcalloc(DATASIZE, sizeof(uint8_t)); - - /* - * Some simple known checksums. - */ - len = 1; - hw = __wt_checksum(data, len); - check(hw, (uint32_t)0x527d5351, len, "nul x1: hardware"); - sw = __wt_checksum_sw(data, len); - check(sw, (uint32_t)0x527d5351, len, "nul x1: software"); - - len = 2; - hw = __wt_checksum(data, len); - check(hw, (uint32_t)0xf16177d2, len, "nul x2: hardware"); - sw = __wt_checksum_sw(data, len); - check(sw, (uint32_t)0xf16177d2, len, "nul x2: software"); - - len = 3; - hw = __wt_checksum(data, len); - check(hw, (uint32_t)0x6064a37a, len, "nul x3: hardware"); - sw = __wt_checksum_sw(data, len); - check(sw, (uint32_t)0x6064a37a, len, "nul x3: software"); - - len = 4; - hw = __wt_checksum(data, len); - check(hw, (uint32_t)0x48674bc7, len, "nul x4: hardware"); - sw = __wt_checksum_sw(data, len); - check(sw, (uint32_t)0x48674bc7, len, "nul x4: software"); - - len = strlen("123456789"); - memcpy(data, "123456789", len); - hw = __wt_checksum(data, len); - check(hw, (uint32_t)0xe3069283, len, "known string #1: hardware"); - sw = __wt_checksum_sw(data, len); - check(sw, (uint32_t)0xe3069283, len, "known string #1: software"); - - len = strlen("The quick brown fox jumps over the lazy dog"); - memcpy(data, "The quick brown fox jumps over the lazy dog", len); - hw = __wt_checksum(data, len); - check(hw, (uint32_t)0x22620404, len, "known string #2: hardware"); - sw = __wt_checksum_sw(data, len); - check(sw, (uint32_t)0x22620404, len, "known string #2: software"); - - /* - * Offset the string by 1 to ensure the hardware code handles unaligned - * reads. - */ - hw = __wt_checksum(data + 1, len - 1); - check(hw, (uint32_t)0xae11f7f5, len, "known string #2: hardware"); - sw = __wt_checksum_sw(data + 1, len - 1); - check(sw, (uint32_t)0xae11f7f5, len, "known string #2: software"); - - /* - * Checksums of power-of-two data chunks. - */ - for (i = 0, len = 512; i < 1000; ++i) { - for (j = 0; j < len; ++j) - data[j] = __wt_random(&rnd) & 0xff; - hw = __wt_checksum(data, len); - sw = __wt_checksum_sw(data, len); - check(hw, sw, len, "random power-of-two"); - - len *= 2; - if (len > DATASIZE) - len = 512; - } - - /* - * Checksums of random data chunks. - */ - for (i = 0; i < 1000; ++i) { - len = __wt_random(&rnd) % DATASIZE; - for (j = 0; j < len; ++j) - data[j] = __wt_random(&rnd) & 0xff; - hw = __wt_checksum(data, len); - sw = __wt_checksum_sw(data, len); - check(hw, sw, len, "random"); - } - - free(data); - testutil_cleanup(opts); - return (EXIT_SUCCESS); + TEST_OPTS *opts, _opts; + WT_RAND_STATE rnd; + size_t len; + uint32_t hw, sw; + uint8_t *data; + u_int i, j; + + opts = &_opts; + memset(opts, 0, sizeof(*opts)); + testutil_check(testutil_parse_opts(argc, argv, opts)); + testutil_make_work_dir(opts->home); + testutil_check(wiredtiger_open(opts->home, NULL, "create", &opts->conn)); + + /* Initialize the RNG. */ + __wt_random_init_seed(NULL, &rnd); + + /* Allocate aligned memory for the data. */ + data = dcalloc(DATASIZE, sizeof(uint8_t)); + + /* + * Some simple known checksums. + */ + len = 1; + hw = __wt_checksum(data, len); + check(hw, (uint32_t)0x527d5351, len, "nul x1: hardware"); + sw = __wt_checksum_sw(data, len); + check(sw, (uint32_t)0x527d5351, len, "nul x1: software"); + + len = 2; + hw = __wt_checksum(data, len); + check(hw, (uint32_t)0xf16177d2, len, "nul x2: hardware"); + sw = __wt_checksum_sw(data, len); + check(sw, (uint32_t)0xf16177d2, len, "nul x2: software"); + + len = 3; + hw = __wt_checksum(data, len); + check(hw, (uint32_t)0x6064a37a, len, "nul x3: hardware"); + sw = __wt_checksum_sw(data, len); + check(sw, (uint32_t)0x6064a37a, len, "nul x3: software"); + + len = 4; + hw = __wt_checksum(data, len); + check(hw, (uint32_t)0x48674bc7, len, "nul x4: hardware"); + sw = __wt_checksum_sw(data, len); + check(sw, (uint32_t)0x48674bc7, len, "nul x4: software"); + + len = strlen("123456789"); + memcpy(data, "123456789", len); + hw = __wt_checksum(data, len); + check(hw, (uint32_t)0xe3069283, len, "known string #1: hardware"); + sw = __wt_checksum_sw(data, len); + check(sw, (uint32_t)0xe3069283, len, "known string #1: software"); + + len = strlen("The quick brown fox jumps over the lazy dog"); + memcpy(data, "The quick brown fox jumps over the lazy dog", len); + hw = __wt_checksum(data, len); + check(hw, (uint32_t)0x22620404, len, "known string #2: hardware"); + sw = __wt_checksum_sw(data, len); + check(sw, (uint32_t)0x22620404, len, "known string #2: software"); + + /* + * Offset the string by 1 to ensure the hardware code handles unaligned reads. + */ + hw = __wt_checksum(data + 1, len - 1); + check(hw, (uint32_t)0xae11f7f5, len, "known string #2: hardware"); + sw = __wt_checksum_sw(data + 1, len - 1); + check(sw, (uint32_t)0xae11f7f5, len, "known string #2: software"); + + /* + * Checksums of power-of-two data chunks. + */ + for (i = 0, len = 512; i < 1000; ++i) { + for (j = 0; j < len; ++j) + data[j] = __wt_random(&rnd) & 0xff; + hw = __wt_checksum(data, len); + sw = __wt_checksum_sw(data, len); + check(hw, sw, len, "random power-of-two"); + + len *= 2; + if (len > DATASIZE) + len = 512; + } + + /* + * Checksums of random data chunks. + */ + for (i = 0; i < 1000; ++i) { + len = __wt_random(&rnd) % DATASIZE; + for (j = 0; j < len; ++j) + data[j] = __wt_random(&rnd) & 0xff; + hw = __wt_checksum(data, len); + sw = __wt_checksum_sw(data, len); + check(hw, sw, len, "random"); + } + + free(data); + testutil_cleanup(opts); + return (EXIT_SUCCESS); } |