public void Add250000_AcksDelayed_NoneUnconfirmed()
        {
            // Tests that only really gaps in the confirmation mask
            // are returned as unconfirmed pakets. This test does not
            // produce gaps so there are no unconfirmed pakets

            var sut = new AcknowledgeSendBuffer <Holder>();
            var unconfirmedPakets = new List <Holder>();

            for (int i = 0; i < 5; i++)
            {
                var holder = new Holder(i);
                sut.Add(holder, out _);
            }

            //  0000 0000 00ss ssss
            //  0000 0000 0000 000c // base seqid 2 equals ->
            //  0000 0000 0000 0c00 // --> all below 2 are "auto" confirmed
            //  0000 0000 00ss s000

            for (int i = 5; i < 250000; i++)
            {
                var holder = new Holder(i);
                sut.Add(holder, out _);
                sut.Ack(1, (ushort)(i - 3));
                unconfirmedPakets.Clear();
                sut.GetAllUnconfirmed(unconfirmedPakets);
                Assert.Empty(unconfirmedPakets);
            }
        }
        public void Add_LowerAckBase()
        {
            var sut  = new AcknowledgeSendBuffer <Holder>();
            var sent = new List <Holder>();
            var unconfirmedPakets = new List <Holder>();

            for (int i = 0; i < 12; i++)
            {
                var holder = new Holder(i);
                sut.Add(holder, out _);
                sent.Add(holder);
            }
            // 0000 0110 0000 0000
            sut.Ack((1 + 2) << 9, 0);
            // 0000 1111 0000 0000
            sut.Ack((1 + 2 + 4 + 8) << 4, 4);
            // 0000 0000 1000 0000
            sut.Ack((1) << 7, 0);
            sut.GetAllUnconfirmed(unconfirmedPakets);
            Assert.Equal(3, unconfirmedPakets.Count);
            for (int i = 4; i < 7; i++)
            {
                Assert.Equal(sent[i], unconfirmedPakets[6 - i]);
            }
        }
        public void Add_NotUnconfirmedBecauseLeading()
        {
            var sut    = new AcknowledgeSendBuffer <Holder>();
            var holder = new Holder(123);

            sut.Add(holder, out _);
            var list = new List <Holder>();

            sut.GetAllUnconfirmed(list);
            Assert.Empty(list);
        }
        public void Add200000_Ack()
        {
            var sut  = new AcknowledgeSendBuffer <Holder>();
            var list = new List <Holder>();

            for (int i = 0; i < 200000; i++)
            {
                sut.Add(new Holder(i), out _);
                sut.Ack(1, (ushort)i);
                sut.GetAllUnconfirmed(list);
                Assert.Empty(list);
            }
        }
        public void AddTwo_AckFirst_NoneUnconfirmed()
        {
            var sut    = new AcknowledgeSendBuffer <Holder>();
            var holder = new Holder(123);

            sut.Add(holder, out _);
            var holder2 = new Holder(323);

            sut.Add(holder2, out _);
            sut.Ack(1, 0);
            var list = new List <Holder>();

            sut.GetAllUnconfirmed(list);
            Assert.Empty(list);
        }
        public void AddTwo_AckSecond_FirstUnconfirmed()
        {
            var sut    = new AcknowledgeSendBuffer <Holder>();
            var holder = new Holder(123);

            sut.Add(holder, out _);
            var holder2 = new Holder(323);

            sut.Add(holder2, out _);
            sut.Ack(2, 0);
            var list = new List <Holder>();

            sut.GetAllUnconfirmed(list);
            Assert.Single(list);
            Assert.Equal(holder, list[0]);
        }