diff --git a/lib/std/compress/xz/Decompress.zig b/lib/std/compress/xz/Decompress.zig index 2fff561c73862a382eb5ff30e3d0a8418ad2bec6..5fc5a6068eb41137c604a6ba26e7fe35ed5ab7d3 100644 --- a/lib/std/compress/xz/Decompress.zig +++ b/lib/std/compress/xz/Decompress.zig @@ -2,8 +2,8 @@ const Decompress = @This(); const std = @import("../../std.zig"); const Allocator = std.mem.Allocator; const ArrayList = std.ArrayList; -const Crc32 = std.hash.Crc32; -const Crc64 = std.hash.crc.Crc64Xz; +const Crc32 = std.hash.crc.@"CRC-32/ISO-HDLC"; +const Crc64 = std.hash.crc.@"CRC-64/XZ"; const Sha256 = std.crypto.hash.sha2.Sha256; const lzma2 = std.compress.lzma2; const Writer = std.Io.Writer; diff --git a/lib/std/debug/ElfFile.zig b/lib/std/debug/ElfFile.zig index 22ea71af4443d78f05f45ae90b13708c0ceb5610..0ea4207c3521830ca4a1b9b1a1a0567cb97b5201 100644 --- a/lib/std/debug/ElfFile.zig +++ b/lib/std/debug/ElfFile.zig @@ -455,7 +455,7 @@ fn loadInner( }; if (opt_crc) |crc| { - if (std.hash.crc.Crc32.hash(mapped_mem) != crc) { + if (std.hash.Crc32.hash(mapped_mem) != crc) { return error.CrcMismatch; } } diff --git a/lib/std/hash.zig b/lib/std/hash.zig index e8d2aa85b13e7dbec1ffbc541bcbeb95a9264261..5ae3734ad2d8c30837b4c69f30866658016f8698 100644 --- a/lib/std/hash.zig +++ b/lib/std/hash.zig @@ -5,9 +5,8 @@ pub const autoHash = auto_hash.autoHash; pub const autoHashStrat = auto_hash.hash; pub const Strategy = auto_hash.HashStrategy; -// pub for polynomials + generic crc32 construction pub const crc = @import("hash/crc.zig"); -pub const Crc32 = crc.Crc32; +pub const Crc32 = crc.@"CRC-32/ISO-HDLC"; const fnv = @import("hash/fnv.zig"); pub const Fnv1a_32 = fnv.Fnv1a_32; diff --git a/lib/std/hash/benchmark.zig b/lib/std/hash/benchmark.zig index e5467f421154747181b0d14c1bada7ac28a462ee..3f5b763d9b0f2eb207b597c8e41098f272a090d0 100644 --- a/lib/std/hash/benchmark.zig +++ b/lib/std/hash/benchmark.zig @@ -61,7 +61,7 @@ const hashes = [_]Hash{ .init_default = true, }, Hash{ - .ty = hash.crc.Crc32, + .ty = hash.Crc32, .name = "crc32", }, Hash{ diff --git a/lib/std/hash/crc.zig b/lib/std/hash/crc.zig index d81fee7774ce49362ec6c92414047f8d803d3b59..795f6a5f5e61ba60b3cbb33efd6605848a91cff8 100644 --- a/lib/std/hash/crc.zig +++ b/lib/std/hash/crc.zig @@ -1,31 +1,8 @@ //! This file is auto-generated by tools/update_crc_catalog.zig. const builtin = @import("builtin"); -const impl = @import("crc/impl.zig"); -pub const Crc = impl.Crc; -pub const Polynomial = impl.Polynomial; -pub const Crc32WithPoly = impl.Crc32WithPoly; -pub const Crc32SmallWithPoly = impl.Crc32SmallWithPoly; - -pub const Crc32 = Crc32IsoHdlc; - -test { - _ = @import("crc/test.zig"); -} - -pub const Crc32Iscsi = switch (builtin.cpu.hasAll(.x86, &.{ .@"64bit", .crc32 })) { - true => @import("crc/Crc32c.zig"), - else => Crc(u32, .{ - .polynomial = 0x1edc6f41, - .initial = 0xffffffff, - .reflect_input = true, - .reflect_output = true, - .xor_output = 0xffffffff, - }), -}; - -pub const Crc3Gsm = Crc(u3, .{ +pub const @"CRC-3/GSM" = Generic(u3, .{ .polynomial = 0x3, .initial = 0x0, .reflect_input = false, @@ -33,7 +10,7 @@ pub const Crc3Gsm = Crc(u3, .{ .xor_output = 0x7, }); -pub const Crc3Rohc = Crc(u3, .{ +pub const @"CRC-3/ROHC" = Generic(u3, .{ .polynomial = 0x3, .initial = 0x7, .reflect_input = true, @@ -41,7 +18,7 @@ pub const Crc3Rohc = Crc(u3, .{ .xor_output = 0x0, }); -pub const Crc4G704 = Crc(u4, .{ +pub const @"CRC-4/G-704" = Generic(u4, .{ .polynomial = 0x3, .initial = 0x0, .reflect_input = true, @@ -49,7 +26,7 @@ pub const Crc4G704 = Crc(u4, .{ .xor_output = 0x0, }); -pub const Crc4Interlaken = Crc(u4, .{ +pub const @"CRC-4/INTERLAKEN" = Generic(u4, .{ .polynomial = 0x3, .initial = 0xf, .reflect_input = false, @@ -57,7 +34,7 @@ pub const Crc4Interlaken = Crc(u4, .{ .xor_output = 0xf, }); -pub const Crc5EpcC1g2 = Crc(u5, .{ +pub const @"CRC-5/EPC-C1G2" = Generic(u5, .{ .polynomial = 0x09, .initial = 0x09, .reflect_input = false, @@ -65,7 +42,7 @@ pub const Crc5EpcC1g2 = Crc(u5, .{ .xor_output = 0x00, }); -pub const Crc5G704 = Crc(u5, .{ +pub const @"CRC-5/G-704" = Generic(u5, .{ .polynomial = 0x15, .initial = 0x00, .reflect_input = true, @@ -73,7 +50,7 @@ pub const Crc5G704 = Crc(u5, .{ .xor_output = 0x00, }); -pub const Crc5Usb = Crc(u5, .{ +pub const @"CRC-5/USB" = Generic(u5, .{ .polynomial = 0x05, .initial = 0x1f, .reflect_input = true, @@ -81,7 +58,7 @@ pub const Crc5Usb = Crc(u5, .{ .xor_output = 0x1f, }); -pub const Crc6Cdma2000A = Crc(u6, .{ +pub const @"CRC-6/CDMA2000-A" = Generic(u6, .{ .polynomial = 0x27, .initial = 0x3f, .reflect_input = false, @@ -89,7 +66,7 @@ pub const Crc6Cdma2000A = Crc(u6, .{ .xor_output = 0x00, }); -pub const Crc6Cdma2000B = Crc(u6, .{ +pub const @"CRC-6/CDMA2000-B" = Generic(u6, .{ .polynomial = 0x07, .initial = 0x3f, .reflect_input = false, @@ -97,7 +74,7 @@ pub const Crc6Cdma2000B = Crc(u6, .{ .xor_output = 0x00, }); -pub const Crc6Darc = Crc(u6, .{ +pub const @"CRC-6/DARC" = Generic(u6, .{ .polynomial = 0x19, .initial = 0x00, .reflect_input = true, @@ -105,7 +82,7 @@ pub const Crc6Darc = Crc(u6, .{ .xor_output = 0x00, }); -pub const Crc6G704 = Crc(u6, .{ +pub const @"CRC-6/G-704" = Generic(u6, .{ .polynomial = 0x03, .initial = 0x00, .reflect_input = true, @@ -113,7 +90,7 @@ pub const Crc6G704 = Crc(u6, .{ .xor_output = 0x00, }); -pub const Crc6Gsm = Crc(u6, .{ +pub const @"CRC-6/GSM" = Generic(u6, .{ .polynomial = 0x2f, .initial = 0x00, .reflect_input = false, @@ -121,7 +98,7 @@ pub const Crc6Gsm = Crc(u6, .{ .xor_output = 0x3f, }); -pub const Crc7Mmc = Crc(u7, .{ +pub const @"CRC-7/MMC" = Generic(u7, .{ .polynomial = 0x09, .initial = 0x00, .reflect_input = false, @@ -129,7 +106,7 @@ pub const Crc7Mmc = Crc(u7, .{ .xor_output = 0x00, }); -pub const Crc7Rohc = Crc(u7, .{ +pub const @"CRC-7/ROHC" = Generic(u7, .{ .polynomial = 0x4f, .initial = 0x7f, .reflect_input = true, @@ -137,7 +114,7 @@ pub const Crc7Rohc = Crc(u7, .{ .xor_output = 0x00, }); -pub const Crc7Umts = Crc(u7, .{ +pub const @"CRC-7/UMTS" = Generic(u7, .{ .polynomial = 0x45, .initial = 0x00, .reflect_input = false, @@ -145,7 +122,7 @@ pub const Crc7Umts = Crc(u7, .{ .xor_output = 0x00, }); -pub const Crc8Autosar = Crc(u8, .{ +pub const @"CRC-8/AUTOSAR" = Generic(u8, .{ .polynomial = 0x2f, .initial = 0xff, .reflect_input = false, @@ -153,7 +130,7 @@ pub const Crc8Autosar = Crc(u8, .{ .xor_output = 0xff, }); -pub const Crc8Bluetooth = Crc(u8, .{ +pub const @"CRC-8/BLUETOOTH" = Generic(u8, .{ .polynomial = 0xa7, .initial = 0x00, .reflect_input = true, @@ -161,7 +138,7 @@ pub const Crc8Bluetooth = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8Cdma2000 = Crc(u8, .{ +pub const @"CRC-8/CDMA2000" = Generic(u8, .{ .polynomial = 0x9b, .initial = 0xff, .reflect_input = false, @@ -169,7 +146,7 @@ pub const Crc8Cdma2000 = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8Darc = Crc(u8, .{ +pub const @"CRC-8/DARC" = Generic(u8, .{ .polynomial = 0x39, .initial = 0x00, .reflect_input = true, @@ -177,7 +154,7 @@ pub const Crc8Darc = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8DvbS2 = Crc(u8, .{ +pub const @"CRC-8/DVB-S2" = Generic(u8, .{ .polynomial = 0xd5, .initial = 0x00, .reflect_input = false, @@ -185,7 +162,7 @@ pub const Crc8DvbS2 = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8GsmA = Crc(u8, .{ +pub const @"CRC-8/GSM-A" = Generic(u8, .{ .polynomial = 0x1d, .initial = 0x00, .reflect_input = false, @@ -193,7 +170,7 @@ pub const Crc8GsmA = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8GsmB = Crc(u8, .{ +pub const @"CRC-8/GSM-B" = Generic(u8, .{ .polynomial = 0x49, .initial = 0x00, .reflect_input = false, @@ -201,7 +178,7 @@ pub const Crc8GsmB = Crc(u8, .{ .xor_output = 0xff, }); -pub const Crc8Hitag = Crc(u8, .{ +pub const @"CRC-8/HITAG" = Generic(u8, .{ .polynomial = 0x1d, .initial = 0xff, .reflect_input = false, @@ -209,7 +186,7 @@ pub const Crc8Hitag = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8I4321 = Crc(u8, .{ +pub const @"CRC-8/I-432-1" = Generic(u8, .{ .polynomial = 0x07, .initial = 0x00, .reflect_input = false, @@ -217,7 +194,7 @@ pub const Crc8I4321 = Crc(u8, .{ .xor_output = 0x55, }); -pub const Crc8ICode = Crc(u8, .{ +pub const @"CRC-8/I-CODE" = Generic(u8, .{ .polynomial = 0x1d, .initial = 0xfd, .reflect_input = false, @@ -225,7 +202,7 @@ pub const Crc8ICode = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8Lte = Crc(u8, .{ +pub const @"CRC-8/LTE" = Generic(u8, .{ .polynomial = 0x9b, .initial = 0x00, .reflect_input = false, @@ -233,7 +210,7 @@ pub const Crc8Lte = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8MaximDow = Crc(u8, .{ +pub const @"CRC-8/MAXIM-DOW" = Generic(u8, .{ .polynomial = 0x31, .initial = 0x00, .reflect_input = true, @@ -241,7 +218,7 @@ pub const Crc8MaximDow = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8MifareMad = Crc(u8, .{ +pub const @"CRC-8/MIFARE-MAD" = Generic(u8, .{ .polynomial = 0x1d, .initial = 0xc7, .reflect_input = false, @@ -249,7 +226,7 @@ pub const Crc8MifareMad = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8Nrsc5 = Crc(u8, .{ +pub const @"CRC-8/NRSC-5" = Generic(u8, .{ .polynomial = 0x31, .initial = 0xff, .reflect_input = false, @@ -257,7 +234,7 @@ pub const Crc8Nrsc5 = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8Opensafety = Crc(u8, .{ +pub const @"CRC-8/OPENSAFETY" = Generic(u8, .{ .polynomial = 0x2f, .initial = 0x00, .reflect_input = false, @@ -265,7 +242,7 @@ pub const Crc8Opensafety = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8Rohc = Crc(u8, .{ +pub const @"CRC-8/ROHC" = Generic(u8, .{ .polynomial = 0x07, .initial = 0xff, .reflect_input = true, @@ -273,7 +250,7 @@ pub const Crc8Rohc = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8SaeJ1850 = Crc(u8, .{ +pub const @"CRC-8/SAE-J1850" = Generic(u8, .{ .polynomial = 0x1d, .initial = 0xff, .reflect_input = false, @@ -281,7 +258,7 @@ pub const Crc8SaeJ1850 = Crc(u8, .{ .xor_output = 0xff, }); -pub const Crc8Smbus = Crc(u8, .{ +pub const @"CRC-8/SMBUS" = Generic(u8, .{ .polynomial = 0x07, .initial = 0x00, .reflect_input = false, @@ -289,7 +266,7 @@ pub const Crc8Smbus = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8Tech3250 = Crc(u8, .{ +pub const @"CRC-8/TECH-3250" = Generic(u8, .{ .polynomial = 0x1d, .initial = 0xff, .reflect_input = true, @@ -297,7 +274,7 @@ pub const Crc8Tech3250 = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc8Wcdma = Crc(u8, .{ +pub const @"CRC-8/WCDMA" = Generic(u8, .{ .polynomial = 0x9b, .initial = 0x00, .reflect_input = true, @@ -305,7 +282,7 @@ pub const Crc8Wcdma = Crc(u8, .{ .xor_output = 0x00, }); -pub const Crc10Atm = Crc(u10, .{ +pub const @"CRC-10/ATM" = Generic(u10, .{ .polynomial = 0x233, .initial = 0x000, .reflect_input = false, @@ -313,7 +290,7 @@ pub const Crc10Atm = Crc(u10, .{ .xor_output = 0x000, }); -pub const Crc10Cdma2000 = Crc(u10, .{ +pub const @"CRC-10/CDMA2000" = Generic(u10, .{ .polynomial = 0x3d9, .initial = 0x3ff, .reflect_input = false, @@ -321,7 +298,7 @@ pub const Crc10Cdma2000 = Crc(u10, .{ .xor_output = 0x000, }); -pub const Crc10Gsm = Crc(u10, .{ +pub const @"CRC-10/GSM" = Generic(u10, .{ .polynomial = 0x175, .initial = 0x000, .reflect_input = false, @@ -329,7 +306,7 @@ pub const Crc10Gsm = Crc(u10, .{ .xor_output = 0x3ff, }); -pub const Crc11Flexray = Crc(u11, .{ +pub const @"CRC-11/FLEXRAY" = Generic(u11, .{ .polynomial = 0x385, .initial = 0x01a, .reflect_input = false, @@ -337,7 +314,7 @@ pub const Crc11Flexray = Crc(u11, .{ .xor_output = 0x000, }); -pub const Crc11Umts = Crc(u11, .{ +pub const @"CRC-11/UMTS" = Generic(u11, .{ .polynomial = 0x307, .initial = 0x000, .reflect_input = false, @@ -345,7 +322,7 @@ pub const Crc11Umts = Crc(u11, .{ .xor_output = 0x000, }); -pub const Crc12Cdma2000 = Crc(u12, .{ +pub const @"CRC-12/CDMA2000" = Generic(u12, .{ .polynomial = 0xf13, .initial = 0xfff, .reflect_input = false, @@ -353,7 +330,7 @@ pub const Crc12Cdma2000 = Crc(u12, .{ .xor_output = 0x000, }); -pub const Crc12Dect = Crc(u12, .{ +pub const @"CRC-12/DECT" = Generic(u12, .{ .polynomial = 0x80f, .initial = 0x000, .reflect_input = false, @@ -361,7 +338,7 @@ pub const Crc12Dect = Crc(u12, .{ .xor_output = 0x000, }); -pub const Crc12Gsm = Crc(u12, .{ +pub const @"CRC-12/GSM" = Generic(u12, .{ .polynomial = 0xd31, .initial = 0x000, .reflect_input = false, @@ -369,7 +346,7 @@ pub const Crc12Gsm = Crc(u12, .{ .xor_output = 0xfff, }); -pub const Crc12Umts = Crc(u12, .{ +pub const @"CRC-12/UMTS" = Generic(u12, .{ .polynomial = 0x80f, .initial = 0x000, .reflect_input = false, @@ -377,7 +354,7 @@ pub const Crc12Umts = Crc(u12, .{ .xor_output = 0x000, }); -pub const Crc13Bbc = Crc(u13, .{ +pub const @"CRC-13/BBC" = Generic(u13, .{ .polynomial = 0x1cf5, .initial = 0x0000, .reflect_input = false, @@ -385,7 +362,7 @@ pub const Crc13Bbc = Crc(u13, .{ .xor_output = 0x0000, }); -pub const Crc14Darc = Crc(u14, .{ +pub const @"CRC-14/DARC" = Generic(u14, .{ .polynomial = 0x0805, .initial = 0x0000, .reflect_input = true, @@ -393,7 +370,7 @@ pub const Crc14Darc = Crc(u14, .{ .xor_output = 0x0000, }); -pub const Crc14Gsm = Crc(u14, .{ +pub const @"CRC-14/GSM" = Generic(u14, .{ .polynomial = 0x202d, .initial = 0x0000, .reflect_input = false, @@ -401,7 +378,7 @@ pub const Crc14Gsm = Crc(u14, .{ .xor_output = 0x3fff, }); -pub const Crc15Can = Crc(u15, .{ +pub const @"CRC-15/CAN" = Generic(u15, .{ .polynomial = 0x4599, .initial = 0x0000, .reflect_input = false, @@ -409,7 +386,7 @@ pub const Crc15Can = Crc(u15, .{ .xor_output = 0x0000, }); -pub const Crc15Mpt1327 = Crc(u15, .{ +pub const @"CRC-15/MPT1327" = Generic(u15, .{ .polynomial = 0x6815, .initial = 0x0000, .reflect_input = false, @@ -417,7 +394,7 @@ pub const Crc15Mpt1327 = Crc(u15, .{ .xor_output = 0x0001, }); -pub const Crc16Arc = Crc(u16, .{ +pub const @"CRC-16/ARC" = Generic(u16, .{ .polynomial = 0x8005, .initial = 0x0000, .reflect_input = true, @@ -425,7 +402,7 @@ pub const Crc16Arc = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Cdma2000 = Crc(u16, .{ +pub const @"CRC-16/CDMA2000" = Generic(u16, .{ .polynomial = 0xc867, .initial = 0xffff, .reflect_input = false, @@ -433,7 +410,7 @@ pub const Crc16Cdma2000 = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Cms = Crc(u16, .{ +pub const @"CRC-16/CMS" = Generic(u16, .{ .polynomial = 0x8005, .initial = 0xffff, .reflect_input = false, @@ -441,7 +418,7 @@ pub const Crc16Cms = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Dds110 = Crc(u16, .{ +pub const @"CRC-16/DDS-110" = Generic(u16, .{ .polynomial = 0x8005, .initial = 0x800d, .reflect_input = false, @@ -449,7 +426,7 @@ pub const Crc16Dds110 = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16DectR = Crc(u16, .{ +pub const @"CRC-16/DECT-R" = Generic(u16, .{ .polynomial = 0x0589, .initial = 0x0000, .reflect_input = false, @@ -457,7 +434,7 @@ pub const Crc16DectR = Crc(u16, .{ .xor_output = 0x0001, }); -pub const Crc16DectX = Crc(u16, .{ +pub const @"CRC-16/DECT-X" = Generic(u16, .{ .polynomial = 0x0589, .initial = 0x0000, .reflect_input = false, @@ -465,7 +442,7 @@ pub const Crc16DectX = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Dnp = Crc(u16, .{ +pub const @"CRC-16/DNP" = Generic(u16, .{ .polynomial = 0x3d65, .initial = 0x0000, .reflect_input = true, @@ -473,7 +450,7 @@ pub const Crc16Dnp = Crc(u16, .{ .xor_output = 0xffff, }); -pub const Crc16En13757 = Crc(u16, .{ +pub const @"CRC-16/EN-13757" = Generic(u16, .{ .polynomial = 0x3d65, .initial = 0x0000, .reflect_input = false, @@ -481,7 +458,7 @@ pub const Crc16En13757 = Crc(u16, .{ .xor_output = 0xffff, }); -pub const Crc16Genibus = Crc(u16, .{ +pub const @"CRC-16/GENIBUS" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0xffff, .reflect_input = false, @@ -489,7 +466,7 @@ pub const Crc16Genibus = Crc(u16, .{ .xor_output = 0xffff, }); -pub const Crc16Gsm = Crc(u16, .{ +pub const @"CRC-16/GSM" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0x0000, .reflect_input = false, @@ -497,7 +474,7 @@ pub const Crc16Gsm = Crc(u16, .{ .xor_output = 0xffff, }); -pub const Crc16Ibm3740 = Crc(u16, .{ +pub const @"CRC-16/IBM-3740" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0xffff, .reflect_input = false, @@ -505,7 +482,7 @@ pub const Crc16Ibm3740 = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16IbmSdlc = Crc(u16, .{ +pub const @"CRC-16/IBM-SDLC" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0xffff, .reflect_input = true, @@ -513,7 +490,7 @@ pub const Crc16IbmSdlc = Crc(u16, .{ .xor_output = 0xffff, }); -pub const Crc16IsoIec144433A = Crc(u16, .{ +pub const @"CRC-16/ISO-IEC-14443-3-A" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0xc6c6, .reflect_input = true, @@ -521,7 +498,7 @@ pub const Crc16IsoIec144433A = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Kermit = Crc(u16, .{ +pub const @"CRC-16/KERMIT" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0x0000, .reflect_input = true, @@ -529,7 +506,7 @@ pub const Crc16Kermit = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Lj1200 = Crc(u16, .{ +pub const @"CRC-16/LJ1200" = Generic(u16, .{ .polynomial = 0x6f63, .initial = 0x0000, .reflect_input = false, @@ -537,7 +514,7 @@ pub const Crc16Lj1200 = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16M17 = Crc(u16, .{ +pub const @"CRC-16/M17" = Generic(u16, .{ .polynomial = 0x5935, .initial = 0xffff, .reflect_input = false, @@ -545,7 +522,7 @@ pub const Crc16M17 = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16MaximDow = Crc(u16, .{ +pub const @"CRC-16/MAXIM-DOW" = Generic(u16, .{ .polynomial = 0x8005, .initial = 0x0000, .reflect_input = true, @@ -553,7 +530,7 @@ pub const Crc16MaximDow = Crc(u16, .{ .xor_output = 0xffff, }); -pub const Crc16Mcrf4xx = Crc(u16, .{ +pub const @"CRC-16/MCRF4XX" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0xffff, .reflect_input = true, @@ -561,7 +538,7 @@ pub const Crc16Mcrf4xx = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Modbus = Crc(u16, .{ +pub const @"CRC-16/MODBUS" = Generic(u16, .{ .polynomial = 0x8005, .initial = 0xffff, .reflect_input = true, @@ -569,7 +546,7 @@ pub const Crc16Modbus = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Nrsc5 = Crc(u16, .{ +pub const @"CRC-16/NRSC-5" = Generic(u16, .{ .polynomial = 0x080b, .initial = 0xffff, .reflect_input = true, @@ -577,7 +554,7 @@ pub const Crc16Nrsc5 = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16OpensafetyA = Crc(u16, .{ +pub const @"CRC-16/OPENSAFETY-A" = Generic(u16, .{ .polynomial = 0x5935, .initial = 0x0000, .reflect_input = false, @@ -585,7 +562,7 @@ pub const Crc16OpensafetyA = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16OpensafetyB = Crc(u16, .{ +pub const @"CRC-16/OPENSAFETY-B" = Generic(u16, .{ .polynomial = 0x755b, .initial = 0x0000, .reflect_input = false, @@ -593,7 +570,7 @@ pub const Crc16OpensafetyB = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Profibus = Crc(u16, .{ +pub const @"CRC-16/PROFIBUS" = Generic(u16, .{ .polynomial = 0x1dcf, .initial = 0xffff, .reflect_input = false, @@ -601,7 +578,7 @@ pub const Crc16Profibus = Crc(u16, .{ .xor_output = 0xffff, }); -pub const Crc16Riello = Crc(u16, .{ +pub const @"CRC-16/RIELLO" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0xb2aa, .reflect_input = true, @@ -609,7 +586,7 @@ pub const Crc16Riello = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16SpiFujitsu = Crc(u16, .{ +pub const @"CRC-16/SPI-FUJITSU" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0x1d0f, .reflect_input = false, @@ -617,7 +594,7 @@ pub const Crc16SpiFujitsu = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16T10Dif = Crc(u16, .{ +pub const @"CRC-16/T10-DIF" = Generic(u16, .{ .polynomial = 0x8bb7, .initial = 0x0000, .reflect_input = false, @@ -625,7 +602,7 @@ pub const Crc16T10Dif = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Teledisk = Crc(u16, .{ +pub const @"CRC-16/TELEDISK" = Generic(u16, .{ .polynomial = 0xa097, .initial = 0x0000, .reflect_input = false, @@ -633,7 +610,7 @@ pub const Crc16Teledisk = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Tms37157 = Crc(u16, .{ +pub const @"CRC-16/TMS37157" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0x89ec, .reflect_input = true, @@ -641,7 +618,7 @@ pub const Crc16Tms37157 = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Umts = Crc(u16, .{ +pub const @"CRC-16/UMTS" = Generic(u16, .{ .polynomial = 0x8005, .initial = 0x0000, .reflect_input = false, @@ -649,7 +626,7 @@ pub const Crc16Umts = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc16Usb = Crc(u16, .{ +pub const @"CRC-16/USB" = Generic(u16, .{ .polynomial = 0x8005, .initial = 0xffff, .reflect_input = true, @@ -657,7 +634,7 @@ pub const Crc16Usb = Crc(u16, .{ .xor_output = 0xffff, }); -pub const Crc16Xmodem = Crc(u16, .{ +pub const @"CRC-16/XMODEM" = Generic(u16, .{ .polynomial = 0x1021, .initial = 0x0000, .reflect_input = false, @@ -665,7 +642,7 @@ pub const Crc16Xmodem = Crc(u16, .{ .xor_output = 0x0000, }); -pub const Crc17CanFd = Crc(u17, .{ +pub const @"CRC-17/CAN-FD" = Generic(u17, .{ .polynomial = 0x1685b, .initial = 0x00000, .reflect_input = false, @@ -673,7 +650,7 @@ pub const Crc17CanFd = Crc(u17, .{ .xor_output = 0x00000, }); -pub const Crc21CanFd = Crc(u21, .{ +pub const @"CRC-21/CAN-FD" = Generic(u21, .{ .polynomial = 0x102899, .initial = 0x000000, .reflect_input = false, @@ -681,7 +658,7 @@ pub const Crc21CanFd = Crc(u21, .{ .xor_output = 0x000000, }); -pub const Crc24Ble = Crc(u24, .{ +pub const @"CRC-24/BLE" = Generic(u24, .{ .polynomial = 0x00065b, .initial = 0x555555, .reflect_input = true, @@ -689,7 +666,7 @@ pub const Crc24Ble = Crc(u24, .{ .xor_output = 0x000000, }); -pub const Crc24FlexrayA = Crc(u24, .{ +pub const @"CRC-24/FLEXRAY-A" = Generic(u24, .{ .polynomial = 0x5d6dcb, .initial = 0xfedcba, .reflect_input = false, @@ -697,7 +674,7 @@ pub const Crc24FlexrayA = Crc(u24, .{ .xor_output = 0x000000, }); -pub const Crc24FlexrayB = Crc(u24, .{ +pub const @"CRC-24/FLEXRAY-B" = Generic(u24, .{ .polynomial = 0x5d6dcb, .initial = 0xabcdef, .reflect_input = false, @@ -705,7 +682,7 @@ pub const Crc24FlexrayB = Crc(u24, .{ .xor_output = 0x000000, }); -pub const Crc24Interlaken = Crc(u24, .{ +pub const @"CRC-24/INTERLAKEN" = Generic(u24, .{ .polynomial = 0x328b63, .initial = 0xffffff, .reflect_input = false, @@ -713,7 +690,7 @@ pub const Crc24Interlaken = Crc(u24, .{ .xor_output = 0xffffff, }); -pub const Crc24LteA = Crc(u24, .{ +pub const @"CRC-24/LTE-A" = Generic(u24, .{ .polynomial = 0x864cfb, .initial = 0x000000, .reflect_input = false, @@ -721,7 +698,7 @@ pub const Crc24LteA = Crc(u24, .{ .xor_output = 0x000000, }); -pub const Crc24LteB = Crc(u24, .{ +pub const @"CRC-24/LTE-B" = Generic(u24, .{ .polynomial = 0x800063, .initial = 0x000000, .reflect_input = false, @@ -729,7 +706,7 @@ pub const Crc24LteB = Crc(u24, .{ .xor_output = 0x000000, }); -pub const Crc24Openpgp = Crc(u24, .{ +pub const @"CRC-24/OPENPGP" = Generic(u24, .{ .polynomial = 0x864cfb, .initial = 0xb704ce, .reflect_input = false, @@ -737,7 +714,7 @@ pub const Crc24Openpgp = Crc(u24, .{ .xor_output = 0x000000, }); -pub const Crc24Os9 = Crc(u24, .{ +pub const @"CRC-24/OS-9" = Generic(u24, .{ .polynomial = 0x800063, .initial = 0xffffff, .reflect_input = false, @@ -745,7 +722,7 @@ pub const Crc24Os9 = Crc(u24, .{ .xor_output = 0xffffff, }); -pub const Crc30Cdma = Crc(u30, .{ +pub const @"CRC-30/CDMA" = Generic(u30, .{ .polynomial = 0x2030b9c7, .initial = 0x3fffffff, .reflect_input = false, @@ -753,7 +730,7 @@ pub const Crc30Cdma = Crc(u30, .{ .xor_output = 0x3fffffff, }); -pub const Crc31Philips = Crc(u31, .{ +pub const @"CRC-31/PHILIPS" = Generic(u31, .{ .polynomial = 0x04c11db7, .initial = 0x7fffffff, .reflect_input = false, @@ -761,7 +738,7 @@ pub const Crc31Philips = Crc(u31, .{ .xor_output = 0x7fffffff, }); -pub const Crc32Aixm = Crc(u32, .{ +pub const @"CRC-32/AIXM" = Generic(u32, .{ .polynomial = 0x814141ab, .initial = 0x00000000, .reflect_input = false, @@ -769,7 +746,7 @@ pub const Crc32Aixm = Crc(u32, .{ .xor_output = 0x00000000, }); -pub const Crc32Autosar = Crc(u32, .{ +pub const @"CRC-32/AUTOSAR" = Generic(u32, .{ .polynomial = 0xf4acfb13, .initial = 0xffffffff, .reflect_input = true, @@ -777,7 +754,7 @@ pub const Crc32Autosar = Crc(u32, .{ .xor_output = 0xffffffff, }); -pub const Crc32Base91D = Crc(u32, .{ +pub const @"CRC-32/BASE91-D" = Generic(u32, .{ .polynomial = 0xa833982b, .initial = 0xffffffff, .reflect_input = true, @@ -785,7 +762,7 @@ pub const Crc32Base91D = Crc(u32, .{ .xor_output = 0xffffffff, }); -pub const Crc32Bzip2 = Crc(u32, .{ +pub const @"CRC-32/BZIP2" = Generic(u32, .{ .polynomial = 0x04c11db7, .initial = 0xffffffff, .reflect_input = false, @@ -793,7 +770,7 @@ pub const Crc32Bzip2 = Crc(u32, .{ .xor_output = 0xffffffff, }); -pub const Crc32CdRomEdc = Crc(u32, .{ +pub const @"CRC-32/CD-ROM-EDC" = Generic(u32, .{ .polynomial = 0x8001801b, .initial = 0x00000000, .reflect_input = true, @@ -801,7 +778,7 @@ pub const Crc32CdRomEdc = Crc(u32, .{ .xor_output = 0x00000000, }); -pub const Crc32Cksum = Crc(u32, .{ +pub const @"CRC-32/CKSUM" = Generic(u32, .{ .polynomial = 0x04c11db7, .initial = 0x00000000, .reflect_input = false, @@ -809,7 +786,18 @@ pub const Crc32Cksum = Crc(u32, .{ .xor_output = 0xffffffff, }); -pub const Crc32IsoHdlc = Crc(u32, .{ +pub const @"CRC-32/ISCSI" = if (builtin.cpu.hasAll(.x86, &.{ .@"64bit", .crc32 })) + @import("crc/Crc32c.zig") +else + Generic(u32, .{ + .polynomial = 0x1edc6f41, + .initial = 0xffffffff, + .reflect_input = true, + .reflect_output = true, + .xor_output = 0xffffffff, + }); + +pub const @"CRC-32/ISO-HDLC" = Generic(u32, .{ .polynomial = 0x04c11db7, .initial = 0xffffffff, .reflect_input = true, @@ -817,7 +805,7 @@ pub const Crc32IsoHdlc = Crc(u32, .{ .xor_output = 0xffffffff, }); -pub const Crc32Jamcrc = Crc(u32, .{ +pub const @"CRC-32/JAMCRC" = Generic(u32, .{ .polynomial = 0x04c11db7, .initial = 0xffffffff, .reflect_input = true, @@ -825,7 +813,7 @@ pub const Crc32Jamcrc = Crc(u32, .{ .xor_output = 0x00000000, }); -pub const Crc32Koopman = Crc(u32, .{ +pub const @"CRC-32/KOOPMAN" = Generic(u32, .{ .polynomial = 0x741b8cd7, .initial = 0xffffffff, .reflect_input = true, @@ -833,7 +821,7 @@ pub const Crc32Koopman = Crc(u32, .{ .xor_output = 0xffffffff, }); -pub const Crc32Mef = Crc(u32, .{ +pub const @"CRC-32/MEF" = Generic(u32, .{ .polynomial = 0x741b8cd7, .initial = 0xffffffff, .reflect_input = true, @@ -841,7 +829,7 @@ pub const Crc32Mef = Crc(u32, .{ .xor_output = 0x00000000, }); -pub const Crc32Mpeg2 = Crc(u32, .{ +pub const @"CRC-32/MPEG-2" = Generic(u32, .{ .polynomial = 0x04c11db7, .initial = 0xffffffff, .reflect_input = false, @@ -849,7 +837,7 @@ pub const Crc32Mpeg2 = Crc(u32, .{ .xor_output = 0x00000000, }); -pub const Crc32Xfer = Crc(u32, .{ +pub const @"CRC-32/XFER" = Generic(u32, .{ .polynomial = 0x000000af, .initial = 0x00000000, .reflect_input = false, @@ -857,7 +845,7 @@ pub const Crc32Xfer = Crc(u32, .{ .xor_output = 0x00000000, }); -pub const Crc40Gsm = Crc(u40, .{ +pub const @"CRC-40/GSM" = Generic(u40, .{ .polynomial = 0x0004820009, .initial = 0x0000000000, .reflect_input = false, @@ -865,7 +853,7 @@ pub const Crc40Gsm = Crc(u40, .{ .xor_output = 0xffffffffff, }); -pub const Crc64Ecma182 = Crc(u64, .{ +pub const @"CRC-64/ECMA-182" = Generic(u64, .{ .polynomial = 0x42f0e1eba9ea3693, .initial = 0x0000000000000000, .reflect_input = false, @@ -873,7 +861,7 @@ pub const Crc64Ecma182 = Crc(u64, .{ .xor_output = 0x0000000000000000, }); -pub const Crc64GoIso = Crc(u64, .{ +pub const @"CRC-64/GO-ISO" = Generic(u64, .{ .polynomial = 0x000000000000001b, .initial = 0xffffffffffffffff, .reflect_input = true, @@ -881,7 +869,7 @@ pub const Crc64GoIso = Crc(u64, .{ .xor_output = 0xffffffffffffffff, }); -pub const Crc64Ms = Crc(u64, .{ +pub const @"CRC-64/MS" = Generic(u64, .{ .polynomial = 0x259c84cba6426349, .initial = 0xffffffffffffffff, .reflect_input = true, @@ -889,7 +877,7 @@ pub const Crc64Ms = Crc(u64, .{ .xor_output = 0x0000000000000000, }); -pub const Crc64Redis = Crc(u64, .{ +pub const @"CRC-64/REDIS" = Generic(u64, .{ .polynomial = 0xad93d23594c935a9, .initial = 0x0000000000000000, .reflect_input = true, @@ -897,7 +885,7 @@ pub const Crc64Redis = Crc(u64, .{ .xor_output = 0x0000000000000000, }); -pub const Crc64We = Crc(u64, .{ +pub const @"CRC-64/WE" = Generic(u64, .{ .polynomial = 0x42f0e1eba9ea3693, .initial = 0xffffffffffffffff, .reflect_input = false, @@ -905,7 +893,7 @@ pub const Crc64We = Crc(u64, .{ .xor_output = 0xffffffffffffffff, }); -pub const Crc64Xz = Crc(u64, .{ +pub const @"CRC-64/XZ" = Generic(u64, .{ .polynomial = 0x42f0e1eba9ea3693, .initial = 0xffffffffffffffff, .reflect_input = true, @@ -913,10 +901,109 @@ pub const Crc64Xz = Crc(u64, .{ .xor_output = 0xffffffffffffffff, }); -pub const Crc82Darc = Crc(u82, .{ +pub const @"CRC-82/DARC" = Generic(u82, .{ .polynomial = 0x0308c0111011401440411, .initial = 0x000000000000000000000, .reflect_input = true, .reflect_output = true, .xor_output = 0x000000000000000000000, }); + +pub fn Algorithm(comptime W: type) type { + return struct { + polynomial: W, + initial: W, + reflect_input: bool, + reflect_output: bool, + xor_output: W, + }; +} + +pub fn Generic(comptime W: type, comptime algorithm: Algorithm(W)) type { + return struct { + const Self = @This(); + const I = if (@bitSizeOf(W) < 8) u8 else W; + const lookup_table = blk: { + @setEvalBranchQuota(2500); + const poly = reflect(algorithm.polynomial); + var table: [256]I = undefined; + for (&table, 0..) |*e, i| { + var crc: I = i; + if (algorithm.reflect_input) { + var j: usize = 0; + while (j < 8) : (j += 1) { + crc = (crc >> 1) ^ ((crc & 1) * poly); + } + } else { + crc <<= @bitSizeOf(I) - 8; + var j: usize = 0; + while (j < 8) : (j += 1) { + crc = (crc << 1) ^ (((crc >> (@bitSizeOf(I) - 1)) & 1) * poly); + } + } + e.* = crc; + } + break :blk table; + }; + + crc: I, + + pub fn init() Self { + const initial = reflect(algorithm.initial); + return .{ .crc = initial }; + } + + inline fn tableEntry(index: I) I { + const short: u8 = @truncate(index); + return lookup_table[short]; + } + + pub fn update(self: *Self, bytes: []const u8) void { + var i: usize = 0; + if (@bitSizeOf(I) <= 8) { + while (i < bytes.len) : (i += 1) { + self.crc = tableEntry(self.crc ^ bytes[i]); + } + } else if (algorithm.reflect_input) { + while (i < bytes.len) : (i += 1) { + const table_index = self.crc ^ bytes[i]; + self.crc = tableEntry(table_index) ^ (self.crc >> 8); + } + } else { + while (i < bytes.len) : (i += 1) { + const table_index = (self.crc >> (@bitSizeOf(I) - 8)) ^ bytes[i]; + self.crc = tableEntry(table_index) ^ (self.crc << 8); + } + } + } + + pub fn final(self: Self) W { + var c = self.crc; + if (algorithm.reflect_input != algorithm.reflect_output) { + c = @bitReverse(c); + } + if (!algorithm.reflect_output) { + c >>= @bitSizeOf(I) - @bitSizeOf(W); + } + return @intCast(c ^ algorithm.xor_output); + } + + pub fn hash(bytes: []const u8) W { + var c = Self.init(); + c.update(bytes); + return c.final(); + } + + fn reflect(x: I) I { + const offset = @bitSizeOf(I) - @bitSizeOf(W); + if (algorithm.reflect_input) + return @bitReverse(x) >> offset + else + return x << offset; + } + }; +} + +test { + _ = @import("crc/test.zig"); +} diff --git a/lib/std/hash/crc/impl.zig b/lib/std/hash/crc/impl.zig deleted file mode 100644 index 79b713c5b7aac04fd0e1e49db379965a0ff7148c..0000000000000000000000000000000000000000 --- a/lib/std/hash/crc/impl.zig +++ /dev/null @@ -1,103 +0,0 @@ -// There is a generic CRC implementation "Crc()" which can be parameterized via -// the Algorithm struct for a plethora of uses. -// -// The primary interface for all of the standard CRC algorithms is the -// generated file "crc.zig", which uses the implementation code here to define -// many standard CRCs. - -const std = @import("std"); - -pub fn Algorithm(comptime W: type) type { - return struct { - polynomial: W, - initial: W, - reflect_input: bool, - reflect_output: bool, - xor_output: W, - }; -} - -pub fn Crc(comptime W: type, comptime algorithm: Algorithm(W)) type { - return struct { - const Self = @This(); - const I = if (@bitSizeOf(W) < 8) u8 else W; - const lookup_table = blk: { - @setEvalBranchQuota(2500); - const poly = reflect(algorithm.polynomial); - var table: [256]I = undefined; - for (&table, 0..) |*e, i| { - var crc: I = i; - if (algorithm.reflect_input) { - var j: usize = 0; - while (j < 8) : (j += 1) { - crc = (crc >> 1) ^ ((crc & 1) * poly); - } - } else { - crc <<= @bitSizeOf(I) - 8; - var j: usize = 0; - while (j < 8) : (j += 1) { - crc = (crc << 1) ^ (((crc >> (@bitSizeOf(I) - 1)) & 1) * poly); - } - } - e.* = crc; - } - break :blk table; - }; - - crc: I, - - pub fn init() Self { - const initial = reflect(algorithm.initial); - return .{ .crc = initial }; - } - - inline fn tableEntry(index: I) I { - const short: u8 = @truncate(index); - return lookup_table[short]; - } - - pub fn update(self: *Self, bytes: []const u8) void { - var i: usize = 0; - if (@bitSizeOf(I) <= 8) { - while (i < bytes.len) : (i += 1) { - self.crc = tableEntry(self.crc ^ bytes[i]); - } - } else if (algorithm.reflect_input) { - while (i < bytes.len) : (i += 1) { - const table_index = self.crc ^ bytes[i]; - self.crc = tableEntry(table_index) ^ (self.crc >> 8); - } - } else { - while (i < bytes.len) : (i += 1) { - const table_index = (self.crc >> (@bitSizeOf(I) - 8)) ^ bytes[i]; - self.crc = tableEntry(table_index) ^ (self.crc << 8); - } - } - } - - pub fn final(self: Self) W { - var c = self.crc; - if (algorithm.reflect_input != algorithm.reflect_output) { - c = @bitReverse(c); - } - if (!algorithm.reflect_output) { - c >>= @bitSizeOf(I) - @bitSizeOf(W); - } - return @intCast(c ^ algorithm.xor_output); - } - - pub fn hash(bytes: []const u8) W { - var c = Self.init(); - c.update(bytes); - return c.final(); - } - - fn reflect(x: I) I { - const offset = @bitSizeOf(I) - @bitSizeOf(W); - if (algorithm.reflect_input) - return @bitReverse(x) >> offset - else - return x << offset; - } - }; -} diff --git a/lib/std/hash/crc/test.zig b/lib/std/hash/crc/test.zig index cc2b2191a76793ea47095a2bc3adaa9d049d2fed..68183d1050b37133d19663971357f32f53284267 100644 --- a/lib/std/hash/crc/test.zig +++ b/lib/std/hash/crc/test.zig @@ -6,1264 +6,1264 @@ const verify = @import("../verify.zig"); const crc = @import("../crc.zig"); test "crc32 ieee regression" { - const crc32 = crc.Crc32IsoHdlc; - try testing.expectEqual(crc32.hash(""), 0x00000000); - try testing.expectEqual(crc32.hash("a"), 0xe8b7be43); - try testing.expectEqual(crc32.hash("abc"), 0x352441c2); + const Crc = crc.@"CRC-32/ISO-HDLC"; + try testing.expectEqual(Crc.hash(""), 0x00000000); + try testing.expectEqual(Crc.hash("a"), 0xe8b7be43); + try testing.expectEqual(Crc.hash("abc"), 0x352441c2); } test "crc32 castagnoli regression" { - const crc32 = crc.Crc32Iscsi; - try testing.expectEqual(crc32.hash(""), 0x00000000); - try testing.expectEqual(crc32.hash("a"), 0xc1d04330); - try testing.expectEqual(crc32.hash("abc"), 0x364b3fb7); + const Crc = crc.@"CRC-32/ISCSI"; + try testing.expectEqual(Crc.hash(""), 0x00000000); + try testing.expectEqual(Crc.hash("a"), 0xc1d04330); + try testing.expectEqual(Crc.hash("abc"), 0x364b3fb7); } test "crc32 koopman regression" { - const crc32 = crc.Crc32Koopman; - try testing.expectEqual(crc32.hash(""), 0x00000000); - try testing.expectEqual(crc32.hash("a"), 0x0da2aa8a); - try testing.expectEqual(crc32.hash("abc"), 0xba2322ac); -} - -test "CRC-32/ISCSI" { - const Crc32Iscsi = crc.Crc32Iscsi; - - try testing.expectEqual(@as(u32, 0xe3069283), Crc32Iscsi.hash("123456789")); - - var c = Crc32Iscsi.init(); - c.update("1234"); - c.update("56789"); - try testing.expectEqual(@as(u32, 0xe3069283), c.final()); + const Crc = crc.@"CRC-32/KOOPMAN"; + try testing.expectEqual(Crc.hash(""), 0x00000000); + try testing.expectEqual(Crc.hash("a"), 0x0da2aa8a); + try testing.expectEqual(Crc.hash("abc"), 0xba2322ac); } test "CRC-3/GSM" { - const Crc3Gsm = crc.Crc3Gsm; + const Crc = crc.@"CRC-3/GSM"; - try testing.expectEqual(@as(u3, 0x4), Crc3Gsm.hash("123456789")); + try testing.expectEqual(@as(u3, 0x4), Crc.hash("123456789")); - var c = Crc3Gsm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u3, 0x4), c.final()); } test "CRC-3/ROHC" { - const Crc3Rohc = crc.Crc3Rohc; + const Crc = crc.@"CRC-3/ROHC"; - try testing.expectEqual(@as(u3, 0x6), Crc3Rohc.hash("123456789")); + try testing.expectEqual(@as(u3, 0x6), Crc.hash("123456789")); - var c = Crc3Rohc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u3, 0x6), c.final()); } test "CRC-4/G-704" { - const Crc4G704 = crc.Crc4G704; + const Crc = crc.@"CRC-4/G-704"; - try testing.expectEqual(@as(u4, 0x7), Crc4G704.hash("123456789")); + try testing.expectEqual(@as(u4, 0x7), Crc.hash("123456789")); - var c = Crc4G704.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u4, 0x7), c.final()); } test "CRC-4/INTERLAKEN" { - const Crc4Interlaken = crc.Crc4Interlaken; + const Crc = crc.@"CRC-4/INTERLAKEN"; - try testing.expectEqual(@as(u4, 0xb), Crc4Interlaken.hash("123456789")); + try testing.expectEqual(@as(u4, 0xb), Crc.hash("123456789")); - var c = Crc4Interlaken.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u4, 0xb), c.final()); } test "CRC-5/EPC-C1G2" { - const Crc5EpcC1g2 = crc.Crc5EpcC1g2; + const Crc = crc.@"CRC-5/EPC-C1G2"; - try testing.expectEqual(@as(u5, 0x00), Crc5EpcC1g2.hash("123456789")); + try testing.expectEqual(@as(u5, 0x00), Crc.hash("123456789")); - var c = Crc5EpcC1g2.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u5, 0x00), c.final()); } test "CRC-5/G-704" { - const Crc5G704 = crc.Crc5G704; + const Crc = crc.@"CRC-5/G-704"; - try testing.expectEqual(@as(u5, 0x07), Crc5G704.hash("123456789")); + try testing.expectEqual(@as(u5, 0x07), Crc.hash("123456789")); - var c = Crc5G704.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u5, 0x07), c.final()); } test "CRC-5/USB" { - const Crc5Usb = crc.Crc5Usb; + const Crc = crc.@"CRC-5/USB"; - try testing.expectEqual(@as(u5, 0x19), Crc5Usb.hash("123456789")); + try testing.expectEqual(@as(u5, 0x19), Crc.hash("123456789")); - var c = Crc5Usb.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u5, 0x19), c.final()); } test "CRC-6/CDMA2000-A" { - const Crc6Cdma2000A = crc.Crc6Cdma2000A; + const Crc = crc.@"CRC-6/CDMA2000-A"; - try testing.expectEqual(@as(u6, 0x0d), Crc6Cdma2000A.hash("123456789")); + try testing.expectEqual(@as(u6, 0x0d), Crc.hash("123456789")); - var c = Crc6Cdma2000A.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u6, 0x0d), c.final()); } test "CRC-6/CDMA2000-B" { - const Crc6Cdma2000B = crc.Crc6Cdma2000B; + const Crc = crc.@"CRC-6/CDMA2000-B"; - try testing.expectEqual(@as(u6, 0x3b), Crc6Cdma2000B.hash("123456789")); + try testing.expectEqual(@as(u6, 0x3b), Crc.hash("123456789")); - var c = Crc6Cdma2000B.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u6, 0x3b), c.final()); } test "CRC-6/DARC" { - const Crc6Darc = crc.Crc6Darc; + const Crc = crc.@"CRC-6/DARC"; - try testing.expectEqual(@as(u6, 0x26), Crc6Darc.hash("123456789")); + try testing.expectEqual(@as(u6, 0x26), Crc.hash("123456789")); - var c = Crc6Darc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u6, 0x26), c.final()); } test "CRC-6/G-704" { - const Crc6G704 = crc.Crc6G704; + const Crc = crc.@"CRC-6/G-704"; - try testing.expectEqual(@as(u6, 0x06), Crc6G704.hash("123456789")); + try testing.expectEqual(@as(u6, 0x06), Crc.hash("123456789")); - var c = Crc6G704.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u6, 0x06), c.final()); } test "CRC-6/GSM" { - const Crc6Gsm = crc.Crc6Gsm; + const Crc = crc.@"CRC-6/GSM"; - try testing.expectEqual(@as(u6, 0x13), Crc6Gsm.hash("123456789")); + try testing.expectEqual(@as(u6, 0x13), Crc.hash("123456789")); - var c = Crc6Gsm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u6, 0x13), c.final()); } test "CRC-7/MMC" { - const Crc7Mmc = crc.Crc7Mmc; + const Crc = crc.@"CRC-7/MMC"; - try testing.expectEqual(@as(u7, 0x75), Crc7Mmc.hash("123456789")); + try testing.expectEqual(@as(u7, 0x75), Crc.hash("123456789")); - var c = Crc7Mmc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u7, 0x75), c.final()); } test "CRC-7/ROHC" { - const Crc7Rohc = crc.Crc7Rohc; + const Crc = crc.@"CRC-7/ROHC"; - try testing.expectEqual(@as(u7, 0x53), Crc7Rohc.hash("123456789")); + try testing.expectEqual(@as(u7, 0x53), Crc.hash("123456789")); - var c = Crc7Rohc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u7, 0x53), c.final()); } test "CRC-7/UMTS" { - const Crc7Umts = crc.Crc7Umts; + const Crc = crc.@"CRC-7/UMTS"; - try testing.expectEqual(@as(u7, 0x61), Crc7Umts.hash("123456789")); + try testing.expectEqual(@as(u7, 0x61), Crc.hash("123456789")); - var c = Crc7Umts.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u7, 0x61), c.final()); } test "CRC-8/AUTOSAR" { - const Crc8Autosar = crc.Crc8Autosar; + const Crc = crc.@"CRC-8/AUTOSAR"; - try testing.expectEqual(@as(u8, 0xdf), Crc8Autosar.hash("123456789")); + try testing.expectEqual(@as(u8, 0xdf), Crc.hash("123456789")); - var c = Crc8Autosar.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xdf), c.final()); } test "CRC-8/BLUETOOTH" { - const Crc8Bluetooth = crc.Crc8Bluetooth; + const Crc = crc.@"CRC-8/BLUETOOTH"; - try testing.expectEqual(@as(u8, 0x26), Crc8Bluetooth.hash("123456789")); + try testing.expectEqual(@as(u8, 0x26), Crc.hash("123456789")); - var c = Crc8Bluetooth.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x26), c.final()); } test "CRC-8/CDMA2000" { - const Crc8Cdma2000 = crc.Crc8Cdma2000; + const Crc = crc.@"CRC-8/CDMA2000"; - try testing.expectEqual(@as(u8, 0xda), Crc8Cdma2000.hash("123456789")); + try testing.expectEqual(@as(u8, 0xda), Crc.hash("123456789")); - var c = Crc8Cdma2000.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xda), c.final()); } test "CRC-8/DARC" { - const Crc8Darc = crc.Crc8Darc; + const Crc = crc.@"CRC-8/DARC"; - try testing.expectEqual(@as(u8, 0x15), Crc8Darc.hash("123456789")); + try testing.expectEqual(@as(u8, 0x15), Crc.hash("123456789")); - var c = Crc8Darc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x15), c.final()); } test "CRC-8/DVB-S2" { - const Crc8DvbS2 = crc.Crc8DvbS2; + const Crc = crc.@"CRC-8/DVB-S2"; - try testing.expectEqual(@as(u8, 0xbc), Crc8DvbS2.hash("123456789")); + try testing.expectEqual(@as(u8, 0xbc), Crc.hash("123456789")); - var c = Crc8DvbS2.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xbc), c.final()); } test "CRC-8/GSM-A" { - const Crc8GsmA = crc.Crc8GsmA; + const Crc = crc.@"CRC-8/GSM-A"; - try testing.expectEqual(@as(u8, 0x37), Crc8GsmA.hash("123456789")); + try testing.expectEqual(@as(u8, 0x37), Crc.hash("123456789")); - var c = Crc8GsmA.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x37), c.final()); } test "CRC-8/GSM-B" { - const Crc8GsmB = crc.Crc8GsmB; + const Crc = crc.@"CRC-8/GSM-B"; - try testing.expectEqual(@as(u8, 0x94), Crc8GsmB.hash("123456789")); + try testing.expectEqual(@as(u8, 0x94), Crc.hash("123456789")); - var c = Crc8GsmB.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x94), c.final()); } test "CRC-8/HITAG" { - const Crc8Hitag = crc.Crc8Hitag; + const Crc = crc.@"CRC-8/HITAG"; - try testing.expectEqual(@as(u8, 0xb4), Crc8Hitag.hash("123456789")); + try testing.expectEqual(@as(u8, 0xb4), Crc.hash("123456789")); - var c = Crc8Hitag.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xb4), c.final()); } test "CRC-8/I-432-1" { - const Crc8I4321 = crc.Crc8I4321; + const Crc = crc.@"CRC-8/I-432-1"; - try testing.expectEqual(@as(u8, 0xa1), Crc8I4321.hash("123456789")); + try testing.expectEqual(@as(u8, 0xa1), Crc.hash("123456789")); - var c = Crc8I4321.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xa1), c.final()); } test "CRC-8/I-CODE" { - const Crc8ICode = crc.Crc8ICode; + const Crc = crc.@"CRC-8/I-CODE"; - try testing.expectEqual(@as(u8, 0x7e), Crc8ICode.hash("123456789")); + try testing.expectEqual(@as(u8, 0x7e), Crc.hash("123456789")); - var c = Crc8ICode.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x7e), c.final()); } test "CRC-8/LTE" { - const Crc8Lte = crc.Crc8Lte; + const Crc = crc.@"CRC-8/LTE"; - try testing.expectEqual(@as(u8, 0xea), Crc8Lte.hash("123456789")); + try testing.expectEqual(@as(u8, 0xea), Crc.hash("123456789")); - var c = Crc8Lte.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xea), c.final()); } test "CRC-8/MAXIM-DOW" { - const Crc8MaximDow = crc.Crc8MaximDow; + const Crc = crc.@"CRC-8/MAXIM-DOW"; - try testing.expectEqual(@as(u8, 0xa1), Crc8MaximDow.hash("123456789")); + try testing.expectEqual(@as(u8, 0xa1), Crc.hash("123456789")); - var c = Crc8MaximDow.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xa1), c.final()); } test "CRC-8/MIFARE-MAD" { - const Crc8MifareMad = crc.Crc8MifareMad; + const Crc = crc.@"CRC-8/MIFARE-MAD"; - try testing.expectEqual(@as(u8, 0x99), Crc8MifareMad.hash("123456789")); + try testing.expectEqual(@as(u8, 0x99), Crc.hash("123456789")); - var c = Crc8MifareMad.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x99), c.final()); } test "CRC-8/NRSC-5" { - const Crc8Nrsc5 = crc.Crc8Nrsc5; + const Crc = crc.@"CRC-8/NRSC-5"; - try testing.expectEqual(@as(u8, 0xf7), Crc8Nrsc5.hash("123456789")); + try testing.expectEqual(@as(u8, 0xf7), Crc.hash("123456789")); - var c = Crc8Nrsc5.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xf7), c.final()); } test "CRC-8/OPENSAFETY" { - const Crc8Opensafety = crc.Crc8Opensafety; + const Crc = crc.@"CRC-8/OPENSAFETY"; - try testing.expectEqual(@as(u8, 0x3e), Crc8Opensafety.hash("123456789")); + try testing.expectEqual(@as(u8, 0x3e), Crc.hash("123456789")); - var c = Crc8Opensafety.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x3e), c.final()); } test "CRC-8/ROHC" { - const Crc8Rohc = crc.Crc8Rohc; + const Crc = crc.@"CRC-8/ROHC"; - try testing.expectEqual(@as(u8, 0xd0), Crc8Rohc.hash("123456789")); + try testing.expectEqual(@as(u8, 0xd0), Crc.hash("123456789")); - var c = Crc8Rohc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xd0), c.final()); } test "CRC-8/SAE-J1850" { - const Crc8SaeJ1850 = crc.Crc8SaeJ1850; + const Crc = crc.@"CRC-8/SAE-J1850"; - try testing.expectEqual(@as(u8, 0x4b), Crc8SaeJ1850.hash("123456789")); + try testing.expectEqual(@as(u8, 0x4b), Crc.hash("123456789")); - var c = Crc8SaeJ1850.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x4b), c.final()); } test "CRC-8/SMBUS" { - const Crc8Smbus = crc.Crc8Smbus; + const Crc = crc.@"CRC-8/SMBUS"; - try testing.expectEqual(@as(u8, 0xf4), Crc8Smbus.hash("123456789")); + try testing.expectEqual(@as(u8, 0xf4), Crc.hash("123456789")); - var c = Crc8Smbus.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0xf4), c.final()); } test "CRC-8/TECH-3250" { - const Crc8Tech3250 = crc.Crc8Tech3250; + const Crc = crc.@"CRC-8/TECH-3250"; - try testing.expectEqual(@as(u8, 0x97), Crc8Tech3250.hash("123456789")); + try testing.expectEqual(@as(u8, 0x97), Crc.hash("123456789")); - var c = Crc8Tech3250.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x97), c.final()); } test "CRC-8/WCDMA" { - const Crc8Wcdma = crc.Crc8Wcdma; + const Crc = crc.@"CRC-8/WCDMA"; - try testing.expectEqual(@as(u8, 0x25), Crc8Wcdma.hash("123456789")); + try testing.expectEqual(@as(u8, 0x25), Crc.hash("123456789")); - var c = Crc8Wcdma.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u8, 0x25), c.final()); } test "CRC-10/ATM" { - const Crc10Atm = crc.Crc10Atm; + const Crc = crc.@"CRC-10/ATM"; - try testing.expectEqual(@as(u10, 0x199), Crc10Atm.hash("123456789")); + try testing.expectEqual(@as(u10, 0x199), Crc.hash("123456789")); - var c = Crc10Atm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u10, 0x199), c.final()); } test "CRC-10/CDMA2000" { - const Crc10Cdma2000 = crc.Crc10Cdma2000; + const Crc = crc.@"CRC-10/CDMA2000"; - try testing.expectEqual(@as(u10, 0x233), Crc10Cdma2000.hash("123456789")); + try testing.expectEqual(@as(u10, 0x233), Crc.hash("123456789")); - var c = Crc10Cdma2000.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u10, 0x233), c.final()); } test "CRC-10/GSM" { - const Crc10Gsm = crc.Crc10Gsm; + const Crc = crc.@"CRC-10/GSM"; - try testing.expectEqual(@as(u10, 0x12a), Crc10Gsm.hash("123456789")); + try testing.expectEqual(@as(u10, 0x12a), Crc.hash("123456789")); - var c = Crc10Gsm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u10, 0x12a), c.final()); } test "CRC-11/FLEXRAY" { - const Crc11Flexray = crc.Crc11Flexray; + const Crc = crc.@"CRC-11/FLEXRAY"; - try testing.expectEqual(@as(u11, 0x5a3), Crc11Flexray.hash("123456789")); + try testing.expectEqual(@as(u11, 0x5a3), Crc.hash("123456789")); - var c = Crc11Flexray.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u11, 0x5a3), c.final()); } test "CRC-11/UMTS" { - const Crc11Umts = crc.Crc11Umts; + const Crc = crc.@"CRC-11/UMTS"; - try testing.expectEqual(@as(u11, 0x061), Crc11Umts.hash("123456789")); + try testing.expectEqual(@as(u11, 0x061), Crc.hash("123456789")); - var c = Crc11Umts.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u11, 0x061), c.final()); } test "CRC-12/CDMA2000" { - const Crc12Cdma2000 = crc.Crc12Cdma2000; + const Crc = crc.@"CRC-12/CDMA2000"; - try testing.expectEqual(@as(u12, 0xd4d), Crc12Cdma2000.hash("123456789")); + try testing.expectEqual(@as(u12, 0xd4d), Crc.hash("123456789")); - var c = Crc12Cdma2000.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u12, 0xd4d), c.final()); } test "CRC-12/DECT" { - const Crc12Dect = crc.Crc12Dect; + const Crc = crc.@"CRC-12/DECT"; - try testing.expectEqual(@as(u12, 0xf5b), Crc12Dect.hash("123456789")); + try testing.expectEqual(@as(u12, 0xf5b), Crc.hash("123456789")); - var c = Crc12Dect.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u12, 0xf5b), c.final()); } test "CRC-12/GSM" { - const Crc12Gsm = crc.Crc12Gsm; + const Crc = crc.@"CRC-12/GSM"; - try testing.expectEqual(@as(u12, 0xb34), Crc12Gsm.hash("123456789")); + try testing.expectEqual(@as(u12, 0xb34), Crc.hash("123456789")); - var c = Crc12Gsm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u12, 0xb34), c.final()); } test "CRC-12/UMTS" { - const Crc12Umts = crc.Crc12Umts; + const Crc = crc.@"CRC-12/UMTS"; - try testing.expectEqual(@as(u12, 0xdaf), Crc12Umts.hash("123456789")); + try testing.expectEqual(@as(u12, 0xdaf), Crc.hash("123456789")); - var c = Crc12Umts.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u12, 0xdaf), c.final()); } test "CRC-13/BBC" { - const Crc13Bbc = crc.Crc13Bbc; + const Crc = crc.@"CRC-13/BBC"; - try testing.expectEqual(@as(u13, 0x04fa), Crc13Bbc.hash("123456789")); + try testing.expectEqual(@as(u13, 0x04fa), Crc.hash("123456789")); - var c = Crc13Bbc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u13, 0x04fa), c.final()); } test "CRC-14/DARC" { - const Crc14Darc = crc.Crc14Darc; + const Crc = crc.@"CRC-14/DARC"; - try testing.expectEqual(@as(u14, 0x082d), Crc14Darc.hash("123456789")); + try testing.expectEqual(@as(u14, 0x082d), Crc.hash("123456789")); - var c = Crc14Darc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u14, 0x082d), c.final()); } test "CRC-14/GSM" { - const Crc14Gsm = crc.Crc14Gsm; + const Crc = crc.@"CRC-14/GSM"; - try testing.expectEqual(@as(u14, 0x30ae), Crc14Gsm.hash("123456789")); + try testing.expectEqual(@as(u14, 0x30ae), Crc.hash("123456789")); - var c = Crc14Gsm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u14, 0x30ae), c.final()); } test "CRC-15/CAN" { - const Crc15Can = crc.Crc15Can; + const Crc = crc.@"CRC-15/CAN"; - try testing.expectEqual(@as(u15, 0x059e), Crc15Can.hash("123456789")); + try testing.expectEqual(@as(u15, 0x059e), Crc.hash("123456789")); - var c = Crc15Can.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u15, 0x059e), c.final()); } test "CRC-15/MPT1327" { - const Crc15Mpt1327 = crc.Crc15Mpt1327; + const Crc = crc.@"CRC-15/MPT1327"; - try testing.expectEqual(@as(u15, 0x2566), Crc15Mpt1327.hash("123456789")); + try testing.expectEqual(@as(u15, 0x2566), Crc.hash("123456789")); - var c = Crc15Mpt1327.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u15, 0x2566), c.final()); } test "CRC-16/ARC" { - const Crc16Arc = crc.Crc16Arc; + const Crc = crc.@"CRC-16/ARC"; - try testing.expectEqual(@as(u16, 0xbb3d), Crc16Arc.hash("123456789")); + try testing.expectEqual(@as(u16, 0xbb3d), Crc.hash("123456789")); - var c = Crc16Arc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xbb3d), c.final()); } test "CRC-16/CDMA2000" { - const Crc16Cdma2000 = crc.Crc16Cdma2000; + const Crc = crc.@"CRC-16/CDMA2000"; - try testing.expectEqual(@as(u16, 0x4c06), Crc16Cdma2000.hash("123456789")); + try testing.expectEqual(@as(u16, 0x4c06), Crc.hash("123456789")); - var c = Crc16Cdma2000.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x4c06), c.final()); } test "CRC-16/CMS" { - const Crc16Cms = crc.Crc16Cms; + const Crc = crc.@"CRC-16/CMS"; - try testing.expectEqual(@as(u16, 0xaee7), Crc16Cms.hash("123456789")); + try testing.expectEqual(@as(u16, 0xaee7), Crc.hash("123456789")); - var c = Crc16Cms.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xaee7), c.final()); } test "CRC-16/DDS-110" { - const Crc16Dds110 = crc.Crc16Dds110; + const Crc = crc.@"CRC-16/DDS-110"; - try testing.expectEqual(@as(u16, 0x9ecf), Crc16Dds110.hash("123456789")); + try testing.expectEqual(@as(u16, 0x9ecf), Crc.hash("123456789")); - var c = Crc16Dds110.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x9ecf), c.final()); } test "CRC-16/DECT-R" { - const Crc16DectR = crc.Crc16DectR; + const Crc = crc.@"CRC-16/DECT-R"; - try testing.expectEqual(@as(u16, 0x007e), Crc16DectR.hash("123456789")); + try testing.expectEqual(@as(u16, 0x007e), Crc.hash("123456789")); - var c = Crc16DectR.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x007e), c.final()); } test "CRC-16/DECT-X" { - const Crc16DectX = crc.Crc16DectX; + const Crc = crc.@"CRC-16/DECT-X"; - try testing.expectEqual(@as(u16, 0x007f), Crc16DectX.hash("123456789")); + try testing.expectEqual(@as(u16, 0x007f), Crc.hash("123456789")); - var c = Crc16DectX.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x007f), c.final()); } test "CRC-16/DNP" { - const Crc16Dnp = crc.Crc16Dnp; + const Crc = crc.@"CRC-16/DNP"; - try testing.expectEqual(@as(u16, 0xea82), Crc16Dnp.hash("123456789")); + try testing.expectEqual(@as(u16, 0xea82), Crc.hash("123456789")); - var c = Crc16Dnp.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xea82), c.final()); } test "CRC-16/EN-13757" { - const Crc16En13757 = crc.Crc16En13757; + const Crc = crc.@"CRC-16/EN-13757"; - try testing.expectEqual(@as(u16, 0xc2b7), Crc16En13757.hash("123456789")); + try testing.expectEqual(@as(u16, 0xc2b7), Crc.hash("123456789")); - var c = Crc16En13757.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xc2b7), c.final()); } test "CRC-16/GENIBUS" { - const Crc16Genibus = crc.Crc16Genibus; + const Crc = crc.@"CRC-16/GENIBUS"; - try testing.expectEqual(@as(u16, 0xd64e), Crc16Genibus.hash("123456789")); + try testing.expectEqual(@as(u16, 0xd64e), Crc.hash("123456789")); - var c = Crc16Genibus.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xd64e), c.final()); } test "CRC-16/GSM" { - const Crc16Gsm = crc.Crc16Gsm; + const Crc = crc.@"CRC-16/GSM"; - try testing.expectEqual(@as(u16, 0xce3c), Crc16Gsm.hash("123456789")); + try testing.expectEqual(@as(u16, 0xce3c), Crc.hash("123456789")); - var c = Crc16Gsm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xce3c), c.final()); } test "CRC-16/IBM-3740" { - const Crc16Ibm3740 = crc.Crc16Ibm3740; + const Crc = crc.@"CRC-16/IBM-3740"; - try testing.expectEqual(@as(u16, 0x29b1), Crc16Ibm3740.hash("123456789")); + try testing.expectEqual(@as(u16, 0x29b1), Crc.hash("123456789")); - var c = Crc16Ibm3740.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x29b1), c.final()); } test "CRC-16/IBM-SDLC" { - const Crc16IbmSdlc = crc.Crc16IbmSdlc; + const Crc = crc.@"CRC-16/IBM-SDLC"; - try testing.expectEqual(@as(u16, 0x906e), Crc16IbmSdlc.hash("123456789")); + try testing.expectEqual(@as(u16, 0x906e), Crc.hash("123456789")); - var c = Crc16IbmSdlc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x906e), c.final()); } test "CRC-16/ISO-IEC-14443-3-A" { - const Crc16IsoIec144433A = crc.Crc16IsoIec144433A; + const Crc = crc.@"CRC-16/ISO-IEC-14443-3-A"; - try testing.expectEqual(@as(u16, 0xbf05), Crc16IsoIec144433A.hash("123456789")); + try testing.expectEqual(@as(u16, 0xbf05), Crc.hash("123456789")); - var c = Crc16IsoIec144433A.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xbf05), c.final()); } test "CRC-16/KERMIT" { - const Crc16Kermit = crc.Crc16Kermit; + const Crc = crc.@"CRC-16/KERMIT"; - try testing.expectEqual(@as(u16, 0x2189), Crc16Kermit.hash("123456789")); + try testing.expectEqual(@as(u16, 0x2189), Crc.hash("123456789")); - var c = Crc16Kermit.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x2189), c.final()); } test "CRC-16/LJ1200" { - const Crc16Lj1200 = crc.Crc16Lj1200; + const Crc = crc.@"CRC-16/LJ1200"; - try testing.expectEqual(@as(u16, 0xbdf4), Crc16Lj1200.hash("123456789")); + try testing.expectEqual(@as(u16, 0xbdf4), Crc.hash("123456789")); - var c = Crc16Lj1200.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xbdf4), c.final()); } test "CRC-16/M17" { - const Crc16M17 = crc.Crc16M17; + const Crc = crc.@"CRC-16/M17"; - try testing.expectEqual(@as(u16, 0x772b), Crc16M17.hash("123456789")); + try testing.expectEqual(@as(u16, 0x772b), Crc.hash("123456789")); - var c = Crc16M17.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x772b), c.final()); } test "CRC-16/MAXIM-DOW" { - const Crc16MaximDow = crc.Crc16MaximDow; + const Crc = crc.@"CRC-16/MAXIM-DOW"; - try testing.expectEqual(@as(u16, 0x44c2), Crc16MaximDow.hash("123456789")); + try testing.expectEqual(@as(u16, 0x44c2), Crc.hash("123456789")); - var c = Crc16MaximDow.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x44c2), c.final()); } test "CRC-16/MCRF4XX" { - const Crc16Mcrf4xx = crc.Crc16Mcrf4xx; + const Crc = crc.@"CRC-16/MCRF4XX"; - try testing.expectEqual(@as(u16, 0x6f91), Crc16Mcrf4xx.hash("123456789")); + try testing.expectEqual(@as(u16, 0x6f91), Crc.hash("123456789")); - var c = Crc16Mcrf4xx.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x6f91), c.final()); } test "CRC-16/MODBUS" { - const Crc16Modbus = crc.Crc16Modbus; + const Crc = crc.@"CRC-16/MODBUS"; - try testing.expectEqual(@as(u16, 0x4b37), Crc16Modbus.hash("123456789")); + try testing.expectEqual(@as(u16, 0x4b37), Crc.hash("123456789")); - var c = Crc16Modbus.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x4b37), c.final()); } test "CRC-16/NRSC-5" { - const Crc16Nrsc5 = crc.Crc16Nrsc5; + const Crc = crc.@"CRC-16/NRSC-5"; - try testing.expectEqual(@as(u16, 0xa066), Crc16Nrsc5.hash("123456789")); + try testing.expectEqual(@as(u16, 0xa066), Crc.hash("123456789")); - var c = Crc16Nrsc5.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xa066), c.final()); } test "CRC-16/OPENSAFETY-A" { - const Crc16OpensafetyA = crc.Crc16OpensafetyA; + const Crc = crc.@"CRC-16/OPENSAFETY-A"; - try testing.expectEqual(@as(u16, 0x5d38), Crc16OpensafetyA.hash("123456789")); + try testing.expectEqual(@as(u16, 0x5d38), Crc.hash("123456789")); - var c = Crc16OpensafetyA.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x5d38), c.final()); } test "CRC-16/OPENSAFETY-B" { - const Crc16OpensafetyB = crc.Crc16OpensafetyB; + const Crc = crc.@"CRC-16/OPENSAFETY-B"; - try testing.expectEqual(@as(u16, 0x20fe), Crc16OpensafetyB.hash("123456789")); + try testing.expectEqual(@as(u16, 0x20fe), Crc.hash("123456789")); - var c = Crc16OpensafetyB.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x20fe), c.final()); } test "CRC-16/PROFIBUS" { - const Crc16Profibus = crc.Crc16Profibus; + const Crc = crc.@"CRC-16/PROFIBUS"; - try testing.expectEqual(@as(u16, 0xa819), Crc16Profibus.hash("123456789")); + try testing.expectEqual(@as(u16, 0xa819), Crc.hash("123456789")); - var c = Crc16Profibus.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xa819), c.final()); } test "CRC-16/RIELLO" { - const Crc16Riello = crc.Crc16Riello; + const Crc = crc.@"CRC-16/RIELLO"; - try testing.expectEqual(@as(u16, 0x63d0), Crc16Riello.hash("123456789")); + try testing.expectEqual(@as(u16, 0x63d0), Crc.hash("123456789")); - var c = Crc16Riello.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x63d0), c.final()); } test "CRC-16/SPI-FUJITSU" { - const Crc16SpiFujitsu = crc.Crc16SpiFujitsu; + const Crc = crc.@"CRC-16/SPI-FUJITSU"; - try testing.expectEqual(@as(u16, 0xe5cc), Crc16SpiFujitsu.hash("123456789")); + try testing.expectEqual(@as(u16, 0xe5cc), Crc.hash("123456789")); - var c = Crc16SpiFujitsu.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xe5cc), c.final()); } test "CRC-16/T10-DIF" { - const Crc16T10Dif = crc.Crc16T10Dif; + const Crc = crc.@"CRC-16/T10-DIF"; - try testing.expectEqual(@as(u16, 0xd0db), Crc16T10Dif.hash("123456789")); + try testing.expectEqual(@as(u16, 0xd0db), Crc.hash("123456789")); - var c = Crc16T10Dif.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xd0db), c.final()); } test "CRC-16/TELEDISK" { - const Crc16Teledisk = crc.Crc16Teledisk; + const Crc = crc.@"CRC-16/TELEDISK"; - try testing.expectEqual(@as(u16, 0x0fb3), Crc16Teledisk.hash("123456789")); + try testing.expectEqual(@as(u16, 0x0fb3), Crc.hash("123456789")); - var c = Crc16Teledisk.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x0fb3), c.final()); } test "CRC-16/TMS37157" { - const Crc16Tms37157 = crc.Crc16Tms37157; + const Crc = crc.@"CRC-16/TMS37157"; - try testing.expectEqual(@as(u16, 0x26b1), Crc16Tms37157.hash("123456789")); + try testing.expectEqual(@as(u16, 0x26b1), Crc.hash("123456789")); - var c = Crc16Tms37157.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x26b1), c.final()); } test "CRC-16/UMTS" { - const Crc16Umts = crc.Crc16Umts; + const Crc = crc.@"CRC-16/UMTS"; - try testing.expectEqual(@as(u16, 0xfee8), Crc16Umts.hash("123456789")); + try testing.expectEqual(@as(u16, 0xfee8), Crc.hash("123456789")); - var c = Crc16Umts.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xfee8), c.final()); } test "CRC-16/USB" { - const Crc16Usb = crc.Crc16Usb; + const Crc = crc.@"CRC-16/USB"; - try testing.expectEqual(@as(u16, 0xb4c8), Crc16Usb.hash("123456789")); + try testing.expectEqual(@as(u16, 0xb4c8), Crc.hash("123456789")); - var c = Crc16Usb.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0xb4c8), c.final()); } test "CRC-16/XMODEM" { - const Crc16Xmodem = crc.Crc16Xmodem; + const Crc = crc.@"CRC-16/XMODEM"; - try testing.expectEqual(@as(u16, 0x31c3), Crc16Xmodem.hash("123456789")); + try testing.expectEqual(@as(u16, 0x31c3), Crc.hash("123456789")); - var c = Crc16Xmodem.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u16, 0x31c3), c.final()); } test "CRC-17/CAN-FD" { - const Crc17CanFd = crc.Crc17CanFd; + const Crc = crc.@"CRC-17/CAN-FD"; - try testing.expectEqual(@as(u17, 0x04f03), Crc17CanFd.hash("123456789")); + try testing.expectEqual(@as(u17, 0x04f03), Crc.hash("123456789")); - var c = Crc17CanFd.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u17, 0x04f03), c.final()); } test "CRC-21/CAN-FD" { - const Crc21CanFd = crc.Crc21CanFd; + const Crc = crc.@"CRC-21/CAN-FD"; - try testing.expectEqual(@as(u21, 0x0ed841), Crc21CanFd.hash("123456789")); + try testing.expectEqual(@as(u21, 0x0ed841), Crc.hash("123456789")); - var c = Crc21CanFd.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u21, 0x0ed841), c.final()); } test "CRC-24/BLE" { - const Crc24Ble = crc.Crc24Ble; + const Crc = crc.@"CRC-24/BLE"; - try testing.expectEqual(@as(u24, 0xc25a56), Crc24Ble.hash("123456789")); + try testing.expectEqual(@as(u24, 0xc25a56), Crc.hash("123456789")); - var c = Crc24Ble.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u24, 0xc25a56), c.final()); } test "CRC-24/FLEXRAY-A" { - const Crc24FlexrayA = crc.Crc24FlexrayA; + const Crc = crc.@"CRC-24/FLEXRAY-A"; - try testing.expectEqual(@as(u24, 0x7979bd), Crc24FlexrayA.hash("123456789")); + try testing.expectEqual(@as(u24, 0x7979bd), Crc.hash("123456789")); - var c = Crc24FlexrayA.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u24, 0x7979bd), c.final()); } test "CRC-24/FLEXRAY-B" { - const Crc24FlexrayB = crc.Crc24FlexrayB; + const Crc = crc.@"CRC-24/FLEXRAY-B"; - try testing.expectEqual(@as(u24, 0x1f23b8), Crc24FlexrayB.hash("123456789")); + try testing.expectEqual(@as(u24, 0x1f23b8), Crc.hash("123456789")); - var c = Crc24FlexrayB.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u24, 0x1f23b8), c.final()); } test "CRC-24/INTERLAKEN" { - const Crc24Interlaken = crc.Crc24Interlaken; + const Crc = crc.@"CRC-24/INTERLAKEN"; - try testing.expectEqual(@as(u24, 0xb4f3e6), Crc24Interlaken.hash("123456789")); + try testing.expectEqual(@as(u24, 0xb4f3e6), Crc.hash("123456789")); - var c = Crc24Interlaken.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u24, 0xb4f3e6), c.final()); } test "CRC-24/LTE-A" { - const Crc24LteA = crc.Crc24LteA; + const Crc = crc.@"CRC-24/LTE-A"; - try testing.expectEqual(@as(u24, 0xcde703), Crc24LteA.hash("123456789")); + try testing.expectEqual(@as(u24, 0xcde703), Crc.hash("123456789")); - var c = Crc24LteA.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u24, 0xcde703), c.final()); } test "CRC-24/LTE-B" { - const Crc24LteB = crc.Crc24LteB; + const Crc = crc.@"CRC-24/LTE-B"; - try testing.expectEqual(@as(u24, 0x23ef52), Crc24LteB.hash("123456789")); + try testing.expectEqual(@as(u24, 0x23ef52), Crc.hash("123456789")); - var c = Crc24LteB.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u24, 0x23ef52), c.final()); } test "CRC-24/OPENPGP" { - const Crc24Openpgp = crc.Crc24Openpgp; + const Crc = crc.@"CRC-24/OPENPGP"; - try testing.expectEqual(@as(u24, 0x21cf02), Crc24Openpgp.hash("123456789")); + try testing.expectEqual(@as(u24, 0x21cf02), Crc.hash("123456789")); - var c = Crc24Openpgp.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u24, 0x21cf02), c.final()); } test "CRC-24/OS-9" { - const Crc24Os9 = crc.Crc24Os9; + const Crc = crc.@"CRC-24/OS-9"; - try testing.expectEqual(@as(u24, 0x200fa5), Crc24Os9.hash("123456789")); + try testing.expectEqual(@as(u24, 0x200fa5), Crc.hash("123456789")); - var c = Crc24Os9.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u24, 0x200fa5), c.final()); } test "CRC-30/CDMA" { - const Crc30Cdma = crc.Crc30Cdma; + const Crc = crc.@"CRC-30/CDMA"; - try testing.expectEqual(@as(u30, 0x04c34abf), Crc30Cdma.hash("123456789")); + try testing.expectEqual(@as(u30, 0x04c34abf), Crc.hash("123456789")); - var c = Crc30Cdma.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u30, 0x04c34abf), c.final()); } test "CRC-31/PHILIPS" { - const Crc31Philips = crc.Crc31Philips; + const Crc = crc.@"CRC-31/PHILIPS"; - try testing.expectEqual(@as(u31, 0x0ce9e46c), Crc31Philips.hash("123456789")); + try testing.expectEqual(@as(u31, 0x0ce9e46c), Crc.hash("123456789")); - var c = Crc31Philips.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u31, 0x0ce9e46c), c.final()); } test "CRC-32/AIXM" { - const Crc32Aixm = crc.Crc32Aixm; + const Crc = crc.@"CRC-32/AIXM"; - try testing.expectEqual(@as(u32, 0x3010bf7f), Crc32Aixm.hash("123456789")); + try testing.expectEqual(@as(u32, 0x3010bf7f), Crc.hash("123456789")); - var c = Crc32Aixm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0x3010bf7f), c.final()); } test "CRC-32/AUTOSAR" { - const Crc32Autosar = crc.Crc32Autosar; + const Crc = crc.@"CRC-32/AUTOSAR"; - try testing.expectEqual(@as(u32, 0x1697d06a), Crc32Autosar.hash("123456789")); + try testing.expectEqual(@as(u32, 0x1697d06a), Crc.hash("123456789")); - var c = Crc32Autosar.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0x1697d06a), c.final()); } test "CRC-32/BASE91-D" { - const Crc32Base91D = crc.Crc32Base91D; + const Crc = crc.@"CRC-32/BASE91-D"; - try testing.expectEqual(@as(u32, 0x87315576), Crc32Base91D.hash("123456789")); + try testing.expectEqual(@as(u32, 0x87315576), Crc.hash("123456789")); - var c = Crc32Base91D.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0x87315576), c.final()); } test "CRC-32/BZIP2" { - const Crc32Bzip2 = crc.Crc32Bzip2; + const Crc = crc.@"CRC-32/BZIP2"; - try testing.expectEqual(@as(u32, 0xfc891918), Crc32Bzip2.hash("123456789")); + try testing.expectEqual(@as(u32, 0xfc891918), Crc.hash("123456789")); - var c = Crc32Bzip2.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0xfc891918), c.final()); } test "CRC-32/CD-ROM-EDC" { - const Crc32CdRomEdc = crc.Crc32CdRomEdc; + const Crc = crc.@"CRC-32/CD-ROM-EDC"; - try testing.expectEqual(@as(u32, 0x6ec2edc4), Crc32CdRomEdc.hash("123456789")); + try testing.expectEqual(@as(u32, 0x6ec2edc4), Crc.hash("123456789")); - var c = Crc32CdRomEdc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0x6ec2edc4), c.final()); } test "CRC-32/CKSUM" { - const Crc32Cksum = crc.Crc32Cksum; + const Crc = crc.@"CRC-32/CKSUM"; - try testing.expectEqual(@as(u32, 0x765e7680), Crc32Cksum.hash("123456789")); + try testing.expectEqual(@as(u32, 0x765e7680), Crc.hash("123456789")); - var c = Crc32Cksum.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0x765e7680), c.final()); } +test "CRC-32/ISCSI" { + const Crc = crc.@"CRC-32/ISCSI"; + + try testing.expectEqual(@as(u32, 0xe3069283), Crc.hash("123456789")); + + var c = Crc.init(); + c.update("1234"); + c.update("56789"); + try testing.expectEqual(@as(u32, 0xe3069283), c.final()); +} + test "CRC-32/ISO-HDLC" { - const Crc32IsoHdlc = crc.Crc32IsoHdlc; + const Crc = crc.@"CRC-32/ISO-HDLC"; - try testing.expectEqual(@as(u32, 0xcbf43926), Crc32IsoHdlc.hash("123456789")); + try testing.expectEqual(@as(u32, 0xcbf43926), Crc.hash("123456789")); - var c = Crc32IsoHdlc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0xcbf43926), c.final()); } test "CRC-32/JAMCRC" { - const Crc32Jamcrc = crc.Crc32Jamcrc; + const Crc = crc.@"CRC-32/JAMCRC"; - try testing.expectEqual(@as(u32, 0x340bc6d9), Crc32Jamcrc.hash("123456789")); + try testing.expectEqual(@as(u32, 0x340bc6d9), Crc.hash("123456789")); - var c = Crc32Jamcrc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0x340bc6d9), c.final()); } test "CRC-32/KOOPMAN" { - const Crc32Koopman = crc.Crc32Koopman; + const Crc = crc.@"CRC-32/KOOPMAN"; - try testing.expectEqual(@as(u32, 0x2d3dd0ae), Crc32Koopman.hash("123456789")); + try testing.expectEqual(@as(u32, 0x2d3dd0ae), Crc.hash("123456789")); - var c = Crc32Koopman.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0x2d3dd0ae), c.final()); } test "CRC-32/MEF" { - const Crc32Mef = crc.Crc32Mef; + const Crc = crc.@"CRC-32/MEF"; - try testing.expectEqual(@as(u32, 0xd2c22f51), Crc32Mef.hash("123456789")); + try testing.expectEqual(@as(u32, 0xd2c22f51), Crc.hash("123456789")); - var c = Crc32Mef.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0xd2c22f51), c.final()); } test "CRC-32/MPEG-2" { - const Crc32Mpeg2 = crc.Crc32Mpeg2; + const Crc = crc.@"CRC-32/MPEG-2"; - try testing.expectEqual(@as(u32, 0x0376e6e7), Crc32Mpeg2.hash("123456789")); + try testing.expectEqual(@as(u32, 0x0376e6e7), Crc.hash("123456789")); - var c = Crc32Mpeg2.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0x0376e6e7), c.final()); } test "CRC-32/XFER" { - const Crc32Xfer = crc.Crc32Xfer; + const Crc = crc.@"CRC-32/XFER"; - try testing.expectEqual(@as(u32, 0xbd0be338), Crc32Xfer.hash("123456789")); + try testing.expectEqual(@as(u32, 0xbd0be338), Crc.hash("123456789")); - var c = Crc32Xfer.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u32, 0xbd0be338), c.final()); } test "CRC-40/GSM" { - const Crc40Gsm = crc.Crc40Gsm; + const Crc = crc.@"CRC-40/GSM"; - try testing.expectEqual(@as(u40, 0xd4164fc646), Crc40Gsm.hash("123456789")); + try testing.expectEqual(@as(u40, 0xd4164fc646), Crc.hash("123456789")); - var c = Crc40Gsm.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u40, 0xd4164fc646), c.final()); } test "CRC-64/ECMA-182" { - const Crc64Ecma182 = crc.Crc64Ecma182; + const Crc = crc.@"CRC-64/ECMA-182"; - try testing.expectEqual(@as(u64, 0x6c40df5f0b497347), Crc64Ecma182.hash("123456789")); + try testing.expectEqual(@as(u64, 0x6c40df5f0b497347), Crc.hash("123456789")); - var c = Crc64Ecma182.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u64, 0x6c40df5f0b497347), c.final()); } test "CRC-64/GO-ISO" { - const Crc64GoIso = crc.Crc64GoIso; + const Crc = crc.@"CRC-64/GO-ISO"; - try testing.expectEqual(@as(u64, 0xb90956c775a41001), Crc64GoIso.hash("123456789")); + try testing.expectEqual(@as(u64, 0xb90956c775a41001), Crc.hash("123456789")); - var c = Crc64GoIso.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u64, 0xb90956c775a41001), c.final()); } test "CRC-64/MS" { - const Crc64Ms = crc.Crc64Ms; + const Crc = crc.@"CRC-64/MS"; - try testing.expectEqual(@as(u64, 0x75d4b74f024eceea), Crc64Ms.hash("123456789")); + try testing.expectEqual(@as(u64, 0x75d4b74f024eceea), Crc.hash("123456789")); - var c = Crc64Ms.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u64, 0x75d4b74f024eceea), c.final()); } test "CRC-64/REDIS" { - const Crc64Redis = crc.Crc64Redis; + const Crc = crc.@"CRC-64/REDIS"; - try testing.expectEqual(@as(u64, 0xe9c6d914c4b8d9ca), Crc64Redis.hash("123456789")); + try testing.expectEqual(@as(u64, 0xe9c6d914c4b8d9ca), Crc.hash("123456789")); - var c = Crc64Redis.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u64, 0xe9c6d914c4b8d9ca), c.final()); } test "CRC-64/WE" { - const Crc64We = crc.Crc64We; + const Crc = crc.@"CRC-64/WE"; - try testing.expectEqual(@as(u64, 0x62ec59e3f1a4f00a), Crc64We.hash("123456789")); + try testing.expectEqual(@as(u64, 0x62ec59e3f1a4f00a), Crc.hash("123456789")); - var c = Crc64We.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u64, 0x62ec59e3f1a4f00a), c.final()); } test "CRC-64/XZ" { - const Crc64Xz = crc.Crc64Xz; + const Crc = crc.@"CRC-64/XZ"; - try testing.expectEqual(@as(u64, 0x995dc9bbdf1939fa), Crc64Xz.hash("123456789")); + try testing.expectEqual(@as(u64, 0x995dc9bbdf1939fa), Crc.hash("123456789")); - var c = Crc64Xz.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u64, 0x995dc9bbdf1939fa), c.final()); } test "CRC-82/DARC" { - const Crc82Darc = crc.Crc82Darc; + const Crc = crc.@"CRC-82/DARC"; - try testing.expectEqual(@as(u82, 0x09ea83f625023801fd612), Crc82Darc.hash("123456789")); + try testing.expectEqual(@as(u82, 0x09ea83f625023801fd612), Crc.hash("123456789")); - var c = Crc82Darc.init(); + var c = Crc.init(); c.update("1234"); c.update("56789"); try testing.expectEqual(@as(u82, 0x09ea83f625023801fd612), c.final()); diff --git a/src/link/Coff.zig b/src/link/Coff.zig index 5706f124977684eccc28e379140335d912d946f0..fcb4dcc2a50b7e4e00aa0526056e75ffbd77863b 100644 --- a/src/link/Coff.zig +++ b/src/link/Coff.zig @@ -7,6 +7,7 @@ const std = @import("std"); const Io = std.Io; const assert = std.debug.assert; const log = std.log.scoped(.link); +const Crc32 = std.hash.crc.@"CRC-32/JAMCRC"; const codegen = @import("../codegen.zig"); const Compilation = @import("../Compilation.zig"); @@ -4599,7 +4600,7 @@ fn loadObject( const sym = si.get(coff); const existing_crc = switch (coff.getNode(sym.ni)) { .input_section => |isi| isi.inputSection(coff).crc, - else => std.hash.crc.Crc32Jamcrc.hash(sym.ni.sliceConst(&coff.mf)), + else => Crc32.hash(sym.ni.sliceConst(&coff.mf)), }; if (existing_crc == section.comdat_crc) { diff --git a/tools/crc/catalog.txt b/tools/crc/catalog.txt index d4244c6b7001e7df60c6094ee1d999854563c0b1..4051f4b70b1aaccba258827db6ea9980c6a0d58e 100644 --- a/tools/crc/catalog.txt +++ b/tools/crc/catalog.txt @@ -97,8 +97,7 @@ width=32 poly=0xa833982b init=0xffffffff refin=true refout=true xorout=0xff width=32 poly=0x04c11db7 init=0xffffffff refin=false refout=false xorout=0xffffffff check=0xfc891918 residue=0xc704dd7b name="CRC-32/BZIP2" width=32 poly=0x8001801b init=0x00000000 refin=true refout=true xorout=0x00000000 check=0x6ec2edc4 residue=0x00000000 name="CRC-32/CD-ROM-EDC" width=32 poly=0x04c11db7 init=0x00000000 refin=false refout=false xorout=0xffffffff check=0x765e7680 residue=0xc704dd7b name="CRC-32/CKSUM" -# CRC-32C implementation is defined manually, since it has an accelerated variant. -# width=32 poly=0x1edc6f41 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xe3069283 residue=0xb798b438 name="CRC-32/ISCSI" +width=32 poly=0x1edc6f41 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xe3069283 residue=0xb798b438 name="CRC-32/ISCSI" width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0xcbf43926 residue=0xdebb20e3 name="CRC-32/ISO-HDLC" width=32 poly=0x04c11db7 init=0xffffffff refin=true refout=true xorout=0x00000000 check=0x340bc6d9 residue=0x00000000 name="CRC-32/JAMCRC" width=32 poly=0x741b8cd7 init=0xffffffff refin=true refout=true xorout=0xffffffff check=0x2d3dd0ae residue=0x00000000 name="CRC-32/KOOPMAN" diff --git a/tools/update_crc_catalog.zig b/tools/update_crc_catalog.zig index 283b60b0d19ef14285bd758fa8aae7631e955690..55f51ce92b4f4a36f51fd176b681487de16d1621 100644 --- a/tools/update_crc_catalog.zig +++ b/tools/update_crc_catalog.zig @@ -2,7 +2,6 @@ const std = @import("std"); const Io = std.Io; const Dir = std.Io.Dir; const mem = std.mem; -const ascii = std.ascii; const catalog_txt = @embedFile("crc/catalog.txt"); @@ -32,6 +31,7 @@ fn @"i like cheese"(arena: std.mem.Allocator, io: Io, args: []const []const u8) var zig_code_file = try hash_target_dir.createFile(io, "crc.zig", .{}); defer zig_code_file.close(io); + var zig_code_file_buffer: [4096]u8 = undefined; var zig_code_file_writer = zig_code_file.writer(io, &zig_code_file_buffer); const code_writer = &zig_code_file_writer.interface; @@ -40,34 +40,12 @@ fn @"i like cheese"(arena: std.mem.Allocator, io: Io, args: []const []const u8) \\//! This file is auto-generated by tools/update_crc_catalog.zig. \\ \\const builtin = @import("builtin"); - \\const impl = @import("crc/impl.zig"); - \\ - \\pub const Crc = impl.Crc; - \\pub const Polynomial = impl.Polynomial; - \\pub const Crc32WithPoly = impl.Crc32WithPoly; - \\pub const Crc32SmallWithPoly = impl.Crc32SmallWithPoly; - \\ - \\pub const Crc32 = Crc32IsoHdlc; - \\ - \\test { - \\ _ = @import("crc/test.zig"); - \\} - \\ - \\pub const Crc32Iscsi = switch (builtin.cpu.hasAll(.x86, &.{ .@"64bit", .crc32 })) { - \\ true => @import("crc/Crc32c.zig"), - \\ else => Crc(u32, .{ - \\ .polynomial = 0x1edc6f41, - \\ .initial = 0xffffffff, - \\ .reflect_input = true, - \\ .reflect_output = true, - \\ .xor_output = 0xffffffff, - \\ }), - \\}; \\ ); var zig_test_file = try crc_target_dir.createFile(io, "test.zig", .{}); defer zig_test_file.close(io); + var zig_test_file_buffer: [4096]u8 = undefined; var zig_test_file_writer = zig_test_file.writer(io, &zig_test_file_buffer); const test_writer = &zig_test_file_writer.interface; @@ -81,35 +59,24 @@ fn @"i like cheese"(arena: std.mem.Allocator, io: Io, args: []const []const u8) \\const crc = @import("../crc.zig"); \\ \\test "crc32 ieee regression" { - \\ const crc32 = crc.Crc32IsoHdlc; - \\ try testing.expectEqual(crc32.hash(""), 0x00000000); - \\ try testing.expectEqual(crc32.hash("a"), 0xe8b7be43); - \\ try testing.expectEqual(crc32.hash("abc"), 0x352441c2); + \\ const Crc = crc.@"CRC-32/ISO-HDLC"; + \\ try testing.expectEqual(Crc.hash(""), 0x00000000); + \\ try testing.expectEqual(Crc.hash("a"), 0xe8b7be43); + \\ try testing.expectEqual(Crc.hash("abc"), 0x352441c2); \\} \\ \\test "crc32 castagnoli regression" { - \\ const crc32 = crc.Crc32Iscsi; - \\ try testing.expectEqual(crc32.hash(""), 0x00000000); - \\ try testing.expectEqual(crc32.hash("a"), 0xc1d04330); - \\ try testing.expectEqual(crc32.hash("abc"), 0x364b3fb7); + \\ const Crc = crc.@"CRC-32/ISCSI"; + \\ try testing.expectEqual(Crc.hash(""), 0x00000000); + \\ try testing.expectEqual(Crc.hash("a"), 0xc1d04330); + \\ try testing.expectEqual(Crc.hash("abc"), 0x364b3fb7); \\} \\ \\test "crc32 koopman regression" { - \\ const crc32 = crc.Crc32Koopman; - \\ try testing.expectEqual(crc32.hash(""), 0x00000000); - \\ try testing.expectEqual(crc32.hash("a"), 0x0da2aa8a); - \\ try testing.expectEqual(crc32.hash("abc"), 0xba2322ac); - \\} - \\ - \\test "CRC-32/ISCSI" { - \\ const Crc32Iscsi = crc.Crc32Iscsi; - \\ - \\ try testing.expectEqual(@as(u32, 0xe3069283), Crc32Iscsi.hash("123456789")); - \\ - \\ var c = Crc32Iscsi.init(); - \\ c.update("1234"); - \\ c.update("56789"); - \\ try testing.expectEqual(@as(u32, 0xe3069283), c.final()); + \\ const Crc = crc.@"CRC-32/KOOPMAN"; + \\ try testing.expectEqual(Crc.hash(""), 0x00000000); + \\ try testing.expectEqual(Crc.hash("a"), 0x0da2aa8a); + \\ try testing.expectEqual(Crc.hash("abc"), 0xba2322ac); \\} \\ ); @@ -158,59 +125,154 @@ fn @"i like cheese"(arena: std.mem.Allocator, io: Io, args: []const []const u8) } } - const snakecase = try ascii.allocLowerString(arena, name); - defer arena.free(snakecase); - - _ = mem.replace(u8, snakecase, "-", "_", snakecase); - _ = mem.replace(u8, snakecase, "/", "_", snakecase); - - var buf = try std.array_list.Managed(u8).initCapacity(arena, snakecase.len); - defer buf.deinit(); - - var prev: u8 = 0; - for (snakecase, 0..) |c, i| { - if (c == '_') { - // do nothing - } else if (i == 0) { - buf.appendAssumeCapacity(ascii.toUpper(c)); - } else if (prev == '_') { - buf.appendAssumeCapacity(ascii.toUpper(c)); - } else { - buf.appendAssumeCapacity(c); - } - prev = c; + if (mem.eql(u8, name, "CRC-32/ISCSI")) { + try code_writer.print( + \\ + \\pub const {f} = if (builtin.cpu.hasAll(.x86, &.{{ .@"64bit", .crc32 }})) + \\ @import("crc/Crc32c.zig") + \\else + \\ Generic(u{s}, .{{ + \\ .polynomial = {s}, + \\ .initial = {s}, + \\ .reflect_input = {s}, + \\ .reflect_output = {s}, + \\ .xor_output = {s}, + \\ }}); + \\ + , .{ std.zig.fmtId(name), width, poly, init, refin, refout, xorout }); + } else { + try code_writer.print( + \\ + \\pub const {f} = Generic(u{s}, .{{ + \\ .polynomial = {s}, + \\ .initial = {s}, + \\ .reflect_input = {s}, + \\ .reflect_output = {s}, + \\ .xor_output = {s}, + \\}}); + \\ + , .{ std.zig.fmtId(name), width, poly, init, refin, refout, xorout }); } - const camelcase = buf.items; - - try code_writer.writeAll(try std.fmt.allocPrint(arena, - \\ - \\pub const {s} = Crc(u{s}, .{{ - \\ .polynomial = {s}, - \\ .initial = {s}, - \\ .reflect_input = {s}, - \\ .reflect_output = {s}, - \\ .xor_output = {s}, - \\}}); - \\ - , .{ camelcase, width, poly, init, refin, refout, xorout })); - - try test_writer.writeAll(try std.fmt.allocPrint(arena, + try test_writer.print( \\ \\test "{0s}" {{ - \\ const {1s} = crc.{1s}; + \\ const Crc = crc.{1f}; \\ - \\ try testing.expectEqual(@as(u{2s}, {3s}), {1s}.hash("123456789")); + \\ try testing.expectEqual(@as(u{2s}, {3s}), Crc.hash("123456789")); \\ - \\ var c = {1s}.init(); + \\ var c = Crc.init(); \\ c.update("1234"); \\ c.update("56789"); \\ try testing.expectEqual(@as(u{2s}, {3s}), c.final()); \\}} \\ - , .{ name, camelcase, width, check })); + , .{ name, std.zig.fmtId(name), width, check }); } + try code_writer.writeAll( + \\ + \\pub fn Algorithm(comptime W: type) type { + \\ return struct { + \\ polynomial: W, + \\ initial: W, + \\ reflect_input: bool, + \\ reflect_output: bool, + \\ xor_output: W, + \\ }; + \\} + \\ + \\pub fn Generic(comptime W: type, comptime algorithm: Algorithm(W)) type { + \\ return struct { + \\ const Self = @This(); + \\ const I = if (@bitSizeOf(W) < 8) u8 else W; + \\ const lookup_table = blk: { + \\ @setEvalBranchQuota(2500); + \\ const poly = reflect(algorithm.polynomial); + \\ var table: [256]I = undefined; + \\ for (&table, 0..) |*e, i| { + \\ var crc: I = i; + \\ if (algorithm.reflect_input) { + \\ var j: usize = 0; + \\ while (j < 8) : (j += 1) { + \\ crc = (crc >> 1) ^ ((crc & 1) * poly); + \\ } + \\ } else { + \\ crc <<= @bitSizeOf(I) - 8; + \\ var j: usize = 0; + \\ while (j < 8) : (j += 1) { + \\ crc = (crc << 1) ^ (((crc >> (@bitSizeOf(I) - 1)) & 1) * poly); + \\ } + \\ } + \\ e.* = crc; + \\ } + \\ break :blk table; + \\ }; + \\ + \\ crc: I, + \\ + \\ pub fn init() Self { + \\ const initial = reflect(algorithm.initial); + \\ return .{ .crc = initial }; + \\ } + \\ + \\ inline fn tableEntry(index: I) I { + \\ const short: u8 = @truncate(index); + \\ return lookup_table[short]; + \\ } + \\ + \\ pub fn update(self: *Self, bytes: []const u8) void { + \\ var i: usize = 0; + \\ if (@bitSizeOf(I) <= 8) { + \\ while (i < bytes.len) : (i += 1) { + \\ self.crc = tableEntry(self.crc ^ bytes[i]); + \\ } + \\ } else if (algorithm.reflect_input) { + \\ while (i < bytes.len) : (i += 1) { + \\ const table_index = self.crc ^ bytes[i]; + \\ self.crc = tableEntry(table_index) ^ (self.crc >> 8); + \\ } + \\ } else { + \\ while (i < bytes.len) : (i += 1) { + \\ const table_index = (self.crc >> (@bitSizeOf(I) - 8)) ^ bytes[i]; + \\ self.crc = tableEntry(table_index) ^ (self.crc << 8); + \\ } + \\ } + \\ } + \\ + \\ pub fn final(self: Self) W { + \\ var c = self.crc; + \\ if (algorithm.reflect_input != algorithm.reflect_output) { + \\ c = @bitReverse(c); + \\ } + \\ if (!algorithm.reflect_output) { + \\ c >>= @bitSizeOf(I) - @bitSizeOf(W); + \\ } + \\ return @intCast(c ^ algorithm.xor_output); + \\ } + \\ + \\ pub fn hash(bytes: []const u8) W { + \\ var c = Self.init(); + \\ c.update(bytes); + \\ return c.final(); + \\ } + \\ + \\ fn reflect(x: I) I { + \\ const offset = @bitSizeOf(I) - @bitSizeOf(W); + \\ if (algorithm.reflect_input) + \\ return @bitReverse(x) >> offset + \\ else + \\ return x << offset; + \\ } + \\ }; + \\} + \\ + \\test { + \\ _ = @import("crc/test.zig"); + \\} + \\ + ); + try code_writer.flush(); try test_writer.flush(); }