/* Size for compressor auxiliary memory */ static size_t bmz_pack_auxlen(size_t in_len, size_t fp_len) { size_t lz_worklen = bmz_lz_pack_worklen(in_len) + 16; size_t bm_worklen = bmz_bm_pack_worklen(in_len, fp_len) + 16; return bm_worklen > lz_worklen ? bm_worklen : lz_worklen; }
static void test_from_string(const char *data, size_t len) { char *buf, *mem; size_t n = s_times; int opt = s_options; size_t out_len, out_len0, len2 = len, work_len; if (s_show_hash) { show_hash(data, len); return; } out_len0 = out_len = bmz_pack_buflen(len); buf = malloc(len + out_len); work_len = bmz_bm_pack_worklen(len, s_fp_len); mem = malloc(work_len); LOG(1, "input length: %lu, out_len %lu, work_len: %lu\n", (Lu)len, (Lu)out_len, (Lu)work_len); /* memcpy/memmove for comparison */ if (opt & O_MEMCPY) { BENCH("memcpy", memcpy(buf, data, len), len, n); } if (opt & O_CHECK_HASH) { if (opt & O_HASH_MOD) HT_CHECK(bmz_check_hash_mod(data, len, s_fp_len, s_b1, s_m) == BMZ_E_OK); if (opt & O_HASH_MOD16X2) HT_CHECK(bmz_check_hash_mod16x2(data, len, s_fp_len, s_b1, s_b2, s_m1, s_m2) == BMZ_E_OK); if (opt & O_HASH_MASK16X2) HT_CHECK(bmz_check_hash_mask16x2(data, len, s_fp_len, s_b1, s_b2) == BMZ_E_OK); if (opt & O_HASH_MASK) HT_CHECK(bmz_check_hash_mask(data, len, s_fp_len, s_b1) == BMZ_E_OK); if (opt & O_HASH_MASK32X2) HT_CHECK(bmz_check_hash_mask32x2(data, len, s_fp_len, s_b1, s_b2) == BMZ_E_OK); } if (opt & O_BENCH_HASH) { if (opt & O_HASH_MOD) BENCH("hash mod", bmz_bench_hash(data, len, BMZ_HASH_MOD), len, n); if (opt & O_HASH_MOD16X2) BENCH("hash mod16x2", bmz_bench_hash(data, len, BMZ_HASH_MOD16X2), len, n); if (opt & O_HASH_MASK16X2) BENCH("hash mask16x2", bmz_bench_hash(data, len, BMZ_HASH_MASK16X2), len, n); if (opt & O_HASH_MASK) BENCH("hash mask", bmz_bench_hash(data, len, BMZ_HASH_MASK), len, n); if (opt & O_HASH_MASK32X2) BENCH("hash mask32x2", bmz_bench_hash(data, len, BMZ_HASH_MASK32X2), len, n); } if (opt & O_BENCH_LUT) { if (opt & O_HASH_MOD) BENCH("lut mod", bmz_bench_lut_mod(data, len, s_fp_len, mem, s_b1, s_m), len, n); if (opt & O_HASH_MOD16X2) BENCH("lut mod16x2", bmz_bench_lut_mod16x2(data, len, s_fp_len, mem, s_b1, s_b2, s_m1, s_m2), len, n); if (opt & O_HASH_MASK16X2) BENCH("lut mask16x2", bmz_bench_lut_mask16x2(data, len, s_fp_len, mem, s_b1, s_b2), len, n); if (opt & O_HASH_MASK) BENCH("lut mask", bmz_bench_lut_mask(data, len, s_fp_len, mem, s_b1), len, n); if (opt & O_HASH_MASK32X2) BENCH("lut mask32x2", bmz_bench_lut_mask32x2(data, len, s_fp_len, mem, s_b1, s_b2), len, n); } if (opt != O_DEFAULT && (opt & 0xf)) return; if (opt & O_HASH_MOD) { BENCH("bm pack mod", test_bm_mod(data, len, buf, &out_len, mem), len, n); BENCH("bm unpack", test_bm_unpack(buf, out_len, buf + out_len, &len2), len, n); HT_CHECK(len == len2); HT_CHECK(memcmp(data, buf + out_len, len) == 0); } if (opt & O_HASH_MOD16X2) { memset(buf, 0, out_len); out_len = out_len0; BENCH("bm pack mod16x2", test_bm_mod16x2(data, len, buf, &out_len, mem), len, n); BENCH("bm unpack", test_bm_unpack(buf, out_len, buf + out_len, &len2), len, n); HT_CHECK(len == len2); HT_CHECK(memcmp(data, buf + out_len, len) == 0); } if (opt & O_HASH_MASK16X2) { memset(buf, 0, out_len); out_len = out_len0; BENCH("bm pack mask16x2", test_bm_mask16x2(data, len, buf, &out_len, mem), len, n); BENCH("bm unpack", test_bm_unpack(buf, out_len, buf + out_len, &len2), len, n); HT_CHECK(len == len2); HT_CHECK(memcmp(data, buf + out_len, len) == 0); } if (opt & O_HASH_MASK) { memset(buf, 0, out_len); out_len = out_len0; BENCH("bm pack mask", test_bm_mask(data, len, buf, &out_len, mem), len, n); BENCH("bm unpack", test_bm_unpack(buf, out_len, buf + out_len, &len2), len, n); HT_CHECK(len == len2); HT_CHECK(memcmp(data, buf + out_len, len) == 0); } if (opt & O_HASH_MASK32X2) { memset(buf, 0, out_len); out_len = out_len0; BENCH("bm pack mask32x2", test_bm_mask32x2(data, len, buf, &out_len, mem), len, n); BENCH("bm unpack", test_bm_unpack(buf, out_len, buf + out_len, &len2), len, n); HT_CHECK(len == len2); HT_CHECK(memcmp(data, buf + out_len, len) == 0); } }