Files
c3c/test/unit/stdlib/hash/adler32.c3
soerlemans 152558f5bc Optimized adler32 hashing algorithm. (#2948)
* Optimized adler32 implementations.

 - Adapted adler32 implementation from Crypto++ public domain library.
 - Added unit tests for adler32 hashing algorithm.

* tabified adler32 implementation to match stdlib.

* Formatting to be consistent. Make unrolling use macro.

---------

Co-authored-by: soerlemans <sebasoerlemans+git@gmail.com>
Co-authored-by: Christoffer Lerno <christoffer@aegik.com>
2026-02-19 17:51:33 +01:00

65 lines
1.3 KiB
Plaintext

module adler32_test @test;
import std::hash::adler32;
import std::io;
fn void test_adler32_empty()
{
const uint EXPECTED = 0x1;
Adler32 adl;
adl.init();
adl.update("");
uint final = adl.final();
test::@check(final == EXPECTED, "Actual Adler32: 0x%x == 0x%x", final, EXPECTED);
}
fn void test_adler32_a()
{
const uint EXPECTED = 0x00620062;
Adler32 adl;
adl.init();
adl.updatec('a');
uint final = adl.final();
test::@check(final == EXPECTED, "Actual Adler32: 0x%x == 0x%x", final, EXPECTED);
}
fn void test_adler32_abc()
{
const uint EXPECTED = 0x024d0127;
Adler32 adl;
adl.init();
adl.update("abc");
uint final = adl.final();
test::@check(final == EXPECTED, "Actual Adler32: 0x%x == 0x%x", final, EXPECTED);
}
fn void test_adler32_longer()
{
const uint EXPECTED = 0x07822df1;
Adler32 adl;
adl.init();
adl.update("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopqabcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq");
uint final = adl.final();
test::@check(final == EXPECTED, "Actual Adler32: 0x%x == 0x%x", final, EXPECTED);
}
fn void test_adler32_alphabet()
{
const uint EXPECTED = 0x90860b20;
Adler32 adl;
adl.init();
adl.update("abcdefghijklmnopqrstuvwxyz");
uint final = adl.final();
test::@check(final == EXPECTED, "Actual Adler32: 0x%x == 0x%x", final, EXPECTED);
}