public void EmptyTokenBucketCapacity()
        {
            var mockedTokenBucket = new MockedTokenBucket();

            mockedTokenBucket.EmptyCapacity();
            TokenBucket = mockedTokenBucket;
        }
        public void VerifyUpdateClientSendingRate()
        {
            var measuredTxRate = new double[]
            {
                0.000000, 0.000000, 4.800000, 4.800000, 4.160000,
                4.160000, 4.160000, 5.632000, 5.632000, 4.326400,
                4.326400, 4.326400, 5.665280, 5.665280, 4.333056,
                4.333056, 4.333056
            };

            var newTokenBucketRate = new double[]
            {
                0.500000, 0.500000, 0.500000, 0.500000, 0.500000,
                0.691200, 1.097600, 1.638400, 2.332800, 3.028480,
                3.486639, 3.821874, 4.053386, 4.200373, 4.282037,
                2.997426, 3.452226
            };

            var tokenBucket = new MockedTokenBucket(minRate: 0.5, minCapacity: 1.0, beta: 0.7, scaleConstant: 0.4, smooth: 0.8);

            for (var request = 1; request <= 17; request++)
            {
                tokenBucket.CurrentTimestamp = request * 0.2;
                tokenBucket.UpdateClientSendingRate(request == 10 || request == 16);
                Assert.AreEqual(measuredTxRate[request - 1], tokenBucket.LastMeasuredTxRate, .000001);
                Assert.AreEqual(newTokenBucketRate[request - 1], tokenBucket.LastNewTokenBucketRate, .000001);
            }
        }
        public void VerifyCUBICCalculations()
        {
            var expectedRates = new double[] { 7.0, 9.64893600966, 10.000030849917364,
                                               10.453284520772092, 13.408697022224185, 21.266268354273642, 36.425998516920465 };

            var baseTimestamp = 5;
            var tokenBucket   = new MockedTokenBucket(minRate: 0.5, minCapacity: 1.0, beta: 0.7, scaleConstant: 0.4, smooth: 0.8);

            tokenBucket.SetupTest(lastMaxRate: 10, lastThrottleTime: 5);
            for (var timestamp = baseTimestamp; timestamp <= 11; timestamp++)
            {
                tokenBucket.CurrentTimestamp = timestamp;
                tokenBucket.DoTestCalculation(false);
                Assert.AreEqual(expectedRates[timestamp - baseTimestamp], tokenBucket.LastCalculatedRate, .00000000001);
            }
        }
        public void VerifyCUBICCalculationsWithThrottling()
        {
            var expectedRates = new double[] { 7.0, 9.64893600966, 6.754255206761999,
                                               4.727978644733399, 6.606547753887045, 6.763279816944947, 7.598174833907107,
                                               11.511232804773524 };

            var tokenBucket = new MockedTokenBucket(minRate: 0.5, minCapacity: 1.0, beta: 0.7, scaleConstant: 0.4, smooth: 0.8);

            tokenBucket.SetupTest(lastMaxRate: 10, lastThrottleTime: 5);

            var baseTimestamp = 5;

            for (var timestamp = baseTimestamp; timestamp <= 12; timestamp++)
            {
                tokenBucket.CurrentTimestamp = timestamp;
                tokenBucket.DoTestCalculation(timestamp == 7 || timestamp == 8);
                Assert.AreEqual(expectedRates[timestamp - baseTimestamp], tokenBucket.LastCalculatedRate, .00000000001);
            }
        }