summaryrefslogtreecommitdiff
path: root/test/fuzz
diff options
context:
space:
mode:
authorSebastian Pop <s.pop@samsung.com>2018-11-15 14:31:43 -0600
committerHans Kristian Rosbach <hk-github@circlestorm.org>2018-12-08 12:36:30 +0100
commit6f0b2031e755564a8da5b15e639852cd45f4ac92 (patch)
treedf34473d815050710cc5c35d3c1f21038164dc76 /test/fuzz
parentcc36e352bafd42a2cddffdff926acdbe448da89f (diff)
downloadProject-Tick-6f0b2031e755564a8da5b15e639852cd45f4ac92.tar.gz
Project-Tick-6f0b2031e755564a8da5b15e639852cd45f4ac92.zip
add test/fuzz for fast crc32
Diffstat (limited to 'test/fuzz')
-rw-r--r--test/fuzz/checksum_fuzzer.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/test/fuzz/checksum_fuzzer.c b/test/fuzz/checksum_fuzzer.c
index e7003dd8c6..10fc138fb8 100644
--- a/test/fuzz/checksum_fuzzer.c
+++ b/test/fuzz/checksum_fuzzer.c
@@ -14,13 +14,16 @@
#endif
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataLen) {
- uint32_t crc1 = PREFIX(crc32)(0L, NULL, 0);
- uint32_t crc2 = PREFIX(crc32)(0L, NULL, 0);
- uint32_t adler1 = PREFIX(adler32)(0L, NULL, 0);
- uint32_t adler2 = PREFIX(adler32)(0L, NULL, 0);;
+ uint32_t crc0 = PREFIX(crc32)(0L, NULL, 0);
+ uint32_t crc1 = crc0;
+ uint32_t crc2 = crc0;
+ uint32_t adler0 = PREFIX(adler32)(0L, NULL, 0);
+ uint32_t adler1 = adler0;
+ uint32_t adler2 = adler0;
/* Checksum with a buffer of size equal to the first byte in the input. */
uint32_t buffSize = data[0];
uint32_t offset = 0;
+ uint32_t op[32];
/* Discard inputs larger than 1Mb. */
static size_t kMaxSize = 1024 * 1024;
@@ -32,8 +35,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataLen) {
++buffSize;
/* CRC32 */
- for (offset = 0; offset + buffSize <= dataLen; offset += buffSize)
+ PREFIX(crc32_combine_gen)(op, buffSize);
+ for (offset = 0; offset + buffSize <= dataLen; offset += buffSize) {
+ uint32_t crc3 = PREFIX(crc32_z)(crc0, data + offset, buffSize);
+ uint32_t crc4 = PREFIX(crc32_combine_op)(crc1, crc3, op);
crc1 = PREFIX(crc32_z)(crc1, data + offset, buffSize);
+ assert(crc1 == crc4);
+ }
crc1 = PREFIX(crc32_z)(crc1, data + offset, dataLen % buffSize);
crc2 = PREFIX(crc32_z)(crc2, data, dataLen);
@@ -42,6 +50,13 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t dataLen) {
assert(PREFIX(crc32_combine)(crc1, crc2, dataLen) ==
PREFIX(crc32_combine)(crc1, crc1, dataLen));
+ /* Fast CRC32 combine. */
+ PREFIX(crc32_combine_gen)(op, dataLen);
+ assert(PREFIX(crc32_combine_op)(crc1, crc2, op) ==
+ PREFIX(crc32_combine_op)(crc2, crc1, op));
+ assert(PREFIX(crc32_combine)(crc1, crc2, dataLen) ==
+ PREFIX(crc32_combine_op)(crc2, crc1, op));
+
/* Adler32 */
for (offset = 0; offset + buffSize <= dataLen; offset += buffSize)
adler1 = PREFIX(adler32_z)(adler1, data + offset, buffSize);