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);
            }
        }