public void matching_double_values(string s, double d)
        {
            VirtualStringMatcher m = new VirtualStringMatcher(new FakeVirtualString("P" + s + "S"));

            m.MatchChar('P').Should().BeTrue();
            long idx = m.StartIndex;

            m.TryMatchDoubleValue().Should().BeTrue();
            m.UncheckedMove(idx - m.StartIndex);
            m.TryMatchDoubleValue(out double parsed).Should().BeTrue();
            parsed.Should().BeApproximately(d, 1f);
            m.MatchChar('S').Should().BeTrue();
            m.IsEnd.Should().BeTrue();
        }
        public void simple_json_test()
        {
            string s = @"
{ 
    ""p1"": ""n"", 
    ""p2""  : 
    { 
        ""p3"": 
        [ 
            ""p4"": 
            { 
                ""p5"" : 0.989, 
                ""p6"": [],
                ""p7"": {}
            }
        ] 
    } 
}  ";
            var    m = new VirtualStringMatcher(new FakeVirtualString(s));

            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('{').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchJSONQuotedString(out string pName).Should().BeTrue();
            pName.Should().Be("p1");
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(':').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchJSONQuotedString(out pName).Should().BeTrue();
            pName.Should().Be("n");
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(',').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchJSONQuotedString(out pName).Should().BeTrue();
            pName.Should().Be("p2");
            m.MatchWhiteSpaces(2).Should().BeTrue();
            m.MatchChar(':').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('{').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchJSONQuotedString(out pName).Should().BeTrue();
            pName.Should().Be("p3");
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(':').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('[').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchJSONQuotedString(out pName).Should().BeTrue();
            pName.Should().Be("p4");
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(':').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('{').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchJSONQuotedString().Should().BeTrue();
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(':').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchDoubleValue().Should().BeTrue();
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(',').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchJSONQuotedString(out pName).Should().BeTrue();
            pName.Should().Be("p6");
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(':').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('[').Should().BeTrue();
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(']').Should().BeTrue();
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(',').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.TryMatchJSONQuotedString().Should().BeTrue();
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar(':').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('{').Should().BeTrue();
            m.MatchWhiteSpaces(0).Should().BeTrue();
            m.MatchChar('}').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('}').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar(']').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('}').Should().BeTrue();
            m.MatchWhiteSpaces().Should().BeTrue();
            m.MatchChar('}').Should().BeTrue();
            m.MatchWhiteSpaces(2).Should().BeTrue();
            m.IsEnd.Should().BeTrue();
        }