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)); }
public DiscardingSequences(ITransportDeliveryCharacteristics tdc, uint windowSize, uint capacity) : base(tdc) { sw = new SlidingWindowManager(windowSize, capacity); sw.FrameExpired += _ExpireFrame; }
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 */ } }