diff --git a/tests/core/tostring.cc b/tests/core/tostring.cc index 8ca878299..411c1271c 100644 --- a/tests/core/tostring.cc +++ b/tests/core/tostring.cc @@ -22,54 +22,95 @@ #include #include -#include #include #include -static void -syntax(char *prog) -{ - std::cerr << prog << " formula1" << std::endl; - exit(2); -} - -int -main(int argc, char **argv) -{ - if (argc != 2) - syntax(argv[0]); - +const char* inputs[] = { - auto pf1 = spot::parse_infix_psl(argv[1]); - if (pf1.format_errors(std::cerr)) - return 2; - auto f1 = pf1.f; + "a", + "1", + "0", + "a => b", + "G a ", + "a U b", + "a & b", + "a & b & c", + "b & a & b", + "b & a & a", + "a & b & (c |(f U g)| e)", + "b & a & a & (c | e |(f U g)| e | c) & b", + "a <=> b", + "a & b & (c |(f U g)| e)", + "b & a & a & (c | e |(g U g)| e | c) & b", + "F\"F1\"&G\"G\"&X\"X\"", + "GFfalse", + "GFtrue", + "p=0Uq=1Ut=1", + "F\"FALSE\"", + "G\"TruE\"", + "FFALSE", + "GTruE", + "p=0UFXp=1", + "GF\"\\GF\"", + "GF\"foo bar\"", + "FFG__GFF", + "X\"U\"", + "X\"W\"", + "X\"M\"", + "X\"R\"", + "{a;b;{c && d*};**}|=>G{a*:b*}", + "GF!{{a || c} && b}", + "GF!{{a || c*} && b}<>->{{!a}*}", + "GF{{a || c*} & b[*]}[]->{d}", + "{a[*2..3]}", + "{a[*0..1]}", + "{a[*0..]}", + "{a[*..]}", + "{a[*1..]}", + "{a[+]}", + "{[+]}", + "{a[*2..3][*4..5]}", + "{a**}<>->1", + }; - // The string generated from an abstract tree should be parsable - // again. - std::string f1s = spot::str_psl(f1); - std::cout << f1s << '\n'; +int main() +{ + for (const char* input: inputs) + { + { + auto pf1 = spot::parse_infix_psl(input); + if (pf1.format_errors(std::cerr)) + return 2; + auto f1 = pf1.f; - auto pf2 = spot::parse_infix_psl(f1s); - if (pf2.format_errors(std::cerr)) - return 2; - auto f2 = pf2.f; + // The string generated from an abstract tree should be parsable + // again. - // This second abstract tree should be equal to the first. + std::string f1s = spot::str_psl(f1); + std::cout << f1s << '\n'; - if (f1 != f2) - return 1; + auto pf2 = spot::parse_infix_psl(f1s); + if (pf2.format_errors(std::cerr)) + return 2; + auto f2 = pf2.f; - // It should also map to the same string. + // This second abstract tree should be equal to the first. - std::string f2s = spot::str_psl(f2); - std::cout << f2s << '\n'; + if (f1 != f2) + return 1; - if (f2s != f1s) - return 1; + // It should also map to the same string. + + std::string f2s = spot::str_psl(f2); + + if (f2s != f1s) + { + std::cerr << f1s << " != " << f2s << '\n'; + return 1; + } + } + assert(spot::fnode::instances_check()); } - - assert(spot::fnode::instances_check()); return 0; } diff --git a/tests/core/tostring.test b/tests/core/tostring.test index 928ee6ea3..e559ea198 100755 --- a/tests/core/tostring.test +++ b/tests/core/tostring.test @@ -1,6 +1,6 @@ #! /bin/sh # -*- coding: utf-8 -*- -# Copyright (C) 2009, 2010, 2011, 2013 Laboratoire de Recherche et +# Copyright (C) 2009, 2010, 2011, 2013, 2016 Laboratoire de Recherche et # Développement de l'Epita (LRDE). # Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6), # département Systèmes Répartis Coopératifs (SRC), Université Pierre @@ -28,50 +28,53 @@ set -e -run 0 ../tostring 'a' -run 0 ../tostring '1' -run 0 ../tostring '0' -run 0 ../tostring 'a => b' -run 0 ../tostring 'G a ' -run 0 ../tostring 'a U b' -run 0 ../tostring 'a & b' -run 0 ../tostring 'a & b & c' -run 0 ../tostring 'b & a & b' -run 0 ../tostring 'b & a & a' -run 0 ../tostring 'a & b & (c |(f U g)| e)' -run 0 ../tostring 'b & a & a & (c | e |(f U g)| e | c) & b' -run 0 ../tostring 'a <=> b' -run 0 ../tostring 'a & b & (c |(f U g)| e)' -run 0 ../tostring 'b & a & a & (c | e |(g U g)| e | c) & b' -run 0 ../tostring 'F"F1"&G"G"&X"X"' -run 0 ../tostring 'GFfalse' -run 0 ../tostring 'GFtrue' -run 0 ../tostring 'p=0Uq=1Ut=1' -run 0 ../tostring 'F"FALSE"' -run 0 ../tostring 'G"TruE"' -run 0 ../tostring 'FFALSE' -run 0 ../tostring 'GTruE' -run 0 ../tostring 'p=0UFXp=1' -run 0 ../tostring 'GF"\GF"' -run 0 ../tostring 'GF"foo bar"' -run 0 ../tostring 'FFG__GFF' -run 0 ../tostring 'X"U"' -run 0 ../tostring 'X"W"' -run 0 ../tostring 'X"M"' -run 0 ../tostring 'X"R"' +cat >expected < b +Ga +a U b +a & b +a & b & c +a & b +a & b +a & b & (c | e | (f U g)) +a & b & (c | e | (f U g)) +a <-> b +a & b & (c | e | (f U g)) +a & b & (c | e | g) +F"F1" & G"G" & X"X" +0 +1 +!p U (q U t) +F"FALSE" +G"TruE" +0 +1 +!p U FXp +GF"GF" +GF"foo bar" +FG__GFF +X"U" +X"W" +X"M" +X"R" +{a;b;{c && d[*]};[+]}[]-> G{a[*]:b[*]} +GF!(b & (a | c)) +GF!({b && {a | c[*]}}<>-> {{!a}[*]}) +GF({{a | c[*]} & b[*]}[]-> d) +{a[*2..3]} +{a[*0..1]} +{a[*]} +{a[*]} +{a[+]} +{a[+]} +{[+]} +{a[*8..15]} +{a[*]}! +EOF -run 0 ../tostring '{a;b;{c && d*};**}|=>G{a*:b*}' -run 0 ../tostring 'GF!{{a || c} && b}' -run 0 ../tostring 'GF!{{a || c*} && b}<>->{{!a}*}' -run 0 ../tostring 'GF{{a || c*} & b[*]}[]->{d}' -run 0 ../tostring '{a[*2..3]}' -run 0 ../tostring '{a[*0..1]}' -run 0 ../tostring '{a[*0..]}' -run 0 ../tostring '{a[*..]}' -run 0 ../tostring '{a[*1..]}' -run 0 ../tostring '{a[+]}' -run 0 ../tostring '{[+]}' -run 0 ../tostring '{a[*2..3][*4..5]}' +run 0 ../tostring >out -run 0 ../tostring '{a**}<>->1' > out -test "`sed 1q < out `" = '{a[*]}!' +diff expected out