示例#1
0
        public void WritesInChunks()
        {
            int bufferSize = 500;
            int size       = 3000;

            var buffers = new List <ArraySegment <byte> >();
            var writer  = new BinaryTextWriter((buffer, state) =>
            {
                buffers.Add(buffer);
            },
                                               null, reuseBuffers: true, bufferSize: bufferSize);

            writer.Write(new string('C', size));
            writer.Flush();

            var expected = GetChunks(size, bufferSize).ToArray();

            Assert.NotEmpty(buffers);
            Assert.Equal(expected.Length, buffers.Count);

            for (int i = 0; i < buffers.Count; i++)
            {
                Assert.Equal(expected[i], buffers[i].Count);
            }
        }
示例#2
0
        public void CanInterleaveStringsAndRawBinary()
        {
            var buffers = new List <ArraySegment <byte> >();
            var writer  = new BinaryTextWriter((buffer, state) =>
            {
                buffers.Add(buffer);
            },
                                               null, reuseBuffers: true, bufferSize: 128);

            var encoding = new UTF8Encoding();

            writer.Write('H');
            writer.Write('e');
            writer.Write("llo ");
            writer.Write(new ArraySegment <byte>(encoding.GetBytes("World")));
            writer.Flush();

            Assert.Equal(2, buffers.Count);
            var s = "";

            foreach (var buffer in buffers)
            {
                s += encoding.GetString(buffer.Array, buffer.Offset, buffer.Count);
            }
            Assert.Equal("Hello World", s);
        }
        public void WriteDefault()
        {               //****************************************
            byte[] MyResult;
            byte[] TempOutput;
            //****************************************

            using (var RawStream = new MemoryStream())
            {
                using (var Writer = new StreamWriter(RawStream))
                {
                    Writer.Write(_TestInput);
                }

                TempOutput = RawStream.ToArray();
            }

            //****************************************

            using (var Buffer = new BufferWriter <byte>())
                using (var Writer = new BinaryTextWriter(Buffer))
                {
                    Writer.Write(_TestInput);

                    Writer.Flush();

                    MyResult = Buffer.ToSequence().ToArray();
                }

            //****************************************

            CollectionAssert.AreEqual(TempOutput, MyResult);
        }
        public void WriteUnicode([Values(false, true)] bool bigEndian)
        {               //****************************************
            byte[] MyResult;
            byte[] TempOutput;
            var    MyEncoding = new UnicodeEncoding(bigEndian, true);

            //****************************************

            using (var RawStream = new MemoryStream())
            {
                using (var Writer = new StreamWriter(RawStream, MyEncoding))
                {
                    Writer.Write(_TestInput);
                }

                TempOutput = RawStream.ToArray();
            }

            //****************************************

            using (var Buffer = new BufferWriter <byte>())
                using (var Writer = new BinaryTextWriter(Buffer, MyEncoding))
                {
                    Writer.Write(_TestInput);

                    Writer.Flush();

                    MyResult = Buffer.ToSequence().ToArray();
                }

            //****************************************

            CollectionAssert.AreEqual(TempOutput, MyResult);
        }
示例#5
0
        public void StringTest()
        {
            var btw = new BinaryTextWriter();

            btw.AddString("TEST");
            btw.AddString("1.2.3");
            var btr = new BinaryTextReader(btw.GetOutputString());

            Assert.AreEqual("TEST", btr.ReadString(4));
            Assert.AreEqual("1.2.3", btr.ReadString(5));
        }
示例#6
0
        public void NumberTest()
        {
            var btw = new BinaryTextWriter();

            btw.AddNumber(7, 4);
            btw.AddNumber(1, 10);
            var btr = new BinaryTextReader(btw.GetOutputString());

            Assert.AreEqual(7, btr.ReadNumber(4));
            Assert.AreEqual(1, btr.ReadNumber(10));
        }
示例#7
0
        public void BoolTest()
        {
            var btw = new BinaryTextWriter();

            btw.AddBool(true);
            btw.AddBool(false);
            var btr = new BinaryTextReader(btw.GetOutputString());

            Assert.IsTrue(btr.ReadBool());
            Assert.IsFalse(btr.ReadBool());
        }
示例#8
0
        public byte[] ConvertToStringBytes()
        {
            BinaryTextWriter btw = new BinaryTextWriter();

            // version
            btw.AddNumber(version, 10);

            // items
            btw.AddBool(randomAbilities);
            btw.AddBool(randomTanks);

            // excluded items
            for (int i = 0; i < 100; i++)
            {
                bool excluded = excludedItems.Contains(i);
                btw.AddBool(excluded);
            }
            btw.AddNumber((int)gameCompletion, 2);
            btw.AddBool(iceNotRequired);
            btw.AddBool(plasmaNotRequired);
            btw.AddBool(noPBsBeforeChozodia);
            btw.AddBool(chozoStatueHints);
            btw.AddBool(infiniteBombJump);
            btw.AddBool(wallJumping);

            // palettes
            btw.AddBool(tilesetPalettes);
            btw.AddBool(enemyPalettes);
            btw.AddBool(beamPalettes);
            btw.AddNumber(hueMinimum, 8);
            btw.AddNumber(hueMaximum, 8);

            // misc
            btw.AddBool(enableItemToggle);
            btw.AddBool(obtainUnkItems);
            btw.AddBool(hardModeAvailable);
            btw.AddBool(pauseScreenInfo);
            btw.AddBool(removeCutscenes);
            btw.AddBool(removeNorfairVine);
            btw.AddBool(removeVariaAnimation);
            btw.AddBool(skipSuitless);

            return(btw.GetOutputString());
        }
示例#9
0
        public void CanEncodingSurrogatePairsCorrectly()
        {
            var bytes  = new List <byte>();
            var writer = new BinaryTextWriter((buffer, state) =>
            {
                for (int i = buffer.Offset; i < buffer.Count; i++)
                {
                    bytes.Add(buffer.Array[i]);
                }
            }, null, reuseBuffers: true, bufferSize: 128);

            writer.Write("\U00024B62"[0]);
            writer.Write("\U00024B62"[1]);
            writer.Flush();

            var expected = new byte[] { 0xF0, 0xA4, 0xAD, 0xA2 };

            Assert.Equal(expected, bytes);
        }
        public void Write([Values(8, 16, 32, 64, 128)] int capacity)
        {               //****************************************
            byte[] MyResult;
            //****************************************

            using (var Buffer = new BufferWriter <byte>())
                using (var Writer = new BinaryTextWriter(Buffer, Encoding.UTF8, capacity))
                {
                    Writer.Write(_TestInput);

                    Writer.Flush();

                    MyResult = Buffer.ToSequence().ToArray();
                }

            //****************************************

            CollectionAssert.AreEqual(_TestOutput, MyResult);
        }
        public void WriteUTF8()
        {               //****************************************
            byte[] MyResult;
            //****************************************

            using (var Buffer = new BufferWriter <byte>())
                using (var Writer = new BinaryTextWriter(Buffer, Encoding.UTF8))
                {
                    Writer.Write(_TestInput);

                    Writer.Flush();

                    MyResult = Buffer.ToSequence().ToArray();
                }

            //****************************************

            CollectionAssert.AreEqual(_TestOutput, MyResult);
        }
示例#12
0
        public void WriteSameBufferIsUsedForWritingChunksIfReuseBuffersTrue()
        {
            var buffers = new List <ArraySegment <byte> >();
            var writer  = new BinaryTextWriter((buffer, state) =>
            {
                buffers.Add(buffer);
            },
                                               null, reuseBuffers: true, bufferSize: 128);

            writer.Write(new string('C', 10000));
            writer.Flush();

            Assert.True(buffers.Count > 1);
            var underlyingBuffer = buffers[0].Array;

            for (int i = 1; i < buffers.Count; i++)
            {
                Assert.Same(underlyingBuffer, buffers[i].Array);
            }
        }
示例#13
0
        public string GetString()
        {
            BinaryTextWriter btw = new BinaryTextWriter();

            // version
            string[] nums = Program.Version.Split('.');
            btw.AddNumber(int.Parse(nums[0]), 4);
            btw.AddNumber(int.Parse(nums[1]), 4);
            btw.AddNumber(int.Parse(nums[2]), 4);

            // items
            btw.AddNumber((int)AbilitySwap, 2);
            btw.AddNumber((int)TankSwap, 2);
            if (NumItemsRemoved == 0)
            {
                btw.AddBool(false);
            }
            else
            {
                btw.AddBool(true);
                btw.AddNumber(NumItemsRemoved, 7);
                if (RemoveSpecificItems)
                {
                    btw.AddBool(true);
                    btw.AddNumber(NumAbilitiesRemoved.Value, 4);
                }
            }
            if (SwapOrRemoveItems)
            {
                btw.AddNumber((int)Completion, 2);
                btw.AddBool(IceNotRequired);
                btw.AddBool(PlasmaNotRequired);
                btw.AddBool(NoPBsBeforeChozodia);
                btw.AddBool(ChozoStatueHints);
                btw.AddBool(InfiniteBombJump);
                btw.AddBool(WallJumping);
            }

            // locations
            if (CustomAssignments.Count == 0)
            {
                btw.AddBool(false);
            }
            else
            {
                btw.AddBool(true);
                btw.AddNumber(CustomAssignments.Count, 7);
                for (int i = 0; i < 100; i++)
                {
                    if (CustomAssignments.TryGetValue(i, out ItemType item))
                    {
                        btw.AddNumber(i, 7);
                        btw.AddNumber((int)item, 5);
                    }
                }
            }

            // enemies
            btw.AddBool(RandoEnemies);

            // palettes
            btw.AddBool(TilesetPalettes);
            btw.AddBool(EnemyPalettes);
            btw.AddBool(SamusPalettes);
            btw.AddBool(BeamPalettes);
            if (RandomPalettes)
            {
                if (HueMinimum == 0)
                {
                    btw.AddBool(false);
                }
                else
                {
                    btw.AddBool(true);
                    btw.AddNumber(HueMinimum, 8);
                }
                if (HueMaximum == 180)
                {
                    btw.AddBool(false);
                }
                else
                {
                    btw.AddBool(true);
                    btw.AddNumber(HueMaximum, 8);
                }
            }

            // misc
            btw.AddBool(EnableItemToggle);
            btw.AddBool(ObtainUnkItems);
            btw.AddBool(HardModeAvailable);
            btw.AddBool(PauseScreenInfo);
            btw.AddBool(RemoveCutscenes);
            btw.AddBool(SkipSuitless);
            btw.AddBool(SkipDoorTransitions);

            return(btw.GetOutputString());
        }