use std::collections::HashSet;
use tact_parser::jenkins3::*;
#[test]
fn driver4() {
let mut h = 0;
let mut seen_values = HashSet::new();
for i in 0..8 {
h = hashlittle(b"", h);
assert!(seen_values.insert(h), "duplicate value at {i}: {h}");
}
}
#[test]
fn driver5() {
let mut b = 0;
let mut c = 0;
hashlittle2(b"", &mut c, &mut b);
assert_eq!(0xdeadbeef, c);
assert_eq!(0xdeadbeef, b);
b = 0xdeadbeef;
c = 0;
hashlittle2(b"", &mut c, &mut b);
assert_eq!(0xbd5b7dde, c);
assert_eq!(0xdeadbeef, b);
b = 0xdeadbeef;
c = 0xdeadbeef;
hashlittle2(b"", &mut c, &mut b);
assert_eq!(0x9c093ccd, c);
assert_eq!(0xbd5b7dde, b);
b = 0;
c = 0;
hashlittle2(b"Four score and seven years ago", &mut c, &mut b);
assert_eq!(0x17770551, c);
assert_eq!(0xce7226e6, b);
b = 1;
c = 0;
hashlittle2(b"Four score and seven years ago", &mut c, &mut b);
assert_eq!(0xe3607cae, c);
assert_eq!(0xbd371de4, b);
b = 0;
c = 1;
hashlittle2(b"Four score and seven years ago", &mut c, &mut b);
assert_eq!(0xcd628161, c);
assert_eq!(0x6cbea4b3, b);
assert_eq!(0x17770551, hashlittle(b"Four score and seven years ago", 0));
assert_eq!(0xcd628161, hashlittle(b"Four score and seven years ago", 1));
}
#[test]
fn ruby() {
const EXPECTED_VALUES: [u64; 0x100] = [
0xdeadbeefdeadbeef,
0x5559b6c48ba9414b,
0xb29a7b0cdf0d39c9,
0x95346f906b12f277,
0x13b4f97be4cf1d42,
0xea5bae4f1d4833cc,
0x7d4008d05229ee9e,
0x57b5bcaf589511d8,
0x71683417d4ccb93c,
0x94d25656eca51474,
0x54b5ea10610fc1e3,
0x032e5ed42ca6817a,
0x0cb6e7e95e4aa593,
0x6bff0f35bc9d6816,
0x749a42bf9609e9d3,
0x4391a77d63a6e503,
0xc62842075e84eafc,
0x6bb43f658c3532cb,
0x59cdae44d732003d,
0x2c0e537474abad21,
0xb7a4dbc994b659b5,
0xb5c589d28709c37b,
0x0aaeb4763190cf5d,
0x311a6808a5ff3c58,
0x9f4110029c0add53,
0x68519ca63a882244,
0x753ec2a2a91dd5db,
0x360473c3761df2cd,
0xd746a3b09255ed6e,
0xdc09846c9c75ff61,
0x9d942a7a308ed059,
0xeecffdb2dfa1dc11,
0x1759d92121362cfe,
0x3907f0250e62ec96,
0x2796f2c6d265c4e3,
0xe22c5bf7e78281da,
0x2c078b54653b9ba4,
0xb28b69dc12926a31,
0x893f213031c1d4b1,
0xc06b25ecc81ceeae,
0x592f87c11c9fa888,
0xdacb4349d70589e9,
0x8923764a9e14842a,
0xe986c32e5db343d9,
0x147d54673a104df7,
0x2410e99c0a40ca13,
0x774a91e70b260a2c,
0xb7e39ce12088dbc3,
0xa3beb4f32f4775ab,
0x63734e2982920552,
0xd888967016464e80,
0x331164b39ba06438,
0x674b580384f3ce0c,
0x1b8ef32d4725655a,
0xdf5fc0a7d1ebb17f,
0xe714da7a8aeb6d5b,
0x2d470fd79285001f,
0x19678d4b86c6b345,
0x58832f43fa7238f1,
0x3ff24b2c278852ed,
0x5fdf152bf9bec400,
0xe0c95f93beab009a,
0x3bd939ffcb1bf3aa,
0x46c0482624fcde8a,
0xb56973a79ff036cc,
0xafe7259509e22d6f,
0xe4a649dbdb884e9c,
0x29b48f490caed6ba,
0x6ca7578c8da7d795,
0x47cb255a6e549a11,
0x3b5c76317269d11b,
0xb854b56520223a57,
0xd5f7146184dd8038,
0xc1e725154e46aa4c,
0xc56aeecd1bc5fa39,
0x57eaf76bac4a1927,
0x9abfc9f40610425c,
0xb92f541c92d9a532,
0xf72a9e6ccfb611e1,
0xc8bd73c35b0553c5,
0x225cd4ea1055189c,
0x12847bd8167da6c0,
0x02d2c5f539860cb1,
0x6b67d4294af17916,
0xaae1b3720b3d7409,
0x3d08036d20990d24,
0x33cba4d99787aafc,
0xc24308eca60ad88d,
0x07e66b8264f05288,
0x2bf30075d2ba316e,
0x8b8bc0f3d980a8c4,
0x3bf716bc4b1c9f85,
0x6d38b681883a3708,
0x6cef0bf66ae85365,
0x3ba915b420e680b9,
0x8e99d2389bd79302,
0x6b35c13e593edd31,
0xfcc9a9152d03691f,
0x11f8fbc7d77a3dc1,
0x68bbf75f0ff089f9,
0xb62a98e9682b4c0b,
0x6e8207040a689d55,
0xc2c873b8631d3f70,
0x5868ceff270bef8b,
0x09e801326d97f10a,
0x5384cc34799d3b35,
0x98e1e4f15813fefc,
0xfd85dbc30a1864b5,
0x5dff3844cf12111b,
0x1d7130b198bbc502,
0xe598505603bd3c7a,
0x8a4e816d9467e2bc,
0x525f4b8404ffccb6,
0xb767d7e41bb0ae56,
0x20a032b65e842210,
0xb28cac5c6fc870c3,
0x2771902d25caa6ea,
0xa0303123458eeb83,
0xe8f20167af14cfa5,
0xcc435ab2c2e4665f,
0x841f296066e7d2a3,
0xbd08544bb709053d,
0xac28658855c24261,
0xa24f87a7a032a479,
0x350a6bed35501134,
0xbe07d2c4b3b088db,
0x8ad6c46ea8ed4fd4,
0x97cf4704fc761aa0,
0x848cffb24a200281,
0xe62ccef6da8061b9,
0xfdfb67ee9e9ce4b1,
0x055820e5c02f13d4,
0x79f3d2db50d48f27,
0x89c1995c11421187,
0x67902cd4a79a9608,
0x0f747585ed3e613c,
0xd64c5b56073b5a3b,
0x20f754c3c25e859f,
0x349aba69e6736c9f,
0x15f70f9164bc43c2,
0x62af988ba13f664f,
0x8f9f91279c7d0c40,
0x8aa0b51085f95456,
0x0f7f5b0cd64cf605,
0x2a65b4885155dc33,
0x44b3c0d50959844f,
0x1bdd09a227356a1e,
0x43c73246bebeb84b,
0x31580a32bb87f13a,
0x85be2d5db0a6f9cf,
0xb65eac79db6b37d3,
0x50857cf322b88eba,
0x7d0ecdd7d1f2053f,
0xee3692b2196660b9,
0x3d393556eaa6c874,
0x6978110dada985ce,
0x08803a6989b07339,
0x868a8379b616ff1f,
0xb81e106ca6325b04,
0xbcb698726954113c,
0x88618ea5aab3aab5,
0x4e34eb7aa79b1197,
0x01e89c398972f6a9,
0x85c78e9ae95433c2,
0x190c9b47100d09d7,
0xc0bf0bae1d35877a,
0x06e60db9468ba086,
0x5b6e14c540ef34c4,
0x2034489073557459,
0x7b429b1fcaeb1e65,
0xe4282561ee95207c,
0x1b659a23ae63513e,
0x55947817af869b46,
0xd497b20d8c67df87,
0xfd044f6fb7b6262f,
0xe9e2512dd592c285,
0xde98a3aa67e79113,
0xe9f5652573b72b71,
0x83281362aa1578e5,
0xd8abdfaa028568d4,
0x0aa395ef8e457ef5,
0x068161a7f22dd334,
0xf120ce6462aeacb8,
0x7e2641cb283c60eb,
0xf98c95cbd2333d25,
0xa6502b97eda39cc1,
0xef0351a06449ab55,
0xf30abb1479b711fc,
0x3b47c0786bef7247,
0xbc3be9171e217934,
0xc045872193fcc6ef,
0x7cedd3b80dfc94f1,
0xb74b7a9020336cb3,
0x77a26a6d7c9aa391,
0x9dffe57c3dba9c59,
0x2f563a20f37995c8,
0x44f0a5063a48798f,
0xaab08fe9f4f93cce,
0x6fa174ca1bdae23d,
0x587d2e5f52a47007,
0xbf74b2270a07b16b,
0xe5a45f5ce85cf07b,
0x76c81d6669d450c5,
0x5fc21c63ab6c74fa,
0xdbcd15223eda7834,
0x9585b4f2e440fa4a,
0x2673119cf71c0acd,
0xb25d6792e564f374,
0x3c43a3898570e765,
0x2a64a5ba7b653530,
0x04b2cd71b37434c2,
0x805e98cc3b7989e5,
0x8c45bf78609d9c33,
0xb9c2d826399c76b7,
0x3f7a7db367997c66,
0xb2321d695730d33a,
0x62663fe653255f36,
0x067c83e963daca6a,
0xeafad56659a089ef,
0x2cb693c8f3bb77da,
0x16788ac3dd68870e,
0xe04021e18c4c1e92,
0xc9b3fe4f7823c7a8,
0x1fcd390249c48792,
0x5f2d3aa7ad680b0c,
0xdcb2a35eba7d9fe9,
0x1c5d0b6970de140f,
0x30c2c52d5fe6a733,
0x27caf1eca2b911c7,
0xb7fbe41a2a886f66,
0x5c31674d24740ca7,
0xa3ede800a256e64e,
0xe94ea18f4cb60cc2,
0xd7de2fd4da955a60,
0xde060c9837db05cc,
0x191272ed13f407fc,
0xc6b1d38563291acd,
0xa0a006bf220cb914,
0x561d7110e64a7535,
0xcb7994d8104b49a1,
0x7fcb5058e89e9f6f,
0x190e460f739c3e07,
0x50b189c26f4a06c7,
0xe0dd2b4d58d22f34,
0x72ce9a57c9907254,
0x63baedd9b88a3b6c,
0x68057435ee854134,
0x90d827d2164b10d2,
0xca1588535195b673,
0x9ff868a8e1de05cb,
0x6cefb654441354f2,
0xae824a723c88839c,
0x176af1737f0a6453,
0x5f7e5aa9f200d16c,
0x000df2377b285f15,
0x5899469c7aec5e78,
];
for (i, &expected) in EXPECTED_VALUES.iter().enumerate() {
let i = i as u8;
let expected_b = (expected >> 32) as u32;
let expected_c = (expected & 0xffffffff) as u32;
let mut b = 0;
let mut c = 0;
let s: Vec<u8> = (0..i).collect();
hashlittle2(s.as_slice(), &mut c, &mut b);
assert_eq!(
expected_b, b,
"at index {i}, {expected_b:#010x} != {b:#010x}"
);
assert_eq!(
expected_c, c,
"at index {i}, {expected_c:#010x} != {c:#010x}"
);
}
}