public unsafe void TestPieces() { var bufArr = new byte[BufferSize]; for (int i = 0; i < BufferSize; ++i) { bufArr[i] = unchecked((byte)i); } for (int i = 0; i < BufferSize; ++i) { ulong a, b, c, d, seed1 = 1, seed2 = 2; var state = new SpookyHash(); // all as one call a = seed1; b = seed2; fixed(byte* buf = bufArr) SpookyHash.Hash128(buf, i, ref a, ref b); // all as one piece c = 0xdeadbeefdeadbeef; d = 0xbaceba11baceba11; state.Init(seed1, seed2); fixed(byte* buf = bufArr) state.Update(buf, i); state.Final(out c, out d); Assert.Equal(a, c); Assert.Equal(b, d); for (int j = 0; j < i; ++j) { c = seed1; d = seed2; state.Init(c, d); fixed(byte* buf = bufArr) { state.Update(buf, j); state.Update(buf + j, i - j); } state.Final(out c, out d); Assert.Equal(a, c); Assert.Equal(b, d); } } }
public void ConstructorsEquivalent() { ulong ui1 = 0xdeadcafe; ulong ui2 = 0xbaceba11; var fromU = new SpookyHash(ui1, ui2); var fromZU = new SpookyHash(); fromZU.Init(ui1, ui2); long l1 = unchecked((long)ui1); long l2 = unchecked((long)ui2); var fromL = new SpookyHash(l1, l2); var fromZL = new SpookyHash(); fromZL.Init(l1, l2); fromU.Update(MediumLengthString); fromZU.Update(MediumLengthString); fromL.Update(MediumLengthString); fromZL.Update(MediumLengthString); var hash = fromU.Final(); Assert.Equal(hash, fromZU.Final()); Assert.Equal(hash, fromL.Final()); Assert.Equal(hash, fromZL.Final()); Assert.Equal(hash.ToString(), fromZL.Final().ToString()); }