X-Git-Url: http://git.megacz.com/?p=sbp.git;a=blobdiff_plain;f=tests%2Fregression.tc;h=f13accf654f6c51ff79ee8af64f7d32a849357a3;hp=48a9bae90f00d9614c4ce50049438c99812623bd;hb=22a2ca7685dcf29e9ddcc6e26443ea0277385fca;hpb=35698bf08ba446ffe96917e8964b5bc43404eda3 diff --git a/tests/regression.tc b/tests/regression.tc index 48a9bae..f13accf 100644 --- a/tests/regression.tc +++ b/tests/regression.tc @@ -1,24 +1,3 @@ -//testcase { -// input "x"; -// output "a1:{x}"; -// -// s = a1:: a -// a = s1:: s -// a = ^"x" -//} -// -//testcase { -// input "x"; -// output "x"; -// output "s2:{s2:{s0 s0} x}"; -// output "s2:{s0 x}"; -// -// -// s = s2:: s s -// s = ^"x" -// s = s0:: () -//} - testcase { input "aaaaa"; s = A @@ -26,22 +5,13 @@ testcase { | "a" A &~ "a" s } -//testcase { -// input "a"; -// output "yes:{}"; -// s = A -// A = "a" s &~ "a" A -// | "a" A &~ "a" s -// | () -//} - testcase { input "ab c"; output "1:{{a b} {c}}"; s = ids - ids = "1":: id (" " ids &~ id !((~[])*)) - | "2":: id ( ids &~ id !((~[])*)) + ids = "1":: id (" " ids &~ id ((~[])*)!) + | "2":: id ( ids &~ id ((~[])*)!) | id id = [a-z]++ } @@ -91,7 +61,7 @@ testcase { x = ~[] s = xbx:: x* b x* b = abab:: [ab][ab] - &~ ( "aa" | "bb" ) + &~ ("aa"|"bb") } testcase { @@ -217,23 +187,6 @@ testcase { idl = [a-d] } -//testcase { -// input "a*b*c"; -// output "times:{stringify:{{a}} times:{stringify:{{b}} stringify:{{c}}}}"; -// w = " " -// l = id -// s = l "=" r => "assign" -// | r -// r = l -// | l "=" r => "assign" -// | r "+" r => "plus" -// | (r) "*" r => "times" -// | "(" r ")" -// | r r => "times" -// id = idl++ => "stringify" -// idl = [a-d] -//} - testcase { input "a+b*c"; output "plus:{stringify:{{a}} times:{stringify:{{b}} stringify:{{c}}}}"; @@ -292,10 +245,10 @@ ww = sp* sp = " " any = (~[])* -s = smt:: !ws statement !ws statement !ws +s = smt:: ws! statement ws! statement ws! -block = !"\n" !indent blockBody - &~ !"\n" (" " !outdent " ") !(~[\ ]) !((~[])*) +block = "\n"! indent! blockBody + &~ "\n"! (" " outdent! " ") (~[\ ])! ((~[])*)! blockBody = statement > sbb:: statement ws blockBody @@ -319,14 +272,12 @@ keyword = "if" | "then" | "else" | "while" } - - testcase { input "abc "; s = s2:: q " "* q = a3:: [a-z] [a-z] [a-z] - &~ !(~[]) "b" !((~[])*) + &~ (~[])! "b" ((~[])*)! } testcase { @@ -364,7 +315,7 @@ testcase { Expr = if:: "if" "(" Expr ")" IfBody /ws | ident:: [a-z]++ IfBody = else:: Expr "else" Expr /ws - | then:: Expr &~ ((~[])* "else" !Expr /ws) + | then:: Expr &~ ((~[])* "else" Expr! /ws) ws = [ ]** } @@ -390,10 +341,55 @@ testcase { x = [123] } +// make sure follow restrictions are honored +// when a string matches the empty string +testcase { + input "xxx"; + s = x:: "x" A "x" C "x" + A = B + B = "y" + | () -> ~"x" + C = D -> ~"x" + D = () +} + +testcase { + input "axxxxxc"; + output "q:{a {x x x x x} c}"; + s = q:: A ws B? ws C + ws = [x]** + A = a:: "a" + B = b:: "b" + C = c:: "c" +} + +testcase { + input "aaaaaaaaaaaaaaaaaaaa"; + output ""; + s = As & AAs + As = () | As "a" + AAs = () | AAs "aa" +} +// pathological O(n^2) behavior testcase { - input "ab"; - - s = a:"a" b:"b" + input "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; + output "x"; + s = x:: ManyA! + ManyA = () + | x:: A ManyA + A = ()! ("a" & ManyAB) + ManyAB = () + | "a" ManyAB + | "b" ManyAB + } +// another O(n^2) example, tickles different epsilon behaviors +testcase { + input "aaaa"; + output "x:{x:{x:{x}}}"; + s = x:: s A! | () + A = "a" & B + B = () | B "a" +}