예제 #1
0
        public void GetLocation__ReturnsCorrectLocation()
        {
            var reader        = new StringCodeReader("stri\nng\r\nanother\r\nstring");
            var expectedLines = new[]
            {
                /*s :*/ "B 00 L 1 C 1",
                /*t :*/ "B 01 L 1 C 2",
                /*r :*/ "B 02 L 1 C 3",
                /*i :*/ "B 03 L 1 C 4",
                /*\n:*/ "B 04 L 1 C 5",
                /*n :*/ "B 05 L 2 C 1",
                /*g :*/ "B 06 L 2 C 2",
                /*\r:*/ "B 07 L 2 C 3",
                /*\n:*/ "B 08 L 2 C 4",
                /*a :*/ "B 09 L 3 C 1",
                /*n :*/ "B 10 L 3 C 2",
                /*o :*/ "B 11 L 3 C 3",
                /*t :*/ "B 12 L 3 C 4",
                /*h :*/ "B 13 L 3 C 5",
                /*e :*/ "B 14 L 3 C 6",
                /*r :*/ "B 15 L 3 C 7",
                /*\r:*/ "B 16 L 3 C 8",
                /*\n:*/ "B 17 L 3 C 9",
                /*s :*/ "B 18 L 4 C 1",
                /*t :*/ "B 19 L 4 C 2",
                /*r :*/ "B 20 L 4 C 3",
                /*i :*/ "B 21 L 4 C 4",
                /*n :*/ "B 22 L 4 C 5",
                /*g :*/ "B 23 L 4 C 6",
            };
            var i = 0;

            while (reader.Position != reader.Length)
            {
                SourceLocation l = reader.GetLocation();
                reader.Advance(1);
                Assert.AreEqual(expectedLines[i++], $"B {l.Byte:00} L {l.Line} C {l.Column}");
            }
            Assert.ThrowsException <ArgumentOutOfRangeException>(() => reader.Advance(1));
            Assert.ThrowsException <ArgumentOutOfRangeException>(() => reader.Advance(-1));
        }
예제 #2
0
        public void ExecuteExecutesProperly()
        {
            var reader = new StringCodeReader("pass");
            var tr1    = new Transducer <Char, Int32>();

            tr1.InitialState.OnInput(new[] { 'p', 'a', 's', 's' }, 1);
            Assert.IsTrue(tr1.TryExecute(reader, out var num));
            Assert.AreEqual(1, num);
            reader.Reset();
            reader.Advance(1);
            Assert.IsFalse(tr1.TryExecute(reader, out _));
        }
예제 #3
0
        public void FindOffset_Char__ReturnsCorrectValue()
        {
            var reader = new StringCodeReader("aaa bbb");

            Assert.AreEqual(0, reader.FindOffset('a'));
            Assert.AreEqual(0, reader.Position);
            Assert.AreEqual(4, reader.FindOffset('b'));
            Assert.AreEqual(0, reader.Position);

            reader.Advance(2);
            Assert.AreEqual(0, reader.FindOffset('a'));
            Assert.AreEqual(2, reader.Position);
            Assert.AreEqual(2, reader.FindOffset('b'));
            Assert.AreEqual(2, reader.Position);
            Assert.AreEqual(-1, reader.FindOffset('c'));
            Assert.AreEqual(2, reader.Position);
        }
예제 #4
0
        public void FindOffset_String__ReturnsCorrectValue()
        {
            var reader = new StringCodeReader("aaa bbb");

            Assert.AreEqual(0, reader.FindOffset("aaa"));
            Assert.AreEqual(0, reader.Position);
            Assert.AreEqual(4, reader.FindOffset("bbb"));
            Assert.AreEqual(0, reader.Position);

            reader.Advance(1);
            Assert.AreEqual(0, reader.FindOffset("aa"));
            Assert.AreEqual(1, reader.Position);
            Assert.AreEqual(-1, reader.FindOffset("aaa"));
            Assert.AreEqual(1, reader.Position);
            Assert.AreEqual(3, reader.FindOffset("bbb"));
            Assert.AreEqual(1, reader.Position);
            Assert.AreEqual(-1, reader.FindOffset("ccc"));
            Assert.AreEqual(1, reader.Position);

#nullable disable
예제 #5
0
        public void FindOffset_Char_Int32__ReturnsCorrectValue()
        {
            var reader = new StringCodeReader("aaa bbb");

            Assert.AreEqual(1, reader.FindOffset('a', 1));
            Assert.AreEqual(0, reader.Position);
            Assert.AreEqual(5, reader.FindOffset('b', 5));
            Assert.AreEqual(0, reader.Position);
            Assert.AreEqual(-1, reader.FindOffset('b', 8));
            Assert.AreEqual(0, reader.Position);

            reader.Advance(2);
            Assert.AreEqual(-1, reader.FindOffset('a', 1));
            Assert.AreEqual(2, reader.Position);
            Assert.AreEqual(3, reader.FindOffset('b', 3));
            Assert.AreEqual(2, reader.Position);
            Assert.AreEqual(-1, reader.FindOffset('c'));
            Assert.AreEqual(2, reader.Position);
            Assert.AreEqual(-1, reader.FindOffset('b', 6));
            Assert.AreEqual(2, reader.Position);

            Assert.ThrowsException <ArgumentOutOfRangeException>(() => reader.FindOffset('a', -1),
                                                                 "The offset must be positivel.");
        }