Esempio n. 1
0
        private static void GetBucket_WithRandomInput_IsApproximatelyEvenlyDistributed(int bucketCount)
        {
            // ARRANGE
            const int             iterations = 10000;
            Dictionary <int, int> counts     = Enumerable.Range(0, bucketCount).ToDictionary(i => i, i => 0);
            var cha        = new ConsistentHashingAlgorithm(bucketCount, 1024);
            var random     = new Random(0);
            var longBuffer = new byte[8];

            double expectedCount     = iterations / (double)bucketCount;
            double maximumDifference = 0.15 * expectedCount;

            // ACT
            for (int i = 0; i < iterations; i++)
            {
                random.NextBytes(longBuffer);
                long key    = BitConverter.ToInt64(longBuffer, 0);
                int  bucket = cha.GetBucket(key);
                counts[bucket]++;
            }

            // ASSERT
            Console.WriteLine("Bucket count: {0}. Expected count: {1}. Maximum difference: {2}.", bucketCount, expectedCount, maximumDifference);
            for (int i = 0; i < bucketCount; i++)
            {
                Console.WriteLine("Bucket: {0}. Actual count: {1}. Difference: {2}.", i, counts[i], Math.Abs(expectedCount - counts[i]));
                ((double)counts[i]).Should().BeApproximately(expectedCount, maximumDifference);
            }
        }
Esempio n. 2
0
        public void ReplicaCount_Always_ReturnsConstructorValue()
        {
            // ARRANGE
            const int replicaCount = 1024;
            var       cha          = new ConsistentHashingAlgorithm(8, replicaCount);

            // ACT
            int actual = cha.ReplicaCount;

            // ASSERT
            actual.Should().Be(replicaCount);
        }
Esempio n. 3
0
        public void BucketCount_Always_ReturnsConstructorValue()
        {
            // ARRANGE
            const int bucketCount = 8;
            var       cha         = new ConsistentHashingAlgorithm(bucketCount, 1024);

            // ACT
            int actual = cha.BucketCount;

            // ASSERT
            actual.Should().Be(bucketCount);
        }
Esempio n. 4
0
        public void GetBucket_WithSameKey_ReturnsSameBucket()
        {
            // ARRANGE
            var        cha = new ConsistentHashingAlgorithm(8, 1024);
            const long key = 42;

            // ACT
            var bucketA = cha.GetBucket(key);
            var bucketB = cha.GetBucket(key);

            // ASSERT
            bucketA.Should().Be(bucketB);
        }