public void ReadDataTypeInvalidSize()
        {
            Random random = new Random(10);

            for (int dataSize = 0; dataSize < 8; dataSize++)
            {
                // Random stream data
                byte[] streamData = new byte[dataSize];
                for (int index = 0; index < dataSize; index++)
                {
                    streamData[index] = (byte)random.Next();
                }

                WangStream stream = new WangStream(streamData);
                WangAnnotationsReader.WangDataType dataType;
                int outputDataSize;
                Assert.IsFalse(WangAnnotationsReader.ReadDataType(out dataType, out outputDataSize, stream));
                Assert.AreEqual(WangAnnotationsReader.WangDataType.Invalid, dataType);
                Assert.AreEqual(0, outputDataSize);
            }
        }
        public void ReadDataTypeInvalid()
        {
            int[] invalidDataTypes =
            {
                0, 1, 3, 4, 7, 8, 9, 10
            };

            foreach (var expectedDataType in invalidDataTypes)
            {
                // Valid stream data but invalid data type
                byte[] streamData = new byte[8];
                Array.Copy(BitConverter.GetBytes((int)expectedDataType), streamData, 4);
                Array.Copy(BitConverter.GetBytes((int)8), 0, streamData, 4, 4);

                WangStream stream = new WangStream(streamData);
                WangAnnotationsReader.WangDataType dataType;
                int dataSize;
                Assert.IsTrue(WangAnnotationsReader.ReadDataType(out dataType, out dataSize, stream));
                Assert.AreEqual(WangAnnotationsReader.WangDataType.Invalid, dataType);
                Assert.AreEqual(8, dataSize);
                Assert.AreEqual(0, stream.AvailableBytes());
            }
        }
        public void ReadDataTypeStd()
        {
            // The int values for the data types which will be tested.
            int[] intTypes =
            {
                2, 5, 6
            };
            // The data types which will be tested, aligned with the corresponding entry
            // in the intTypes array.
            WangAnnotationsReader.WangDataType[] dataTypes =
            {
                WangAnnotationsReader.WangDataType.DefaultNamedBlock, WangAnnotationsReader.WangDataType.Attributes,
                WangAnnotationsReader.WangDataType.NamedBlock
            };

            // The test runs with different data size. At least 8 bytes
            // are required for the stream to be valid.
            for (int expectedDataSize = 8; expectedDataSize < 40; expectedDataSize++)
            {
                for (int dataTypeIndex = 0; dataTypeIndex < intTypes.Length; dataTypeIndex++)
                {
                    // Valid stream data
                    byte[] streamData = new byte[expectedDataSize];
                    Array.Copy(BitConverter.GetBytes(intTypes[dataTypeIndex]), streamData, 4);
                    Array.Copy(BitConverter.GetBytes((int)expectedDataSize), 0, streamData, 4, 4);

                    WangStream stream = new WangStream(streamData);
                    WangAnnotationsReader.WangDataType dataType;
                    int dataSize;
                    Assert.IsTrue(WangAnnotationsReader.ReadDataType(out dataType, out dataSize, stream));
                    Assert.AreEqual(expectedDataSize, dataSize);
                    Assert.AreEqual(dataTypes[dataTypeIndex], dataType);
                    Assert.AreEqual(expectedDataSize - 8, stream.AvailableBytes());
                }
            }
        }