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)); }
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 _)); }
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); }
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
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."); }