public void TestCharacterSetNodeRendering()
        {
            // Char array, positive.
            RegexNodeCharacterSet characterSet1 = new RegexNodeCharacterSet(new[] { 'a', 'B', '0', ']', 'd', '^', 'c' }, false);

            Assert.AreEqual(@"[aB0\]d\^c]", characterSet1.ToRegexPattern());

            characterSet1.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[aB0\]d\^c]*", characterSet1.ToRegexPattern());

            characterSet1.Quantifier        = RegexQuantifier.None;
            characterSet1.UseCharacterCodes = true;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u005d\u0064\u005e\u0063]", characterSet1.ToRegexPattern());

            characterSet1.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u005d\u0064\u005e\u0063]*", characterSet1.ToRegexPattern());

            // Char array, negative.
            RegexNodeCharacterSet characterSet2 = new RegexNodeCharacterSet(new[] { 'a', 'B', '0', 'd', '^', 'x' }, true);

            Assert.AreEqual(@"[^aB0d\^x]", characterSet2.ToRegexPattern());

            characterSet2.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^aB0d\^x]*", characterSet2.ToRegexPattern());

            characterSet2.Quantifier        = RegexQuantifier.None;
            characterSet2.UseCharacterCodes = true;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005e\u0078]", characterSet2.ToRegexPattern());

            characterSet2.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005e\u0078]*", characterSet2.ToRegexPattern());

            // Explicit pattern, positive.
            RegexNodeCharacterSet characterSet3 = new RegexNodeCharacterSet(@"aB0d\W\s", false);

            Assert.AreEqual(@"[aB0d\W\s]", characterSet3.ToRegexPattern());

            characterSet3.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[aB0d\W\s]*", characterSet3.ToRegexPattern());

            characterSet3.Quantifier        = RegexQuantifier.None;
            characterSet3.UseCharacterCodes = true;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]", characterSet3.ToRegexPattern());

            characterSet3.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]*", characterSet3.ToRegexPattern());

            // Explicit pattern, negative.
            RegexNodeCharacterSet characterSet4 = new RegexNodeCharacterSet(@"aB0d\W\s", true);

            Assert.AreEqual(@"[^aB0d\W\s]", characterSet4.ToRegexPattern());

            characterSet4.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^aB0d\W\s]*", characterSet4.ToRegexPattern());

            characterSet4.Quantifier        = RegexQuantifier.None;
            characterSet4.UseCharacterCodes = true;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]", characterSet4.ToRegexPattern());

            characterSet4.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]*", characterSet4.ToRegexPattern());

            // RegexBuilder, char array, positive.
            RegexNodeCharacterSet characterSet5 = RegexBuilder.CharacterSet(new[] { 'a', 'B', '0', ']', 'd', '^', 'c' }, false, RegexQuantifier.None);

            Assert.AreEqual(@"[aB0\]d\^c]", characterSet5.ToRegexPattern());

            characterSet5.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[aB0\]d\^c]*", characterSet5.ToRegexPattern());

            characterSet5.Quantifier        = RegexQuantifier.None;
            characterSet5.UseCharacterCodes = true;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u005d\u0064\u005e\u0063]", characterSet5.ToRegexPattern());

            characterSet5.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u005d\u0064\u005e\u0063]*", characterSet5.ToRegexPattern());

            // RegexBuilder, char array, negative.
            RegexNodeCharacterSet characterSet6 = RegexBuilder.NegativeCharacterSet(new[] { 'a', 'B', '0', 'd', '^', 'x' }, false, RegexQuantifier.None);

            Assert.AreEqual(@"[^aB0d\^x]", characterSet6.ToRegexPattern());

            characterSet6.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^aB0d\^x]*", characterSet6.ToRegexPattern());

            characterSet6.Quantifier        = RegexQuantifier.None;
            characterSet6.UseCharacterCodes = true;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005e\u0078]", characterSet6.ToRegexPattern());

            characterSet6.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005e\u0078]*", characterSet6.ToRegexPattern());

            // RegexBuilder, explicit pattern, positive.
            RegexNodeCharacterSet characterSet7 = RegexBuilder.CharacterSet(@"aB0d\W\s", RegexQuantifier.None);

            Assert.AreEqual(@"[aB0d\W\s]", characterSet7.ToRegexPattern());

            characterSet7.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[aB0d\W\s]*", characterSet7.ToRegexPattern());

            characterSet7.Quantifier        = RegexQuantifier.None;
            characterSet7.UseCharacterCodes = true;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]", characterSet7.ToRegexPattern());

            characterSet7.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]*", characterSet7.ToRegexPattern());

            // RegexBuilder, explicit pattern, negative.
            RegexNodeCharacterSet characterSet8 = RegexBuilder.NegativeCharacterSet(@"aB0d\W\s", RegexQuantifier.None);

            Assert.AreEqual(@"[^aB0d\W\s]", characterSet8.ToRegexPattern());

            characterSet8.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^aB0d\W\s]*", characterSet8.ToRegexPattern());

            characterSet8.Quantifier        = RegexQuantifier.None;
            characterSet8.UseCharacterCodes = true;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]", characterSet8.ToRegexPattern());

            characterSet8.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]*", characterSet8.ToRegexPattern());
        }
        public void TestCharacterSetNodeRendering()
        {
            // Char array, positive.
            RegexNodeCharacterSet characterSet1 = new RegexNodeCharacterSet(new[] { 'a', 'B', '0', ']', 'd', '^', 'c' }, false);
            Assert.AreEqual(@"[aB0\]d\^c]", characterSet1.ToRegexPattern());

            characterSet1.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[aB0\]d\^c]*", characterSet1.ToRegexPattern());

            characterSet1.Quantifier = RegexQuantifier.None;
            characterSet1.UseCharacterCodes = true;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u005d\u0064\u005e\u0063]", characterSet1.ToRegexPattern());

            characterSet1.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u005d\u0064\u005e\u0063]*", characterSet1.ToRegexPattern());

            // Char array, negative.
            RegexNodeCharacterSet characterSet2 = new RegexNodeCharacterSet(new[] { 'a', 'B', '0', 'd', '^', 'x' }, true);
            Assert.AreEqual(@"[^aB0d\^x]", characterSet2.ToRegexPattern());

            characterSet2.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^aB0d\^x]*", characterSet2.ToRegexPattern());

            characterSet2.Quantifier = RegexQuantifier.None;
            characterSet2.UseCharacterCodes = true;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005e\u0078]", characterSet2.ToRegexPattern());

            characterSet2.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005e\u0078]*", characterSet2.ToRegexPattern());

            // Explicit pattern, positive.
            RegexNodeCharacterSet characterSet3 = new RegexNodeCharacterSet(@"aB0d\W\s", false);
            Assert.AreEqual(@"[aB0d\W\s]", characterSet3.ToRegexPattern());

            characterSet3.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[aB0d\W\s]*", characterSet3.ToRegexPattern());

            characterSet3.Quantifier = RegexQuantifier.None;
            characterSet3.UseCharacterCodes = true;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]", characterSet3.ToRegexPattern());

            characterSet3.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]*", characterSet3.ToRegexPattern());

            // Explicit pattern, negative.
            RegexNodeCharacterSet characterSet4 = new RegexNodeCharacterSet(@"aB0d\W\s", true);
            Assert.AreEqual(@"[^aB0d\W\s]", characterSet4.ToRegexPattern());

            characterSet4.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^aB0d\W\s]*", characterSet4.ToRegexPattern());

            characterSet4.Quantifier = RegexQuantifier.None;
            characterSet4.UseCharacterCodes = true;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]", characterSet4.ToRegexPattern());

            characterSet4.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]*", characterSet4.ToRegexPattern());

            // RegexBuilder, char array, positive.
            RegexNodeCharacterSet characterSet5 = RegexBuilder.CharacterSet(new[] { 'a', 'B', '0', ']', 'd', '^', 'c' }, false, RegexQuantifier.None);
            Assert.AreEqual(@"[aB0\]d\^c]", characterSet5.ToRegexPattern());

            characterSet5.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[aB0\]d\^c]*", characterSet5.ToRegexPattern());

            characterSet5.Quantifier = RegexQuantifier.None;
            characterSet5.UseCharacterCodes = true;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u005d\u0064\u005e\u0063]", characterSet5.ToRegexPattern());

            characterSet5.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u005d\u0064\u005e\u0063]*", characterSet5.ToRegexPattern());

            // RegexBuilder, char array, negative.
            RegexNodeCharacterSet characterSet6 = RegexBuilder.NegativeCharacterSet(new[] { 'a', 'B', '0', 'd', '^', 'x' }, false, RegexQuantifier.None);
            Assert.AreEqual(@"[^aB0d\^x]", characterSet6.ToRegexPattern());

            characterSet6.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^aB0d\^x]*", characterSet6.ToRegexPattern());

            characterSet6.Quantifier = RegexQuantifier.None;
            characterSet6.UseCharacterCodes = true;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005e\u0078]", characterSet6.ToRegexPattern());

            characterSet6.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005e\u0078]*", characterSet6.ToRegexPattern());

            // RegexBuilder, explicit pattern, positive.
            RegexNodeCharacterSet characterSet7 = RegexBuilder.CharacterSet(@"aB0d\W\s", RegexQuantifier.None);
            Assert.AreEqual(@"[aB0d\W\s]", characterSet7.ToRegexPattern());

            characterSet7.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[aB0d\W\s]*", characterSet7.ToRegexPattern());

            characterSet7.Quantifier = RegexQuantifier.None;
            characterSet7.UseCharacterCodes = true;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]", characterSet7.ToRegexPattern());

            characterSet7.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]*", characterSet7.ToRegexPattern());

            // RegexBuilder, explicit pattern, negative.
            RegexNodeCharacterSet characterSet8 = RegexBuilder.NegativeCharacterSet(@"aB0d\W\s", RegexQuantifier.None);
            Assert.AreEqual(@"[^aB0d\W\s]", characterSet8.ToRegexPattern());

            characterSet8.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^aB0d\W\s]*", characterSet8.ToRegexPattern());

            characterSet8.Quantifier = RegexQuantifier.None;
            characterSet8.UseCharacterCodes = true;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]", characterSet8.ToRegexPattern());

            characterSet8.Quantifier = RegexQuantifier.ZeroOrMore;
            Assert.AreEqual(@"[^\u0061\u0042\u0030\u0064\u005c\u0057\u005c\u0073]*", characterSet8.ToRegexPattern());
        }