MCPcopy Create free account
hub / github.com/ashvardanian/StringZilla / test_sha256_equivalence

Function test_sha256_equivalence

scripts/test_stringzilla.cpp:356–388  ·  view source on GitHub ↗

* @brief Tests SHA256 implementations, comparing serial and SIMD variants * against known FIPS 180-4 test vectors. */

Source from the content-addressed store, hash-verified

354 * against known FIPS 180-4 test vectors.
355 */
356void test_sha256_equivalence( //
357 sz_sha256_state_init_t init_base, sz_sha256_state_update_t update_base, sz_sha256_state_digest_t digest_base, //
358 sz_sha256_state_init_t init_simd, sz_sha256_state_update_t update_simd, sz_sha256_state_digest_t digest_simd) {
359
360 // Test random inputs of various lengths
361 for (std::size_t length = 0; length <= 256; ++length) {
362 std::string random_text(length, '\0');
363 randomize_string(&random_text[0], length);
364
365 sz_sha256_state_t state_base, state_simd;
366 sz_u8_t digest_base_result[32], digest_simd_result[32];
367
368 // One-shot hashing
369 init_base(&state_base);
370 init_simd(&state_simd);
371 update_base(&state_base, random_text.data(), length);
372 update_simd(&state_simd, random_text.data(), length);
373 digest_base(&state_base, digest_base_result);
374 digest_simd(&state_simd, digest_simd_result);
375 assert(std::memcmp(digest_base_result, digest_simd_result, 32) == 0);
376
377 // Incremental hashing with random chunks
378 init_base(&state_base);
379 init_simd(&state_simd);
380 iterate_in_random_slices(random_text, [&](std::string slice) {
381 update_base(&state_base, slice.data(), slice.size());
382 update_simd(&state_simd, slice.data(), slice.size());
383 });
384 digest_base(&state_base, digest_base_result);
385 digest_simd(&state_simd, digest_simd_result);
386 assert(std::memcmp(digest_base_result, digest_simd_result, 32) == 0);
387 }
388}
389
390/**
391 * @brief Tests UTF-8 functions across different SIMD backends against the serial implementation.

Callers 1

test_equivalenceFunction · 0.85

Calls 4

randomize_stringFunction · 0.85
iterate_in_random_slicesFunction · 0.85
dataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…