package crc32_test; import hash.crc32; fn putstr(s: str, into: []u8, off: i32) i32 = { let i: i32 = 0; for (i < s.len) { into[off + i] = s[i]; i += 1; }; return off + s.len; }; fn check(s: str, ieee: u32, cast: u32, koop: u32) void = { let arr: [128]u8; let n: i32 = putstr(s, arr[0:128], 0); let buf: []u8 = arr[0:n]; assert(!(crc32.sum32ieee(buf) != ieee)); assert(!(crc32.sum32castagnoli(buf) != cast)); assert(!(crc32.sum32koopman(buf) != koop)); }; @test fn vec_empty() void = { let arr: [1]u8; let buf: []u8 = arr[0:0]; assert(!(crc32.sum32ieee(buf) != 0u32)); assert(!(crc32.sum32castagnoli(buf) != 0u32)); assert(!(crc32.sum32koopman(buf) != 0u32)); }; @test fn vec_fire() void = { check("Give a man a fire, they be warm for a day", 4026734998u32, 2112273292u32, 1263149916u32); }; @test fn vec_setfire() void = { check("Set a man on fire, they be warm for the rest of their life", 3931092334u32, 4172943610u32, 3071632577u32); }; @test fn vec_blm() void = { check("Black lives matter", 2370964079u32, 2068416418u32, 4151357773u32); }; @test fn vec_unix() void = { check("UNIX is simple and coherent", 3254252081u32, 1650777601u32, 340189632u32); }; @test fn vec_gnu() void = { check("GNU's not UNIX", 224734747u32, 200511816u32, 332335539u32); };