public void CharsToDoublePartUnitTest() { CharsToDoublePart ctdp = new CharsToDoublePart(); Assert.IsTrue(ctdp.Validate("16.545935r".ToObjectList()) == 9); Assert.IsTrue(ctdp.Validate("0135.21.58s".ToObjectList()) == 7); Assert.IsTrue(ctdp.Validate("136d5.63".ToObjectList()) == 3); Assert.IsTrue(ctdp.Validate("-17.88535dd".ToObjectList()) == 9); Assert.IsTrue(ctdp.Validate("ssr1.2365".ToObjectList()) == -1); Assert.IsTrue(ctdp.Validate(new List <ObjectConst> { new DoubleConst(15) }) == -1); Assert.IsTrue(ctdp.Validate(".2365".ToObjectList()) == 5); string s = string.Concat("0.", new string('5', 400)); Assert.IsTrue(ctdp.Validate(s.ToObjectList()) == 330); s = string.Concat("-0.", new string('7', 300)); Assert.IsTrue(ctdp.Validate(s.ToObjectList()) == 303); Assert.IsTrue(ctdp.Validate(ctdp.Random()) != -1); Assert.IsTrue(ctdp.Validate(ctdp.Random()) != -1); TestContext.WriteLine(ctdp.Random().ForEachToString()); TestContext.WriteLine(ctdp.Random().ForEachToString()); TestContext.WriteLine(ctdp.Random().ForEachToString()); ctdp = new CharsToDoublePart(811.568478); Assert.IsTrue(ctdp.Validate("811.568478.324".ToObjectList()) == 10); Assert.IsTrue(ctdp.Validate("811.568479".ToObjectList()) == -1); Assert.IsTrue(ctdp.Validate("811.568477".ToObjectList()) == -1); Assert.IsTrue(ctdp.Validate(ctdp.Random()) != -1); Assert.IsTrue(ctdp.Validate(ctdp.Random()) != -1); TestContext.WriteLine(ctdp.Random().ForEachToString()); TestContext.WriteLine(ctdp.Random().ForEachToString()); ctdp = new CharsToDoublePart(-788.49, 96633.12); Assert.IsTrue(ctdp.Validate("001264d".ToObjectList()) == 6); Assert.IsTrue(ctdp.Validate("96633.15".ToObjectList()) == -1); Assert.IsTrue(ctdp.Validate("-788.50".ToObjectList()) == -1); Assert.IsTrue(ctdp.Validate(ctdp.Random()) != -1); Assert.IsTrue(ctdp.Validate(ctdp.Random()) != -1); TestContext.WriteLine(ctdp.Random().ForEachToString()); TestContext.WriteLine(ctdp.Random().ForEachToString()); TestContext.WriteLine(ctdp.Random().ForEachToString()); ctdp = new CharsToDoublePart(81.3, -726.5); Assert.ThrowsException <ArgumentException>(() => ctdp.Random()); ctdp = new CharsToDoublePart(); Assert.IsTrue(ctdp.Validate("2.3001810487634357E-21".ToObjectList()) == 22); Assert.IsTrue(ctdp.Validate("2.3001810487635857E+125".ToObjectList()) == 23); Assert.IsTrue(ctdp.Validate("2.3009818107634357E+3".ToObjectList()) == 21); Assert.IsTrue(ctdp.Validate("-6.3009818507634357E-35".ToObjectList()) == 23); Assert.IsTrue(ctdp.Validate("8.28037438864823E-50".ToObjectList()) == 20); Assert.IsTrue(ctdp.Validate("NaN".ToObjectList()) == -1); for (int i = 0; i < 5000; i++) { if (ctdp.Random().ForEachToString().Contains("NaN")) { TestContext.WriteLine($"{i}:NaN"); } } }
public static ValidateLogic JsonLogic() { ValidateLogic VL = new ValidateLogic("Main"); Area skipChars = new Area("SkipArea"); Area objectArea = new Area("ObjectArea"); Area arrayArea = new Area("ArrayArea"); Area valueArea = new Area("ValueArea"); Area propertiesArea = new Area("PropertiesArea"); Area stringArea = new Area("StringArea"); VL.Areas.Add(skipChars); VL.Areas.Add(objectArea); VL.Areas.Add(arrayArea); VL.Areas.Add(valueArea); VL.Areas.Add(propertiesArea); VL.Areas.Add(stringArea); //StringArea UnitSet us12 = new UnitSet(CharUnits.QuotationMark); stringArea.StartNode = us12; List <char> excludeChars = new List <char> { '\\', '\"' }; for (int i = 0; i < 32; i++) { excludeChars.Add((char)i); } AnyStringPart asp1 = new AnyStringPart(null, stringArea, "asp1", new List <char> { '\\', '\"' }, excludeChars, 0, 0); us12.NextNode = asp1; Status st4 = new Status("st4"); asp1.NextNode = st4; st4.Choices.Add(new Choice(new UnitSet(CharUnits.BackSlash))); st4.Choices.Add(new Choice(new UnitSet(CharUnits.QuotationMark))); st4.Choices[1].Node.NextNode = EndNode.Instance; Status st5 = new Status("st5"); st4.Choices[0].Node.NextNode = st5; st5.Choices.Add(new Choice(new UnitSet(new CharUnit('b')))); st5.Choices.Add(new Choice(new UnitSet(new CharUnit('f')))); st5.Choices.Add(new Choice(new UnitSet(new CharUnit('n')))); st5.Choices.Add(new Choice(new UnitSet(new CharUnit('r')))); st5.Choices.Add(new Choice(new UnitSet(new CharUnit('t')))); st5.Choices.Add(new Choice(new UnitSet(CharUnits.Slash))); st5.Choices.Add(new Choice(new UnitSet(CharUnits.BackSlash))); st5.Choices.Add(new Choice(new UnitSet(CharUnits.QuotationMark))); UnitSet unicodeSet = new UnitSet(new CharUnit('u')); unicodeSet.Units.Add(CharUnits.HexdecimalDigit); unicodeSet.Units.Add(CharUnits.HexdecimalDigit); unicodeSet.Units.Add(CharUnits.HexdecimalDigit); unicodeSet.Units.Add(CharUnits.HexdecimalDigit); st5.Choices.Add(new Choice(unicodeSet)); for (int i = 0; i < st5.Choices.Count; i++) { st5.Choices[i].Node.NextNode = asp1; } //Skip Area UnitSet us = new UnitSet(CharUnits.WhiteSpace, skipChars); UnitSet us2 = new UnitSet(CharUnits.CarriageReturn, skipChars); UnitSet us3 = new UnitSet(CharUnits.LineFeed, skipChars); UnitSet us4 = new UnitSet(CharUnits.HorizontalTab, skipChars); Status st1 = new Status(); st1.Choices.Add(new Choice(us)); st1.Choices.Add(new Choice(us2)); st1.Choices.Add(new Choice(us3)); st1.Choices.Add(new Choice(us4)); st1.Choices.Add(Choice.EndChoice); skipChars.StartNode = st1; us.NextNode = us2.NextNode = us3.NextNode = us4.NextNode = skipChars.StartNode; //Object Area UnitSet leftCurlBracket = new UnitSet(CharUnits.LeftCurlyBracket); UnitSet rightCurlBracket = new UnitSet(CharUnits.RightCurlyBracket); AreaStart skSt = new AreaStart(skipChars, objectArea); objectArea.StartNode = leftCurlBracket; AreaStart paSt = new AreaStart(propertiesArea, objectArea); leftCurlBracket.NextNode = skSt; skSt.NextNode = paSt; skSt = new AreaStart(skipChars, objectArea); paSt.NextNode = skSt; skSt.NextNode = rightCurlBracket; rightCurlBracket.NextNode = EndNode.Instance; //ArrayArea UnitSet leftSquareBracket = new UnitSet(CharUnits.LeftSquareBracket); UnitSet rightSquareBracket = new UnitSet(CharUnits.RightSquareBracket); arrayArea.StartNode = leftSquareBracket; skSt = new AreaStart(skipChars, arrayArea); leftSquareBracket.NextNode = skSt; AreaStart vaSt = new AreaStart(valueArea, arrayArea); skSt.NextNode = vaSt; skSt = new AreaStart(skipChars, arrayArea); vaSt.NextNode = skSt; Status st2 = new Status("array_st2", arrayArea); skSt.NextNode = st2; UnitSet us5 = new UnitSet(CharUnits.Comma, arrayArea); st2.Choices.Add(new Choice(us5)); st2.Choices.Add(new Choice(rightSquareBracket)); skSt = new AreaStart(skipChars, arrayArea); us5.NextNode = skSt; skSt.NextNode = vaSt; rightSquareBracket.NextNode = EndNode.Instance; //Value Area CharsToBooleanPart cbp = new CharsToBooleanPart(); cbp.Parent = valueArea; CharsToDoublePart cdp = new CharsToDoublePart(); cdp.Parent = valueArea; CharsToIntegerPart cip = new CharsToIntegerPart(); cip.Parent = valueArea; AreaStart stSt = new AreaStart(stringArea, valueArea); Status st3 = new Status(); st3.Choices.Add(new Choice("null".ToUnitSet())); st3.Choices.Add(new Choice(cbp)); st3.Choices.Add(new Choice(cip)); st3.Choices.Add(new Choice(cdp)); AreaStart oaSt = new AreaStart(objectArea, valueArea); st3.Choices.Add(new Choice(oaSt)); AreaStart arSt = new AreaStart(arrayArea, valueArea); st3.Choices.Add(new Choice(arSt)); st3.Choices.Add(new Choice(stSt)); for (int i = 0; i < st3.Choices.Count; i++) { st3.Choices[i].Node.NextNode = EndNode.Instance; } valueArea.StartNode = st3; //Properties Area stSt = new AreaStart(stringArea, propertiesArea); propertiesArea.StartNode = stSt; skSt = new AreaStart(skipChars, propertiesArea); stSt.NextNode = skSt; UnitSet us8 = new UnitSet(CharUnits.Colon, propertiesArea); skSt.NextNode = us8; skSt = new AreaStart(skipChars, propertiesArea); us8.NextNode = skSt; vaSt = new AreaStart(valueArea, propertiesArea); skSt.NextNode = vaSt; Status st6 = new Status("pa_st6"); vaSt.NextNode = st6; st6.Choices.Add(Choice.EndChoice); skSt = new AreaStart(skipChars, propertiesArea); st6.Choices.Add(new Choice(skSt, null, 4)); UnitSet us9 = new UnitSet(CharUnits.Comma, propertiesArea); skSt.NextNode = us9; skSt = new AreaStart(skipChars, propertiesArea); us9.NextNode = skSt; skSt.NextNode = propertiesArea.StartNode; //Start Main skSt = new AreaStart(skipChars, VL, null, "Main_SKIP1"); VL.StartNode = skSt; Status JsonStartStatus = new Status("Main_ST_Object_Or_Array", VL); skSt.NextNode = JsonStartStatus; AreaStart ap1 = new AreaStart(objectArea, VL, null, "Main_AS_ObjectArea"); AreaStart ap2 = new AreaStart(arrayArea, VL, null, "Main_AR_ArrayArea"); skSt = new AreaStart(skipChars, VL, null, "Main_SKIP2"); ap1.NextNode = ap2.NextNode = skSt; skSt.NextNode = EndNode.Instance; JsonStartStatus.Choices.Add(new Choice(ap1)); JsonStartStatus.Choices.Add(new Choice(ap2)); return(VL); }