Esempio n. 1
0
        public void InsertSegmentInReceiveBuffer()
        {
            void Output(byte[] data, int len)
            {
            }

            // setup KCP
            Kcp kcp = new Kcp(0, Output);

            // insert '1' should insert into empty buffer
            Segment one = new Segment {
                sn = 1
            };

            kcp.InsertSegmentInReceiveBuffer(one);
            Assert.That(kcp.rcv_buf.Count, Is.EqualTo(1));
            Assert.That(kcp.rcv_buf[0], Is.EqualTo(one));

            // insert '3' should insert after '1'
            Segment three = new Segment {
                sn = 3
            };

            kcp.InsertSegmentInReceiveBuffer(three);
            Assert.That(kcp.rcv_buf.Count, Is.EqualTo(2));
            Assert.That(kcp.rcv_buf[0], Is.EqualTo(one));
            Assert.That(kcp.rcv_buf[1], Is.EqualTo(three));

            // insert '2' should insert before '3'
            Segment two = new Segment {
                sn = 2
            };

            kcp.InsertSegmentInReceiveBuffer(two);
            Assert.That(kcp.rcv_buf.Count, Is.EqualTo(3));
            Assert.That(kcp.rcv_buf[0], Is.EqualTo(one));
            Assert.That(kcp.rcv_buf[1], Is.EqualTo(two));
            Assert.That(kcp.rcv_buf[2], Is.EqualTo(three));

            // insert '0' should insert before '1'
            Segment zero = new Segment {
                sn = 0
            };

            kcp.InsertSegmentInReceiveBuffer(zero);
            Assert.That(kcp.rcv_buf.Count, Is.EqualTo(4));
            Assert.That(kcp.rcv_buf[0], Is.EqualTo(zero));
            Assert.That(kcp.rcv_buf[1], Is.EqualTo(one));
            Assert.That(kcp.rcv_buf[2], Is.EqualTo(two));
            Assert.That(kcp.rcv_buf[3], Is.EqualTo(three));

            // insert '2' again should do nothing because duplicate
            Segment two_again = new Segment {
                sn = 2
            };

            kcp.InsertSegmentInReceiveBuffer(two_again);
            Assert.That(kcp.rcv_buf.Count, Is.EqualTo(4));
            Assert.That(kcp.rcv_buf[0], Is.EqualTo(zero));
            Assert.That(kcp.rcv_buf[1], Is.EqualTo(one));
            Assert.That(kcp.rcv_buf[2], Is.EqualTo(two));
            Assert.That(kcp.rcv_buf[3], Is.EqualTo(three));
        }