public void TestHashCollision() { HashCollider id1 = new HashCollider(Guid.NewGuid().GetHashCode(), 0); HashCollider id2 = NextHashCollision(Guid.NewGuid().GetHashCode(), ref id1); Assert.AreNotEqual(id1, id2); Assert.AreEqual(id1.GetHashCode(), id2.GetHashCode()); }
internal static HashCollider NextHashCollision(int value, ref HashCollider collideWith) { int collisionValue = Interlocked.Increment(ref hashCollision); collideWith.CollisionValue = collisionValue; var result = new HashCollider(value, collisionValue); Assert.AreEqual(collideWith.GetHashCode(), result.GetHashCode()); return(result); }
internal static HashCollider[] CreateSample(int seed, int size, double collisions) { var sample = new HashCollider[size]; int count = 0, collis = 0, uix = 0; for (int i = 0; i < size; i++) { if (collis >= count * collisions) { sample[uix = i] = new HashCollider(value: i, collisionValue: 0); count++; } else { sample[i] = NextHashCollision(value: i, collideWith: ref sample[uix]); collis++; } } return(sample); }