Пример #1
0
        public void TestWindow()
        {
            SlidingWindowManager sw = new SlidingWindowManager(4, 9);
            uint expired = 0;
            sw.FrameExpired += delegate(uint frame) {
                Assert.IsTrue(!sw.IsActive(frame));
                expired++;
            };
            Assert.IsTrue(!sw.IsActive(0));
            Assert.AreEqual(0, sw.Count);
            Assert.AreEqual(0, expired);
            sw.Seen(0);
            Assert.AreEqual(1, sw.Count);
            Assert.AreEqual(0, expired);
            Assert.IsTrue(sw.IsActive(0));
            Assert.IsTrue(!sw.IsActive(1));
            Assert.IsTrue(!sw.IsActive(sw.Capacity - 1));
            sw.Seen(0);
            Assert.AreEqual(1, sw.Count);
            Assert.AreEqual(0, expired);
            Assert.IsTrue(sw.IsActive(0));
            Assert.IsTrue(!sw.IsActive(1));
            Assert.IsTrue(!sw.IsActive(sw.Capacity - 1));

            sw.Seen(sw.Capacity - 1); // not in the expected range; should be discarded
            Assert.AreEqual(1, sw.Count);
            Assert.AreEqual(0, expired);
            Assert.IsTrue(sw.IsActive(0));
            Assert.IsTrue(!sw.IsActive(1));
            Assert.IsTrue(!sw.IsActive(sw.Capacity - 1));

            sw.Seen(1);
            Assert.AreEqual(2, sw.Count);
            Assert.AreEqual(0, expired);
            Assert.IsTrue(sw.IsActive(0));
            Assert.IsTrue(sw.IsActive(1));
            Assert.IsTrue(!sw.IsActive(2));

            sw.Seen(3);
            Assert.AreEqual(4, sw.Count);
            Assert.IsTrue(sw.IsActive(0));
            Assert.IsTrue(sw.IsActive(3));
            Assert.IsTrue(!sw.IsActive(4));

            sw.Seen(4);
            Assert.AreEqual(4, sw.Count);
            Assert.AreEqual(1, expired);
            Assert.IsTrue(!sw.IsActive(0));
            Assert.IsTrue(sw.IsActive(1));
            Assert.IsTrue(sw.IsActive(4));
            Assert.IsTrue(!sw.IsActive(5));

            sw.Seen(5);
            Assert.AreEqual(4, sw.Count);
            Assert.AreEqual(2, expired);
            Assert.IsTrue(!sw.IsActive(1));
            Assert.IsTrue(sw.IsActive(2));
            Assert.IsTrue(sw.IsActive(5));
            Assert.IsTrue(!sw.IsActive(6));

            sw.Seen(7);
            Assert.AreEqual(4, sw.Count);
            Assert.AreEqual(4, expired);
            Assert.IsTrue(!sw.IsActive(3));
            Assert.IsTrue(sw.IsActive(4));
            Assert.IsTrue(sw.IsActive(7));
            Assert.IsTrue(!sw.IsActive(8));

            try
            {
                sw.Seen(9);
                Assert.Fail("should have thrown ArgumentOutOfRange");
            }
            catch (ArgumentOutOfRangeException) { /* expected */ }

            sw.Seen(0);
            Assert.AreEqual(4, sw.Count);
            Assert.AreEqual(6, expired);
            Assert.IsTrue(!sw.IsActive(5));
            Assert.IsTrue(sw.IsActive(6));
            Assert.IsTrue(sw.IsActive(0));
            Assert.IsTrue(!sw.IsActive(1));

            sw.Seen(1);
            Assert.AreEqual(4, sw.Count);
            Assert.AreEqual(7, expired);
            Assert.IsTrue(!sw.IsActive(6));
            Assert.IsTrue(sw.IsActive(7));
            Assert.IsTrue(sw.IsActive(1));
            Assert.IsTrue(!sw.IsActive(2));
        }
Пример #2
0
 public DiscardingSequences(ITransportDeliveryCharacteristics tdc, uint windowSize, uint capacity)
     : base(tdc)
 {
     sw = new SlidingWindowManager(windowSize, capacity);
     sw.FrameExpired += _ExpireFrame;
 }
Пример #3
0
        public void TestInvalidSize()
        {
            try
            {
                SlidingWindowManager sw = new SlidingWindowManager(4, 4);
                Assert.Fail("should have thrown an exception");
            }
            catch (ArgumentException) { /* expected */ }

            try
            {
                SlidingWindowManager sw = new SlidingWindowManager(8, 8);
                Assert.Fail("should have thrown an exception");
            }
            catch (ArgumentException) { /* expected */ }
        }