Beispiel #1
0
        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());
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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);
        }