const int ExpectedPacketLengthA = Packet.headerSize; //Minimum packet data size
        Packet FakeDataPacketA()
        {
            var ackedBits = new AckBitArray(Packet.ackedBitsLength);

            //Salt is random
            return(new Packet(0, 0, ackedBits, PacketType.dataReliable, 12345));
        }
        Packet FakeDataPacketRandom(Random rand)
        {
            //Random messages
            var messages = new MessageExample[rand.Next(0, 30)];

            for (int i = 0; i < messages.Length; i++)
            {
                messages[i] = new MessageExample(rand.Next(int.MinValue, int.MaxValue), RandomExtensions.RandomString(rand.Next(1, 25), rand));
            }
            //Random Id
            ushort id    = (ushort)rand.Next(0, ushort.MaxValue);
            ushort ackId = (ushort)rand.Next(0, ushort.MaxValue);
            //Random ackedBits
            var buffer = new byte[Packet.ackedBytesLength];

            rand.NextBytes(buffer);
            var ackedBits = new AckBitArray(buffer);
            //Random ulong for salt
            var buf = new byte[8];

            rand.NextBytes(buf);
            var salt = (ulong)BitConverter.ToInt64(buf, 0);

            return(new Packet(id, ackId, ackedBits, PacketType.dataUnreliable, salt, messages, byte.MaxValue));
        }
        public void LeftShiftTest()
        {
            AckBitArray a        = new AckBitArray(2, 0xFA74);
            long        validate = 0xA740;

            bool[] overflows = a << 4;

            Assert.IsTrue(a.ToLong() == validate);
        }
        public void RightShiftTest()
        {
            AckBitArray a        = new AckBitArray(2, 0xFA74);
            long        validate = 0x0FA7;

            bool[] overflows = a >> 4;

            Assert.IsTrue(a.ToLong() == validate);
        }
        public void Set_Bit_SetsCorrectBit()
        {
            AckBitArray a        = new AckBitArray(2, 0xFF00);
            long        validate = 0x7E38;

            a[3]  = true;
            a[4]  = true;
            a[5]  = true;
            a[8]  = false;
            a[15] = false;

            Assert.IsTrue(a == validate);
        }
        Packet FakeDataPacketB()
        {
            //Engineered to take up all byte space
            List <Message> data        = new List <Message>();
            int            lengthTotal = 0;
            MessageExample m           = new MessageExample(0, "Test12"); //17 byte message for 17*59 = 1003 max size

            while (lengthTotal < PacketManager._maxPacketDataBytes)
            {
                data.Add(m);
                lengthTotal += m.Length;
            }

            var ackedBits = new AckBitArray(Packet.ackedBitsLength, 0xFFFFFFFFFFFFFFFF);

            return(new Packet(ushort.MaxValue, ushort.MaxValue, ackedBits, PacketType.dataUnreliable, ulong.MaxValue, data.ToArray(), byte.MaxValue));
        }
        public void Get_Bit_ReturnsCorrectBool()
        {
            AckBitArray a = new AckBitArray(2, 0x7E18);

            Assert.IsFalse(a[0]);
            Assert.IsFalse(a[1]);
            Assert.IsFalse(a[2]);
            Assert.IsTrue(a[3]);

            Assert.IsTrue(a[4]);
            Assert.IsFalse(a[5]);
            Assert.IsFalse(a[6]);
            Assert.IsFalse(a[7]);

            Assert.IsFalse(a[8]);
            Assert.IsTrue(a[9]);
            Assert.IsTrue(a[10]);
            Assert.IsTrue(a[11]);

            Assert.IsTrue(a[12]);
            Assert.IsTrue(a[13]);
            Assert.IsTrue(a[14]);
            Assert.IsFalse(a[15]);
        }
        Packet FakeEmptyPacket(PacketType type)
        {
            var ackedBits = new AckBitArray(Packet.ackedBitsLength, 0xFFFFFFFFFFFFFFFF);

            return(new Packet(0, 0, ackedBits, type, 1));
        }