public void GetMatchesFindsOneMatchesForEmpty()
        {
            RepeatExpression<char> expression = new RepeatExpression<char> (m_any);

             var matches = expression.GetMatches (EmptyList, 0).ToList ();

             Assert.AreEqual (1, matches.Count (), "Count");
             Assert.AreEqual (0, matches[0].Index, "Count");
             Assert.AreEqual (0, matches[0].Length, "Count");
        }
        public void GetMatchesOf_A_3_ForAAABBBReturnsAAA()
        {
            int index = 0;
             int length = 3;
             RepeatExpression<char> expression = new RepeatExpression<char> (m_A, length);

             var list = AAABBB;
             var matches = expression.GetMatches (list, index).ToList ();

             Assert.AreEqual (1, matches.Count (), "Count");
             foreach (var match in matches)
             {
            Assert.AreEqual (index, match.Index, "match.Index");
            Assert.AreEqual (length, match.Length, "match.Length");
            Assert.IsTrue (match.Success, "match.Success");
            Assert.AreEqual (length, match.Items.Count, "match.Items.Count");
            for (int i = 0; i < length; i++)
            {
               Assert.AreEqual (list[index + i], match.Items [i], "match.Items [" + i + "]");
            }
             }
        }
        public void GetMatchesOf_Any_2_ForDigetsStartingAt5Returns56()
        {
            int index = 5;
             RepeatExpression<char> expression = new RepeatExpression<char> (m_any, 2);
             int length = 2;

             var list = DigetsList;
             var matches = expression.GetMatches (list, index).ToList ();

             Assert.AreEqual (1, matches.Count (), "Count");
             foreach (var match in matches)
             {
            Assert.AreEqual (index, match.Index, "match.Index");
            Assert.AreEqual (length, match.Length, "match.Length");
            Assert.IsTrue (match.Success, "match.Success");
            Assert.AreEqual (length, match.Items.Count, "match.Items.Count");
            for (int i = 0; i < length; i++)
            {
               Assert.AreEqual (list[index + i], match.Items [i], "match.Items [" + i + "]");
            }
             }
        }
        public void GetMatchesOf_AAorAB_0_4_ForAAABBB()
        {
            int index = 0;
             RepeatExpression<char> expression =
            new RepeatExpression<char> (
               new AlternationExpression<char> (
                  new ListExpression<char>(m_A, m_A),
                  new ListExpression<char>(m_A, m_B, m_B, m_B)),
               0, 4);

             var list = AAABBB;
             var matches = expression.GetMatches (list, index).ToList ();

             string [] expectedValues = new [] {"", "AA", "AAABBB"};
             Assert.AreEqual (expectedValues.Length, matches.Count (), "Count");
             for (int i = 0; i < expectedValues.Length; i++)
             {
            var match = matches [i];
            string expected = expectedValues [i];
            Assert.AreEqual (index, match.Index, "match.Index at " + i);
            Assert.AreEqual (expected.Length, match.Length, "match.Length at " + i);
            Assert.IsTrue (match.Success, "match.Success at " + i);
            Assert.AreEqual (expected.Length, match.Items.Count, "match.Items.Count at " + i);

            Assert.AreEqual (expected, new string (match.Items.ToArray ()), "Value at " + i);
             }
        }
        public void GetMatchesOfDigits_Any_4_8()
        {
            var expression = new RepeatExpression<char> (m_any, 4, 8);

             string [] expectedValues = new [] {"0123", "01234", "012345", "0123456", "01234567"};

             int index = 0;
             var list = DigetsList;

             var matches = expression.GetMatches (list, index).ToList ();

             Assert.AreEqual (expectedValues.Length, matches.Count (), "Count");
             for (int i = 0; i < expectedValues.Length; i++)
             {
            var match = matches [i];
            var expected = expectedValues [i];
            Assert.AreEqual (index, match.Index, "match.Index at " + i);
            Assert.AreEqual (expected.Length, match.Length, "match.Length at " + i);
            Assert.IsTrue (match.Success, "match.Success at " + i);
            Assert.AreEqual (expected.Length, match.Items.Count, "match.Items.Count at " + i);
            Assert.AreEqual (expected, new string (match.Items.ToArray ()), "Value at " + i);
             }
        }
        public void GetMatchesFindsOneMatchForA()
        {
            RepeatExpression<char> expression = new RepeatExpression<char> (m_A);

             int index = 0;
             var list = AList;
             var matches = expression.GetMatches (list, index).ToList ();

             Assert.AreEqual (2, matches.Count (), "Count");
             Assert.AreEqual (0, matches.First ().Length, "First match should be empty");
             var match = matches.ElementAt(1);
             Assert.AreEqual (index, match.Index, "match.Index");
             Assert.AreEqual (1, match.Length, "match.Length");
             Assert.IsTrue (match.Success, "match.Success");
             Assert.AreEqual (1, match.Items.Count, "match.Items.Count");
             Assert.AreEqual (list[index], match.Items [0], "match.Items [0]");
        }