public void TestHtmlDecode1b() { string bek = @" program B(input){replace{ ""�"" ==> ""�""; //dont decode ""&#[0-9]{2};"" ==> [(10*(#2-48))+(#3-48)]; //decode ""&#$"" ==> ""&#""; //keep else ==> [#0]; //default }; } "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var test = BekConverter.BekToSTb(solver, bek).ExploreBools(); var css = solver.CharSetProvider; StringBuilder sb = new StringBuilder(); test.ToJS(x => { sb.AppendLine(x); return; }); var meth = test.Compile(); var res = meth.Apply("&�&&#"); Assert.AreEqual <string>("&�&&#", res); var res2 = meth.Apply(res); Assert.AreEqual <string>(res, res2); }
public void TestExplore1() { string pgm = @" program IfThenElseSample(t) { return iter(c in t) [r := 0; s := 0;]{ case ((c >= 'A') && (c <= 'B')): if (c < 'B') { yield (c+1); } else { yield (c,c); r := 1; } case(true): raise E1; } end { case (r == 0): raise E2; case (true): yield (); }; }"; Z3Provider solver = new Z3Provider(); var stb = BekConverter.BekToSTb(solver, pgm); //stb.ToST().ShowGraph(1); var sft = stb.Explore(); //sft.ToST().ShowGraph(1); Assert.AreEqual <int>(2, sft.StateCount); CheckFullEquivalence(sft.ToST(), stb.ToST()); }
public void Test_a2b_Error() { string bek = @" program a2b(_){ replace { ""a"" ==> ""b""; }; }"; Z3Provider solver = new Z3Provider(); var st = BekConverter.BekToSTb(solver, bek).ExploreBools(); var meth = st.Compile(); try { meth.Apply("a_a_a___"); Assert.IsTrue(false); } catch (Exception e) { Assert.AreEqual <string>("a2b", e.Message); } var res = meth.Apply("aaa"); Assert.AreEqual <string>("bbb", res); }
public void TestEq1_a() { string bek1 = @" program decode(input) { return iter(c in input)[pc := 0;]{ case ((pc == 0) && (c == 'a')) : pc := 1; yield (c,c+1); case ((pc == 1) && ((c == 'b'))) : pc := 1; yield (c,c); case ((pc == 1) && (c == 'a')) : pc := 2; yield (c); case (true): raise Error; } end { case (pc == 2): yield ('a'); case (true): raise Error; }; } "; string bek2 = @" program decode(input) { return iter(c in input)[pc := 0;]{ case ((pc == 0) && (c == 'a')) : pc := 1; yield (c); case ((pc == 1) && ((c == 'b'))) : pc := 1; yield (c,c); case ((pc == 1) && (c == 'a')) : pc := 2; yield (c+1,c); case (true): raise Error; } end { case (pc == 2): yield ('a'); case (true): raise Error; }; } "; Z3Provider solver = new Z3Provider(BitWidth.BV16); Func <IEnumerable <Expr>, string> GetString = w => { return(new String(Array.ConvertAll(new List <Expr>(w).ToArray(), x => (char)solver.GetNumeralInt(x)))); }; var A = BekConverter.BekToSTb(solver, bek1).ExploreBools().ToST().Explore(); var B = BekConverter.BekToSTb(solver, bek2).ExploreBools().ToST().Explore(); var witness = A.Neq1(B); Assert.IsNull(witness); }
public void TestSTbComposition3() { string pgm = @" function HS(x) = ((55296 <= x) && (x <= 56319)); function LS(x) = ((56320 <= x) && (x <= 57343)); program Fix(t) { return iter(c in t)[q0 := true; r := 0;] { case (q0): if (HS(c)) {r := c;q0:=false;} else { if (LS(c)) { yield(0xFFFD); r:=0;} else {yield(c); r:=0;} } case (true): if (HS(c)) {yield(0xFFFD); r := c;} else { if (LS(c)) {yield(r,c); r:=0; q0:=true;} else {yield(0xFFFD,c); r:=0; q0:=true;} } } end { case (!q0): yield (0xFFFD); }; }"; Z3Provider solver = new Z3Provider(); var A = BekConverter.BekToSTb(solver, pgm).ExploreBools(); //A.ShowGraph(); var AA = A.Compose(A); var AAAA = AA.Compose(AA); //AA.ShowGraph(); var C = AAAA.Simplify(3); // AAs.ShowGraph(); }
public void TestSTbComposition2() { string pgm = @" program A(t) { return iter(c in t)[b := false; r := 0;] { case (b): if (r == c) {yield();} else {yield(c); r:= c;} case (true): r := c; b := true; yield(c); } end { case (true): yield (); }; }"; Z3Provider solver = new Z3Provider(); var A = BekConverter.BekToSTb(solver, pgm).ExploreBools(); //A.ShowGraph(); var AA = A.Compose(A); //AA.ShowGraph(); var A_exe = A.Compile(); var s = A_exe.Apply("00001111122333"); Assert.AreEqual <string>("0123", s); var AA_exe = AA.Compile(); var s2 = AA_exe.Apply("00001111122333"); Assert.AreEqual <string>("0123", s2); }
public void TestEndAnchor() { string bek = @" program sample(_){ replace { ""ab$"" ==> ""123=""; ""a$"" ==> ""12==""; }} "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var test = BekConverter.BekToSTb(solver, bek); var test1 = test.ExploreBools(); //test1.ShowGraph(); var meth = test1.Compile(); //just test on couple of samples Assert.AreEqual <string>("123=", meth.Apply("ab")); Assert.AreEqual <string>("12==", meth.Apply("a")); //must throw in other cases try { meth.Apply("abab"); Assert.Fail("meth did not throw an excetion"); } catch (Exception e) { Assert.AreEqual <string>("sample_B", e.Message); } }
public void TestRegexEscaping() { string bek = @" program RegexEscape(_){ replace { ""\t"" ==> ""\\t""; ""\n"" ==> ""\\n""; ""\f"" ==> ""\\f""; ""\r"" ==> ""\\r""; @""(\ |\#|\$|\(|\)|\*|\+|\.|\?|\[|\\|\^|\{|\|)"" ==> ['\\',#0]; else ==> [#0]; }} //== //js(RegexEscape); "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var stb = BekConverter.BekToSTb(solver, bek); var st = stb.ExploreBools().ToST(); //st.ShowGraph(); var meth = st.STb.Compile(); //st.STb.ToJS("../../../GeneratedCodeSamples/RegexEscape.html", true); //just test on couple of samples Assert.AreEqual <string>(@"\\\.\$xabc\^", meth.Apply(@"\.$xabc^")); Assert.AreEqual <string>(@"\(\)\[]\{}\?\.\|", meth.Apply(@"()[]{}?.|")); }
public void TestIfThenElseStmt() { string pgm = @" program IfThenElseSampleTmp(t) { return iter(c in t) [r := 0;]{ case (c > 10): if (c < 20) { yield (c+1); } else { yield (c-1); r := 1; } case(true): raise X; } end { case (r == 0): raise Y; case (true): yield (); }; }"; Z3Provider solver = new Z3Provider(); var stb = BekConverter.BekToSTb(solver, pgm); //stb.Explore().ShowGraph(); //stb.ShowGraph(); //stb.ToST().ShowGraph(); //stb.Explore().ShowGraph(); }
public void TestRaiseStmt() { string pgm = @" program dummy(t) { return iter(c in t) [r := 0;]{ case (c > 'z'): r := 0; yield (c + 1); case (c < '9'): raise E1; case (c < 'z'): r := 1; yield (c + c); case (true): raise E2; }end{ case(r == 0): yield('h','e','l','l','o'); case(true): raise E3; }; }"; Z3Provider solver = new Z3Provider(); var stb = BekConverter.BekToSTb(solver, pgm); //stb.ShowGraph(); //stb.ToST().ShowGraph(); //stb.ToST().Explore().ShowGraph(); }
public void TestSTbSimplify0() { string pgm = @" program test(input){ return iter(c in input)[q := true; r := 0;] { case (q): r := r + c; q := false; case (!q): r := 0; q := true; end case (true): yield(r); }; } "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var dec = BekConverter.BekToSTb(solver, pgm); var st = dec.ExploreBools(); var sts = st.Simplify(); Assert.AreEqual <int>(2, st.StateCount); var st_st = st.Compose(st).ExploreBools(); Assert.AreEqual <int>(2, st_st.StateCount); }
public void TestBase16Encode() { string bek = @" function E(x)=ite(x < 10, x + 48, x + 55); program base16encode(input){ replace { @""[\0-\xFF]"" ==> [E(#0 >> 4),E(#0 & 0xF)]; } } "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var test = BekConverter.BekToSTb(solver, bek).ExploreBools(); //test.ToST().ShowGraph(); StringBuilder sb = new StringBuilder(); test.ToJS(x => { sb.AppendLine(x); return; }); var meth = test.Compile(); var res = meth.Apply("012"); Assert.AreEqual <string>("303132", res); res = meth.Apply("\0\x01\x02\x03"); Assert.AreEqual <string>("00010203", res); }
public void TestBase64Decode() { string bek = @" function D(x)=(ite(x=='/',63,ite(x=='+',62,ite(x<='9',x+4,ite(x<='Z',x-65,x-71))))); program base64decode(_){ replace { ""[a-zA-Z0-9+/]{4}"" ==> [(D(#0)<<2)|bits(5,4,D(#1)), (bits(3,0,D(#1))<<4)|bits(5,2,D(#2)), (bits(1,0,D(#2))<<6)|D(#3)]; ""[a-zA-Z0-9+/]{3}=$"" ==> [(D(#0)<<2)|bits(5,4,D(#1)), (bits(3,0,D(#1))<<4)|bits(5,2,D(#2))]; ""[a-zA-Z0-9+/]{2}==$""==> [(D(#0)<<2)|bits(5,4,D(#1))]; } } "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var x = solver.MkVar(1, solver.IntSort); Console.WriteLine(((IntSymbol)x.FuncDecl.Name).Int); var test = BekConverter.BekToSTb(solver, bek).ExploreBools(); //test.ToST().ShowGraph(); var meth = test.Compile(); Assert.AreEqual <string>("Man", meth.Apply("TWFu")); }
public void TestBase64Encode() { string bek = @" function E(x)=(ite(x<=25,x+65,ite(x<=51,x+71,ite(x<=61,x-4,ite(x==62,'+','/'))))); program base64encode(_){ replace { @""[\0-\xFF]{3}"" ==> [E(Bits(7,2,#0)), E((Bits(1,0,#0)<<4)|Bits(7,4,#1)), E((Bits(3,0,#1)<<2)|Bits(7,6,#2)), E(Bits(5,0,#2))]; @""[\0-\xFF]{2}$"" ==> [E(Bits(7,2,#0)), E((Bits(1,0,#0)<<4)|Bits(7,4,#1)), E(Bits(3,0,#1)<<2), '=']; @""[\0-\xFF]$"" ==> [E(Bits(7,2,#0)), E(Bits(1,0,#0)<<4), '=', '=']; } } "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var test = BekConverter.BekToSTb(solver, bek).ExploreBools(); //test.ToST().ShowGraph(); StringBuilder sb = new StringBuilder(); test.ToJS(x => { sb.AppendLine(x); return; }); var meth = test.Compile(); Assert.AreEqual <string>("TWFu", meth.Apply("Man")); }
public void TestHtmlEncodeStrictJSgen() { string bek = @" function H(x) = ite((0 <= x) && (x <= 9), x + 48, x + 55); program HtmlEncode(_){ replace { ""<"" ==> ""<""; "">"" ==> "">""; ""\x22""==> """""; ""&"" ==> ""&""; ""\'"" ==> ""'""; //encode all control and non ascii chars @""[\x01-\x0F]"" ==> ['&','#','X', H(#0), ';']; //do not encode \0 @""[\x10-\x1F\x7F-\xFF]"" ==> ['&','#','X', H(#0 >> 4), H(#0 & 0xF), ';']; @""[\u0100-\u0FFF]"" ==> ['&','#','X', H(#0 >> 8), H((#0 >> 4) & 0xF), H(#0 & 0xF), ';']; @""[\u1000-\uFFFF]"" ==> ['&','#','X', H(#0 >> 12), H((#0 >> 8) & 0xF), H((#0 >> 4) & 0xF), H(#0 & 0xF), ';']; else ==> [#0]; }} "; //fixed HtmlDecode patterns StringBuilder sb = new StringBuilder(bek); Z3Provider solver = new Z3Provider(BitWidth.BV16); var test = BekConverter.BekToSTb(solver, sb.ToString()); var test1 = test.ExploreBools(); //test1.ToST().ShowGraph(); //test1.ToJS("../../../GeneratedCodeSamples/HtmlEncodeStrict.html", true); }
public void TestSTbComposition0() { string pgm = @" program A(t) { return iter(c in t)[q := 0;] { case ((q == 0) && (c == 'a')): yield (c); q:= 1; case ((q == 1) && (c == 'a')): yield (c+1); q := 0; case ((q == 1) && (c == 'b')): yield (c); q:= 1; case (true): raise error; } end { case (q == 1): raise error; }; }"; Z3Provider solver = new Z3Provider(); var A = BekConverter.BekToSTb(solver, pgm).ExploreBools(); var AA = A.Compose(A); var AAs = AA.Simplify(); var A_exe = A.Compile(); var s = A_exe.Apply("aaaa"); Assert.AreEqual <string>("abab", s); }
public void Test_a2b() { string bek = @" program a2b(_){replace{""a"" ==> ""bb""; else ==> [#0];};} "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var test = BekConverter.BekToSTb(solver, bek).ExploreBools(); var css = solver.CharSetProvider; StringBuilder sb = new StringBuilder(); test.ToJS(x => { sb.AppendLine(x); return; }); var meth = test.Compile(); //test.ShowGraph(); var res = meth.Apply("aaac"); Assert.AreEqual <string>("bbbbbbc", res); var res2 = meth.Apply(res); Assert.AreEqual <string>(res, res2); }
public void TestCssEncodeBekRoundtrip() { Z3Provider solver = new Z3Provider(); var stb = BekConverter.BekFileToSTb(solver, sampleDir + "bek/CssEncode.bek"); var sb = new StringBuilder(); stb.ToBek(sb); var stb2 = BekConverter.BekToSTb(solver, sb.ToString()); CheckFullEquivalence(stb, stb2); }
// [TestMethod] public void DecodeDecode() { Z3Provider solver = new Z3Provider(); var A = BekConverter.BekToSTb(solver, BekConverter.BekFileToBekProgram(sampleDir + "bek/Base64decode.bek")).ExploreBools().ToST(); var ID = ST<FuncDecl, Expr, Sort>.MkId(solver, solver.CharSort); var st = A.Compose(A); //st.ShowGraph(); var sfa1 = st.ToSFA().Automaton; var sfa = ConvertToAutomatonOverBvSet(solver, sfa1).Determinize(solver.CharSetProvider).MinimizeHopcroft(solver.CharSetProvider); //solver.CharSetProvider.ShowGraph(sfa, "test"); }
public void TestBase64Decode() { Z3Provider solver = new Z3Provider(); var bek = BekConverter.BekFileToBekProgram(sampleDir + "bek/Base64decode.bek"); var st = BekConverter.BekToSTb(solver, bek).ExploreBools().ToST(); st.Simplify(); //st.ShowGraph(); var st0 = st.RestrictDomain(@"^([AB]{3})*$"); //st0.ShowGraph(); var st1 = st0.Explore(); //st1.Simplify(); //st1.ShowGraph(); //st.ToDot("c:/tmp/b64d.dot"); var sft = st.Explore(); var Q = sft.StateCount; int M = 0; int F = 0; int tot = 0; var tmp = new Dictionary <Expr, int>(); foreach (var m in sft.GetMoves()) { if (m.Label.IsFinal) { F += 1; tot += 1; } else { M += 1; int k = 0; if (tmp.TryGetValue(m.Label.Guard, out k)) { tot += k; } else { foreach (var v in solver.MainSolver.FindAllMembers(m.Label.Guard)) { k += 1; } tot += k; tmp[m.Label.Guard] = k; } } } Console.WriteLine(tot); Assert.AreEqual <int>(87, Q); }
public void Test_a2b_ElseX() { string bek = @" program a2b(_){ replace { ""a"" ==> ""b""; else ==> ""X""; } }"; Z3Provider solver = new Z3Provider(); var st = BekConverter.BekToSTb(solver, bek).ExploreBools(); var meth = st.Compile(); var res = meth.Apply("a_a_aX"); Assert.AreEqual <string>("bXbXbX", res); }
public void Test_aa2b_Delete() { string bek = @" program a2b(_){ replace { ""aa"" ==> ""b""; else ==> []; }; }"; Z3Provider solver = new Z3Provider(); var st = BekConverter.BekToSTb(solver, bek).ExploreBools(); var meth = st.Compile(); var res = meth.Apply("aa_a_aa__aaa_"); Assert.AreEqual <string>("bbb", res); }
public void TestLengthConflict2() { string bek1 = @" program decode(input){ replace { ""&"" ==> ""&""; ""<"" ==> ""<""; "">"" ==> "">""; else ==> [#0]; } } "; string bek2 = @" program decode(input){ replace { ""&"" ==> ""&""; ""<"" ==> ""<""; "">"" ==> "">>""; else ==> [#0]; } } "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var test1 = BekConverter.BekToSTb(solver, bek1).ExploreBools(); //test1.ShowGraph(); var meth1 = test1.Compile(); var test2 = BekConverter.BekToSTb(solver, bek2).ExploreBools(); //test1.ShowGraph(); var meth2 = test2.Compile(); //just test on couple of samples Assert.AreEqual <string>("<", meth1.Apply("<")); Assert.AreEqual <string>(">", meth1.Apply(">")); Assert.AreEqual <string>("&g>", meth1.Apply("&g>")); Assert.AreEqual <string>("&g>", meth1.Apply("&g>")); var d1 = test1.ToST().Explore(); var d2 = test2.ToST().Explore(); var witness = d1.Neq1(d2); Assert.IsFalse(witness == null); var inp = new String(Array.ConvertAll(witness.ToArray(), x => (char)solver.GetNumeralInt(x))); var out1 = meth1.Apply(inp); var out2 = meth2.Apply(inp); Assert.AreNotEqual <string>(out1, out2); }
public void TestHtmlEncodeStrict() { string bek = @" function H(x) = ite((0 <= x) && (x <= 9), x + 48, x + 55); program HtmlEncode(_){ replace { ""<"" ==> ""<""; "">"" ==> "">""; ""\x22""==> """""; ""&"" ==> ""&""; ""\'"" ==> ""&apos""; @""[\x01-\x0F]"" ==> ['&','#','X', H(#0), ';']; //do not encode \0 @""[\x10-\x1F\x7F-\xFF]"" ==> ['&','#','X', H(#0 >> 4), H(#0 & 0xF), ';']; @""[\u0100-\u0FFF]"" ==> ['&','#','X', H(#0 >> 8), H((#0 >> 4) & 0xF), H(#0 & 0xF), ';']; @""[\u1000-\uFFFF]"" ==> ['&','#','X', H(#0 >> 12), H((#0 >> 8) & 0xF), H((#0 >> 4) & 0xF), H(#0 & 0xF), ';']; else ==> [#0]; }} "; //fixed HtmlDecode patterns StringBuilder sb = new StringBuilder(bek); Z3Provider solver = new Z3Provider(BitWidth.BV16); var test = BekConverter.BekToSTb(solver, sb.ToString()); var test1 = test.ExploreBools(); //test1.ShowGraph(); var meth = test1.Compile("Microsoft.Bek.Query.Tests", "HtmlEncodeStrict"); // test1.ToCS("../../../src/GeneratedCodeSamples/HtmlEncodeStrict.cs", "GeneratedCodeSamples", "HtmlEncodeStrict", false, false); string foo = System.Net.WebUtility.HtmlEncode(@"&&&\0\0�&&&"); string bazz = System.Net.WebUtility.HtmlDecode(foo + "\\"); //just test on couple of samples first string[] samples = new string[] { "<.<", ">\xFF \x7F", }; for (int i = 0; i < samples.Length; i++) { var s = meth.Apply(samples[i]); var expected = System.Net.WebUtility.HtmlDecode(s); Assert.AreEqual <string>(expected, samples[i]); } }
public void TestFinalCompletion() { string bek = @" program test(_){ replace { ""abc"" ==> ""ABC""; ""bcd"" ==> ""BCD""; else ==> [#0 + 1]; }; }"; Z3Provider solver = new Z3Provider(); var test = BekConverter.BekToSTb(solver, bek); var test1 = test.ExploreBools().ToST(); //test1.ShowGraph(); var a2b = test.Compile(); Assert.AreEqual <string>("ABCef", a2b.Apply("abcde")); Assert.AreEqual <string>("bcBCD", a2b.Apply("abbcd")); }
public void TestPositionConflict2() { string bek1 = @" program decode(input){ replace { ""&"" ==> ""&""; ""<"" ==> ""<""; "">"" ==> "">""; @""&\d{3}$"" ==> [(#1|#2)|#3]; else ==> [#0]; } } "; string bek2 = @" program decode(input){ replace { ""&"" ==> ""&""; ""<"" ==> ""<""; "">"" ==> "">""; @""&[0-9]{3}$"" ==> [(#1|#2)|#3]; else ==> [#0]; } } "; Tuple <int, string> foo = Tuple.Create(34, "abc"); Tuple <int, string> bar = Tuple.Create(34, "ab" + "c"); bool b = foo.Equals(bar); Z3Provider solver = new Z3Provider(BitWidth.BV16); var d1 = BekConverter.BekToSTb(solver, bek1).ToST(); var d2 = BekConverter.BekToSTb(solver, bek2).ToST(); var witness = d1.Neq1(d2); Assert.IsFalse(witness == null); var inp = new String(Array.ConvertAll(witness.ToArray(), x => (char)solver.GetNumeralInt(x))); var out1 = new String(Array.ConvertAll(new List <Expr>(d1.Apply(witness)).ToArray(), x => (char)solver.GetNumeralInt(x))); var out2 = new String(Array.ConvertAll(new List <Expr>(d2.Apply(witness)).ToArray(), x => (char)solver.GetNumeralInt(x))); solver.Dispose(); Assert.AreNotEqual <string>(out1, out2); }
public void TestTrivial() { string pgm = "program trivial(t) { return iter(c in t) {case (true): yield (c);}; }"; Z3Provider solver = new Z3Provider(); var stb = BekConverter.BekToSTb(solver, pgm); var st1 = stb.ToST(); //stb.ShowGraph(); //st1.ShowGraph(); var st = st1.Explore(); //st.ShowGraph(); Assert.AreEqual <int>(2, st.MoveCount); //note: one of the moves is a final output Assert.AreEqual <int>(1, st.StateCount); Assert.AreEqual <int>(0, st.InitialState); var moves = new List <Move <Rule <Expr> > >(st.GetNonFinalMovesFrom(0)); Assert.AreEqual <int>(1, moves.Count); //Assert.AreEqual<Expr>(solver.True, moves[0].Condition.Guard); }
public void TestLengthConflict() { string bek = @" program decode(input){ replace { ""&"" ==> ""&""; ""<"" ==> ""<""; "">"" ==> "">""; else ==> [#0]; } } "; Z3Provider solver = new Z3Provider(BitWidth.BV16); var test = BekConverter.BekToSTb(solver, bek); var test1 = test.ExploreBools(); //test1.ShowGraph(); //var meth = test1.Compile(); //just test on couple of samples //Assert.AreEqual<string>("<", meth.Apply("<")); //Assert.AreEqual<string>(">", meth.Apply(">")); //Assert.AreEqual<string>("&g>", meth.Apply("&g>")); //Assert.AreEqual<string>("&g>", meth.Apply("&g>")); var dec = test.ToST(); var d = dec.Explore(); var dd = d.Compose(d); //var ddmeth = dd.ToSTb().Compile(); var witness = d.Neq1(dd); Assert.IsFalse(witness == null); var inp = new String(Array.ConvertAll(witness.ToArray(), x => (char)solver.GetNumeralInt(x))); //var out1 = meth.Apply(inp); //var out2 = ddmeth.Apply(inp); var out1b = new String(Array.ConvertAll(new List <Expr>(dec.Apply(witness)).ToArray(), x => ((char)solver.GetNumeralInt(x)))); var out2b = new String(Array.ConvertAll(new List <Expr>(dd.Apply(witness)).ToArray(), x => ((char)solver.GetNumeralInt(x)))); //Assert.AreEqual<string>(out1, out1b); //Assert.AreEqual<string>(out2, out2b); Assert.AreNotEqual <string>(out1b, out2b); }
public void Test_aaa2b_Keep() { string bek = @" program a2b(_){ replace { ""aaa"" ==> [#1 + 1]; else ==> [#0]; } }"; Z3Provider solver = new Z3Provider(); var st = BekConverter.BekToSTb(solver, bek).ToST(); //st.ShowGraph(); var st1 = st.ExploreBools(); //st1.ShowGraph(); var stb = st1.ToSTb(); //stb.ShowGraph(); var meth = stb.Compile(); var res = meth.Apply("ac_aaaaGGhh"); Assert.AreEqual <string>("ac_baGGhh", res); }
public void TestRoundtrip1() { string pgm = @" program IfThenElseSample(t) { return iter(c in t) [r := 0;]{ case (c > 10): if (c < 20) { yield (c+1); } else { yield (c-1); r := 1; } case(true): raise X; } end { case (r == 0): raise Y; case (true): yield (); }; }"; Z3Provider solver = new Z3Provider(); var stb = BekConverter.BekToSTb(solver, pgm); StringBuilder sb = new StringBuilder(); stb.ToBek(sb); var stb2 = BekConverter.BekToSTb(solver, sb.ToString()); //stb2.ShowGraph(); CheckFullEquivalence(stb.ToST(), stb2.ToST()); //var sft = stb.Explore(); //StringBuilder sb2 = new StringBuilder(); //sft.ToBek(sb2); //var sft2 = BekConverter.BekToSTb(solver, sb2.ToString()); ////StreamWriter sw = new StreamWriter("tmp.bek"); ////sft2.ToBek(sw); ////sw.Close(); ////sft2.ShowGraph(); //CheckFullEquivalence(stb.ToST(), sft2.ToST()); }