public void CanCompressData()
        {
            // Arrange
            var testData = new byte[] { 55, 66, 55, 66, 77, 88, 0, 11, 0, 22, 0, 33, 0, 22, 0, 11, 0, 0, 0, 0, 0, 0, 0, 44, 44, 44, 44, 44, 44, 44, 55, 66, 77, 88, 99 };

            // Act
            var compressed   = Gyu0.Compress(new BinaryFile(testData));
            var decompressed = Gyu0.Decompress(compressed);

            // Assert
            var decompressedArray = decompressed.ReadArray();

            decompressedArray.Should().Equal(testData);
        }
        public (byte[] bin, byte[] ent) Build()
        {
            MemoryStream bin           = new MemoryStream();
            var          entryPointers = new List <int>();

            // Build the .bin file data
            entryPointers.Add(0);
            foreach (var entry in Entries)
            {
                // Build SIR0 and compress to GYU0
                var sir0 = entry.ToSir0();
                var data = Gyu0.Compress(sir0.Data);

                // Write data to .bin and the pointer to .ent
                // Align data to 16 bytes
                var binData = data.ReadArray();
                bin.Write(binData, 0, binData.Length);
                var paddingLength = 16 - (bin.Length % 16);
                if (paddingLength != 16)
                {
                    bin.SetLength(bin.Length + paddingLength);
                    bin.Position = bin.Length;
                }
                entryPointers.Add((int)bin.Position);
            }

            // Build the .ent file data
            var ent = new byte[entryPointers.Count * sizeof(int)];

            for (int i = 0; i < entryPointers.Count; i++)
            {
                BitConverter.GetBytes(entryPointers[i]).CopyTo(ent, i * sizeof(int));
            }

            return(bin.ToArray(), ent);
        }