public void TestStarsInMiddleNonGreedy()
        {
            IStarPathElement star = new StarDoublePathElement("a*b*c");

            MatchedElement lpe = star.Match("abbccbccc", null);

            // a -> a
            // * -> b index 1
            // b -> b
            // * -> ccbcc index 2
            // c -> c
            lpe.GetSubKeyRef(0).Should().Be("abbccbccc");
            lpe.GetSubKeyRef(1).Should().Be("b");
            lpe.GetSubKeyRef(2).Should().Be("ccbcc");
            lpe.GetSubKeyCount().Should().Be(3);
        }
        public void TestStarInFirstAndMiddle()
        {
            IStarPathElement star = new StarDoublePathElement("*a*");

            star.StringMatch("bbbaaccccc").Should().BeTrue();
            star.StringMatch("abbbbbbbbcc").Should().BeFalse();
            star.StringMatch("bbba").Should().BeFalse();

            MatchedElement lpe = star.Match("bbbaccc", null);

            // * -> bbb
            // a -> a
            // * -> ccc
            lpe.GetSubKeyRef(0).Should().Be("bbbaccc");
            lpe.GetSubKeyRef(1).Should().Be("bbb");
            lpe.GetSubKeyRef(2).Should().Be("ccc");
            lpe.GetSubKeyCount().Should().Be(3);
        }
        public void TestStarsInMiddle()
        {
            IStarPathElement star = new StarDoublePathElement("a*b*c");

            star.StringMatch("a123b456c").Should().BeTrue();
            star.StringMatch("abccbcc").Should().BeTrue();

            MatchedElement lpe = star.Match("abccbcc", null);

            // a -> a
            // * -> bcc index 1
            // b -> b
            // * -> c index 2
            // c -> c
            lpe.GetSubKeyRef(0).Should().Be("abccbcc");
            lpe.GetSubKeyRef(1).Should().Be("bcc");
            lpe.GetSubKeyRef(2).Should().Be("c");
            lpe.GetSubKeyCount().Should().Be(3);
        }
        public void TestStarAtFrontAndEnd()
        {
            IStarPathElement star = new StarDoublePathElement("*a*c");

            star.StringMatch("bbbbadddc").Should().BeTrue();
            star.StringMatch("bacc").Should().BeTrue();
            star.StringMatch("bac").Should().BeFalse();
            star.StringMatch("baa").Should().BeFalse();

            MatchedElement lpe = star.Match("abcadefc", null);

            // * -> abc
            // a -> a index 4
            // * -> def
            // c -> c
            lpe.GetSubKeyRef(0).Should().Be("abcadefc");
            lpe.GetSubKeyRef(1).Should().Be("abc");
            lpe.GetSubKeyRef(2).Should().Be("def");
            lpe.GetSubKeyCount().Should().Be(3);
        }
        public void TestStarAtMiddleAndEnd()
        {
            IStarPathElement star = new StarDoublePathElement("a*b*");

            star.StringMatch("adbc").Should().BeTrue();
            star.StringMatch("abbc").Should().BeTrue();
            star.StringMatch("adddddd").Should().BeFalse();
            star.StringMatch("addb").Should().BeFalse();
            star.StringMatch("abc").Should().BeFalse();

            MatchedElement lpe = star.Match("abcbbac", null);

            // a -> a
            // * -> bc index 1
            // b -> b   index 3
            // * -> bac index 4
            // c -> c
            lpe.GetSubKeyRef(0).Should().Be("abcbbac");
            lpe.GetSubKeyRef(1).Should().Be("bc");
            lpe.GetSubKeyRef(2).Should().Be("bac");
            lpe.GetSubKeyCount().Should().Be(3);
        }