diff --git a/src/ltltest/.gitignore b/src/ltltest/.gitignore index 436b60d5e..568d222e4 100644 --- a/src/ltltest/.gitignore +++ b/src/ltltest/.gitignore @@ -8,6 +8,7 @@ parser.dot expect defs equals +nequals lunabbrev tunabbrev nenoform diff --git a/src/ltltest/Makefile.am b/src/ltltest/Makefile.am index 51455e8dd..e4c17523b 100644 --- a/src/ltltest/Makefile.am +++ b/src/ltltest/Makefile.am @@ -35,11 +35,11 @@ check_PROGRAMS = \ ltl2text \ ltlrel \ lunabbrev \ + nequals \ nenoform \ reduc \ reduccmp \ reduceu \ - reductau \ reductaustr \ syntimpl \ tostring \ @@ -48,31 +48,31 @@ check_PROGRAMS = \ unabbrevwm consterm_SOURCES = consterm.cc -equals_SOURCES = equals.cc +equals_SOURCES = equalsf.cc kind_SOURCES = kind.cc length_SOURCES = length.cc ltl2dot_SOURCES = readltl.cc ltl2dot_CPPFLAGS = $(AM_CPPFLAGS) -DDOTTY ltl2text_SOURCES = readltl.cc ltlrel_SOURCES = ltlrel.cc -lunabbrev_SOURCES = equals.cc +lunabbrev_SOURCES = equalsf.cc lunabbrev_CPPFLAGS = $(AM_CPPFLAGS) -DLUNABBREV -nenoform_SOURCES = equals.cc +nenoform_SOURCES = equalsf.cc nenoform_CPPFLAGS = $(AM_CPPFLAGS) -DNENOFORM +nequals_SOURCES = equalsf.cc +nequals_CPPFLAGS = $(AM_CPPFLAGS) -DNEGATE reduc_SOURCES = reduc.cc reduccmp_SOURCES = equalsf.cc reduccmp_CPPFLAGS = $(AM_CPPFLAGS) -DREDUC -reduceu_SOURCES = equals.cc +reduceu_SOURCES = equalsf.cc reduceu_CPPFLAGS = $(AM_CPPFLAGS) -DREDUC -DEVENT_UNIV -reductau_SOURCES = equals.cc -reductau_CPPFLAGS = $(AM_CPPFLAGS) -DREDUC_TAU reductaustr_SOURCES = equalsf.cc reductaustr_CPPFLAGS = $(AM_CPPFLAGS) -DREDUC_TAUSTR syntimpl_SOURCES = syntimpl.cc tostring_SOURCES = tostring.cc -tunabbrev_SOURCES = equals.cc +tunabbrev_SOURCES = equalsf.cc tunabbrev_CPPFLAGS = $(AM_CPPFLAGS) -DTUNABBREV -tunenoform_SOURCES = equals.cc +tunenoform_SOURCES = equalsf.cc tunenoform_CPPFLAGS = $(AM_CPPFLAGS) -DNENOFORM -DTUNABBREV unabbrevwm_SOURCES = equals.cc unabbrevwm_CPPFLAGS = $(AM_CPPFLAGS) -DWM diff --git a/src/ltltest/equals.test b/src/ltltest/equals.test index 3760fe867..665e5ab98 100755 --- a/src/ltltest/equals.test +++ b/src/ltltest/equals.test @@ -1,6 +1,6 @@ #! /bin/sh # -*- coding: utf-8 -*- -# Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et +# Copyright (C) 2009, 2010, 2011, 2012, 2014 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 @@ -25,181 +25,189 @@ # Check for the equals visitor . ./defs || exit 1 +set -e +cat >equal.txt <<\EOF # A few things which are equal -run 0 ../equals 'a' 'a' -run 0 ../equals '~a' '!a' -run 0 ../equals '1' '1' -run 0 ../equals '0' '0' -run 0 ../equals 'a => b' 'a --> b' -run 0 ../equals 'a <-> b' 'a <--> b' -run 0 ../equals 'G a ' ' G a' -run 0 ../equals 'a U b' 'a U b' -run 0 ../equals 'a & b' 'a & b' -run 0 ../equals 'a & b' 'b & a' -run 0 ../equals 'a & b & c' 'c & a && b' -run 0 ../equals 'a & b & c' 'b & c & a' -run 0 ../equals 'a && b & a' 'b & a & b' -run 0 ../equals 'a & b' 'b & a & b' -run 0 ../equals 'a & b' 'b & a & a' -run 0 ../equals 'a & b & (c |(f U g)|| e)' \ - 'b & a & a & (c | e |(f U g)| e | c) & b' -run 0 ../equals 'a & a' 'a' -run 0 ../equals 'a & a & true' 'a' -run 0 ../equals 'a & false & a' 'false' -run 0 ../equals 'a | false | a' 'a' -run 0 ../equals 'true | a | a' 'true' -run 0 ../equals 'Ga=1*Gb=0' '(G(a)) & (G(!b))' - -# other formulae which are not -run 1 ../equals 'a' 'b' -run 1 ../equals '1' '0' -run 1 ../equals 'a => b' 'b => a' -run 1 ../equals 'a => b' 'a <=> b' -run 1 ../equals 'a => b' 'a U b' -run 1 ../equals 'a R b' 'a U b' -run 1 ../equals 'a & b & c' 'c & a' -run 1 ../equals 'b & c' 'c & a & b' -run 1 ../equals 'a & b & (c |(f U g)| e)' \ - 'b & a & a & (c | e |(g U g)| e | c) & b' -run 1 ../equals '{a*}' '{a*}<>->1' -run 1 ../equals '!{a*}' '{a*}<>->1' -run 1 ../equals '{a*}' '{a*}!' -run 1 ../equals '!{a*}' '{a*}!' - +a, a +~a, !a +1, 1 +0, 0 +a => b, a --> b +a <-> b, a <--> b +G a , G a +a U b, a U b +a & b, a & b +a & b, b & a +a & b & c, c & a && b +a & b & c, b & c & a +a && b & a, b & a & b +a & b, b & a & 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 & a, a +a & a & true, a +a & false & a, false +a | false | a, a +true | a | a, true +Ga=1*Gb=0, (G(a)) & (G(!b)) +FFx, Fx +FFFFFx, Fx +GGx, Gx +GGGGGx, Gx +!!x, x +!!!!!x, !x +{[*0];x}<>->1, {x}<>->1 +{x;[*0]}<>->1, {x}<>-> 1 +{[*0];x;[*0];[*0]}<>->1, {x}<>->1 +{[*0];x;[*0];x;[*0]}<>->1, {x;x}<>->1 +{x;x;x;[*0];x;x}<>->1, {x;x;x;x;x}<>->1 +{x;0;x;x;x}<>->1, 0 +{x;0;x;x;x}[]->1, 1 +{0*;1}<>->x, x +{[*0]*;1}<>->x, x +{x;x}<>->FF(0), 0 +{x;x}<>->GX(1), {x;x}<>->1 +{x;x}[]->GX(1), 1 +{x;x}[]->FF(0), {x;x}[]->0 +{x;x}[]->y, {x;x}|->y +{x;x}[]->y, {x;x}(y) +{a*}!, {a*}<>->1 +{a -> b} (c), !(a->b)|c +{a & !b}!, a & !b +{a;[*0]}|->!Xb, !a | !Xb +{{a;b}:b:c:d*:e:f}!, {{a;b}:{b && c }:d[*]:{e && f}}! +{a:b:c}|->!Xb, !(a&&b&&c) | !Xb +{a:b:c*}|->!Xb, {(a&&b):c*}|-> !Xb +{a&b&c*}|->!Xb, {(a&&b)&c*}|-> !Xb +{[*]&&a&&[*]}!, a +{[*]||a||[*]}!, {[*]}! +{0&{f;g*}}!, 0 +{1&{f;g*}}!, {f;g*}! # Precedence -run 0 ../equals 'a & b ^ c | d' 'd | c ^ b & a' +a & b ^ c | d, d | c ^ b & a # Corner cases parsing -run 0 ../equals 'FFG__GFF' 'F(F(G("__GFF")))' +FFG__GFF, F(F(G("__GFF"))) # Trivial simplifications -run 0 ../equals '{0*}<>->a' '{[*0]}<>->a' -run 0 ../equals '{[*0]*}<>->a' '{[*0]}<>->a' -run 0 ../equals '{Exp**}<>->a' '{Exp*}<>->a' -run 0 ../equals 'FF(Exp)' 'F(Exp)' -run 0 ../equals 'GG(Exp)' 'G(Exp)' -run 0 ../equals 'F(0)' '0' -run 0 ../equals 'G(0)' '0' -run 0 ../equals 'F(1)' '1' -run 0 ../equals 'G(1)' '1' -run 0 ../equals 'F({[*0]}<>->1)' 'F({[*0]}<>->1)' -run 0 ../equals 'G({[*0]}<>->1)' 'G({[*0]}<>->1)' -run 0 ../equals 'F({1}<>->1)' '1' -run 0 ../equals 'G({1}<>->1)' '1' -run 0 ../equals '!1' '0' -run 0 ../equals '!0' '1' -run 0 ../equals '!!Exp' 'Exp' +{0*}<>->a, {[*0]}<>->a +{[*0]*}<>->a, {[*0]}<>->a +{Exp**}<>->a, {Exp*}<>->a +FF(Exp), F(Exp) +GG(Exp), G(Exp) +F(0), 0 +G(0), 0 +F(1), 1 +G(1), 1 +F({[*0]}<>->1), F({[*0]}<>->1) +G({[*0]}<>->1), G({[*0]}<>->1) +F({1}<>->1), 1 +G({1}<>->1), 1 +!1, 0 +!0, 1 +!!Exp, Exp -run 0 ../equals '(1 => Exp)' 'Exp' -run 0 ../equals '(0 => Exp)' '1' -run 0 ../equals '(Exp => 1)' '1' -run 0 ../equals '(Exp => 0)' '!Exp' -run 0 ../equals '(Exp => Exp)' '1' -run 0 ../equals '(1 ^ Exp)' '!Exp' -run 0 ../equals '(0 ^ Exp)' 'Exp' -run 0 ../equals '(Exp ^ Exp)' '0' -run 0 ../equals '(0 <=> Exp)' '!Exp' -run 0 ../equals '(1 <=> Exp)' 'Exp' -run 0 ../equals '(Exp <=> Exp)' '1' -run 0 ../equals '(Exp U 1)' '1' -run 0 ../equals '(Exp U 0)' '0' -run 0 ../equals '(0 U Exp)' 'Exp' -run 0 ../equals '(Exp U Exp)' 'Exp' -run 0 ../equals '(Exp R 1)' '1' -run 0 ../equals '(Exp R 0)' '0' -run 0 ../equals '(Exp R Exp)' 'Exp' -run 0 ../equals '(1 R Exp)' 'Exp' -run 0 ../equals '(Exp W 1)' '1' -run 0 ../equals '(0 W Exp)' 'Exp' -run 0 ../equals '(1 W Exp)' '1' -run 0 ../equals '(Exp W Exp)' 'Exp' -run 0 ../equals '(Exp M 0)' '0' -run 0 ../equals '(1 M Exp)' 'Exp' -run 0 ../equals '(0 M Exp)' '0' -run 0 ../equals '(Exp M Exp)' 'Exp' +(1 => Exp), Exp +(0 => Exp), 1 +(Exp => 1), 1 +(Exp => 0), !Exp +(Exp => Exp), 1 +(1 ^ Exp), !Exp +(0 ^ Exp), Exp +(Exp ^ Exp), 0 +(0 <=> Exp), !Exp +(1 <=> Exp), Exp +(Exp <=> Exp), 1 +(Exp U 1), 1 +(Exp U 0), 0 +(0 U Exp), Exp +(Exp U Exp), Exp +(Exp R 1), 1 +(Exp R 0), 0 +(Exp R Exp), Exp +(1 R Exp), Exp +(Exp W 1), 1 +(0 W Exp), Exp +(1 W Exp), 1 +(Exp W Exp), Exp +(Exp M 0), 0 +(1 M Exp), Exp +(0 M Exp), 0 +(Exp M Exp), Exp + +{1:{a;b}:1:c*}!, {{a;b}:c*}! +{c*:1:{a;b}:1}!, {c*:{a;b}}! + +{z;a*;b*;*;c;d;*;b*;e;a*;*;b*}, {z;[*];c;d;[*];e;[*]} +{((a;b)|[*0]);[*];c}!, {[*];c}! +{a;a;a*;a;b;b[*];c[*2:3];c[*4:5]}, {a[*3..];b[+];c[*6..8]} + +{a[*0]}, {[*0]} +{a[*..]}, {a[*]} +{a[*2..3][*4..5]}, {a[*8..15]} +{a[*4..5][*2..3]}, {a[*4..5][*2..3]} +{a[*2:3][*]}, {a[*2 to 3][*]} +{a[*1..3][*]}, {a[*]} +{a[*][*2..3]}, {a[*]} +{a[*..3][*2]}, {a[*..6]} +{a[*..3][*to2]}, {a[*:6]} +{a[*..3][*2..$]}, {a[*]} +{a[*..3][*2:]}, {a[*:inf]} +{a[*1..]}, {a[+]} +{a[*1]}, {a} +{a[+][*1..3]}, {a[+]} +{a[*1..3][+]}, {a[+]} +{[*2][+]}, {[*2][+]} +{[+][*2]}, {[*2..inf]} + +{0[=2]}, 0 +{0[=2..]}, 0 +{0[=1..10]}, 0 +{0[=0]}, {[*]} +{0[=0..10]}, {*} +{0[=0..]}, {*} +{1[=0]}, {[*0]} +{1[=1..2]}, {[*1\,2]} +{1[=..4]}, {1[*..4]} +{b[=0]}, {(!b)[*]} +{b[=0to$]}, {*} + +{0[->10..100];b}, 0 +{0[->1..];b}, 0 +{0[->0\,100];b}, b +{0[->0..$];b}, b +!{1[->0];b}, !b +{1[->10\,20];b}, {[*10..20];b} +{1[->..];b}, {[*1..];b} +{{a&!c}[->0];b}, b +EOF + + +cat >nequal.txt <<\EOF +# other formulae which are not +a, b +1, 0 +a => b, b => a +a => b, a <=> b +a => b, a U b +a R b, a U b +a & b & c, c & a +b & c, c & a & b +a & b & (c |(f U g)| e), b & a & a & (c | e |(g U g)| e | c) & b +{a*}, {a*}<>->1 +!{a*}, {a*}<>->1 +{a*}, {a*}! +!{a*}, {a*}! -run 0 ../equals FFx Fx -run 0 ../equals FFFFFx Fx -run 0 ../equals GGx Gx -run 0 ../equals GGGGGx Gx -run 0 ../equals '!!x' x -run 0 ../equals '!!!!!x' '!x' -run 0 ../equals '{[*0];x}<>->1' '{x}<>->1' -run 0 ../equals '{x;[*0]}<>->1' '{x}<>-> 1' -run 0 ../equals '{[*0];x;[*0];[*0]}<>->1' '{x}<>->1' -run 0 ../equals '{[*0];x;[*0];x;[*0]}<>->1' '{x;x}<>->1' -run 0 ../equals '{x;x;x;[*0];x;x}<>->1' '{x;x;x;x;x}<>->1' -run 0 ../equals '{x;0;x;x;x}<>->1' '0' -run 0 ../equals '{x;0;x;x;x}[]->1' '1' -run 0 ../equals '{0*;1}<>->x' 'x' -run 0 ../equals '{[*0]*;1}<>->x' 'x' -run 0 ../equals '{x;x}<>->FF(0)' '0' -run 0 ../equals '{x;x}<>->GX(1)' '{x;x}<>->1' -run 0 ../equals '{x;x}[]->GX(1)' '1' -run 0 ../equals '{x;x}[]->FF(0)' '{x;x}[]->0' -run 0 ../equals '{x;x}[]->y' '{x;x}|->y' -run 0 ../equals '{x;x}[]->y' '{x;x}(y)' -run 0 ../equals '{a*}!' '{a*}<>->1' -run 0 ../equals '{a -> b} (c)' '!(a->b)|c' -run 0 ../equals '{a & !b}!' 'a & !b' -run 0 ../equals '{a;[*0]}|->!Xb' '!a | !Xb' -run 0 ../equals '{{a;b}:b:c:d*:e:f}!' '{{a;b}:{b && c }:d[*]:{e && f}}!' -run 0 ../equals '{a:b:c}|->!Xb' '!(a&&b&&c) | !Xb' -run 0 ../equals '{a:b:c*}|->!Xb' '{(a&&b):c*}|-> !Xb' -run 0 ../equals '{a&b&c*}|->!Xb' '{(a&&b)&c*}|-> !Xb' -run 0 ../equals '{[*]&&a&&[*]}!' 'a' -run 0 ../equals '{[*]||a||[*]}!' '{[*]}!' -run 0 ../equals '{0&{f;g*}}!' '0' -run 0 ../equals '{1&{f;g*}}!' '{f;g*}!' # 1 should not be removed in the following two formulae -run 1 ../equals '{1&{g*}}!' '{g*}!' -run 1 ../equals '{1|{b;c}}<>->a' '{b;c}<>->a' -run 0 ../equals '{1:{a;b}:1:c*}!' '{{a;b}:c*}!' -run 0 ../equals '{c*:1:{a;b}:1}!' '{c*:{a;b}}!' +{1&{g*}}!, {g*}! +{1|{b;c}}<>->a, {b;c}<>->a # make sure twin arguments are not reduced in Fusion. -run 1 ../equals '{(a;!a)*:(a;!a)*:b}!' '{(a;!a)*:b}!' +{(a;!a)*:(a;!a)*:b}!, {(a;!a)*:b}! # make sure 1:a* is not reduced to a*. -run 1 ../equals '{(1:a*);b}!' '{a*;b}!' -run 0 ../equals '{z;a*;b*;*;c;d;*;b*;e;a*;*;b*}' '{z;[*];c;d;[*];e;[*]}' -run 0 ../equals '{((a;b)|[*0]);[*];c}!' '{[*];c}!' -run 0 ../equals '{a;a;a*;a;b;b[*];c[*2:3];c[*4:5]}' '{a[*3..];b[+];c[*6..8]}' +{(1:a*);b}!, {a*;b}! +EOF -run 0 ../equals '{a[*0]}' '{[*0]}' -run 0 ../equals '{a[*..]}' '{a[*]}' -run 0 ../equals '{a[*2..3][*4..5]}' '{a[*8..15]}' -run 0 ../equals '{a[*4..5][*2..3]}' '{a[*4..5][*2..3]}' -run 0 ../equals '{a[*2:3][*]}' '{a[*2 to 3][*]}' -run 0 ../equals '{a[*1..3][*]}' '{a[*]}' -run 0 ../equals '{a[*][*2..3]}' '{a[*]}' -run 0 ../equals '{a[*..3][*2]}' '{a[*..6]}' -run 0 ../equals '{a[*..3][*to2]}' '{a[*:6]}' -run 0 ../equals '{a[*..3][*2..$]}' '{a[*]}' -run 0 ../equals '{a[*..3][*2:]}' '{a[*:inf]}' -run 0 ../equals '{a[*1..]}' '{a[+]}' -run 0 ../equals '{a[*1]}' '{a}' -run 0 ../equals '{a[+][*1..3]}' '{a[+]}' -run 0 ../equals '{a[*1..3][+]}' '{a[+]}' -run 0 ../equals '{[*2][+]}' '{[*2][+]}' -run 0 ../equals '{[+][*2]}' '{[*2..inf]}' - -run 0 ../equals '{0[=2]}' '0' -run 0 ../equals '{0[=2..]}' '0' -run 0 ../equals '{0[=1..10]}' '0' -run 0 ../equals '{0[=0]}' '{[*]}' -run 0 ../equals '{0[=0..10]}' '{*}' -run 0 ../equals '{0[=0..]}' '{*}' -run 0 ../equals '{1[=0]}' '{[*0]}' -run 0 ../equals '{1[=1..2]}' '{[*1,2]}' -run 0 ../equals '{1[=..4]}' '{1[*..4]}' -run 0 ../equals '{b[=0]}' '{(!b)[*]}' -run 0 ../equals '{b[=0to$]}' '{*}' - -run 0 ../equals '{0[->10..100];b}' '0' -run 0 ../equals '{0[->1..];b}' '0' -run 0 ../equals '{0[->0,100];b}' 'b' -run 0 ../equals '{0[->0..$];b}' 'b' -run 0 ../equals '!{1[->0];b}' '!b' -run 0 ../equals '{1[->10,20];b}' '{[*10..20];b}' -run 0 ../equals '{1[->..];b}' '{[*1..];b}' -run 0 ../equals '{{a&!c}[->0];b}' 'b' +run 0 ../equals equal.txt +run 0 ../nequals nequal.txt diff --git a/src/ltltest/equalsf.cc b/src/ltltest/equalsf.cc index f4a345814..b33a8c7dd 100644 --- a/src/ltltest/equalsf.cc +++ b/src/ltltest/equalsf.cc @@ -58,6 +58,11 @@ main(int argc, char** argv) if (argc != 2) syntax(argv[0]); std::ifstream input(argv[1]); + if (!input) + { + std::cerr << "failed to open " << argv[1] << '\n'; + return 2; + } std::string s; unsigned line = 0; @@ -72,7 +77,16 @@ main(int argc, char** argv) std::istringstream ss(s); std::string form; while (std::getline(ss, form, ',')) - formulas.push_back(form); + { + std::string tmp; + while (form.size() > 0 && form.back() == '\\' + && std::getline(ss, tmp, ',')) + { + form.back() = ','; + form += tmp; + } + formulas.push_back(form); + } } unsigned size = formulas.size(); @@ -226,6 +240,9 @@ main(int argc, char** argv) exit_code = 1; } +#if NEGATE + exit_code ^= 1; +#endif if (exit_code) { spot::ltl::dump(std::cerr, f1) << std::endl; diff --git a/src/ltltest/eventuniv.test b/src/ltltest/eventuniv.test index 304e3c903..91d15489d 100755 --- a/src/ltltest/eventuniv.test +++ b/src/ltltest/eventuniv.test @@ -19,42 +19,46 @@ # along with this program. If not, see . . ./defs || exit 1 +set -e -check() -{ - run 0 ../reduceu "$@" -} +cat >reduceu.txt <lunabbrev.txt< F G(b)' '!GFa | F Gb' -run 0 ../lunabbrev '!a <-> Xb' '(Xb & !a) | (!!a & !Xb)' -run 0 ../lunabbrev '(a ^ b) | (b ^ c)' \ - '(c & !b) | (!c & b) | (a & !b) | (!a & b)' +a ^ b, (a & !b) | (!a & b) +a ^ Xb, (!Xb & a) | (!a & Xb) | (Xb & !a) +GF a => F G(b), !GFa | F Gb +!a <-> Xb, (Xb & !a) | (!!a & !Xb) +(a ^ b) | (b ^ c), (c & !b) | (!c & b) | (a & !b) | (!a & b) +EOF + +run 0 ../lunabbrev lunabbrev.txt diff --git a/src/ltltest/nenoform.test b/src/ltltest/nenoform.test index 70bae63fc..737ab16ac 100755 --- a/src/ltltest/nenoform.test +++ b/src/ltltest/nenoform.test @@ -1,6 +1,7 @@ #! /bin/sh -# Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement -# de l'Epita (LRDE). +# -*- coding: utf-8 -*- +# Copyright (C) 2009, 2010, 2011, 2014 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 # et Marie Curie. @@ -27,44 +28,46 @@ set -e +cat >nenoform.txt< FGb' 'FG!a || FGb' +a, a +1, 1 +0, 0 +!a, !a +a U b, a U b +a & b, a & b +a & b, b & a +a & !b & c, c & a & !b +a & b & c, b & c & a +Xa & b & Xa, b & Xa & b +a & b, b & a & b +a & !b, !b & a & a +a & b & (Xc |(f U !g)| e), b & a & a & (Xc | e |(f U !g)| e | Xc) & b +GFa => FGb, FG!a || FGb # Basic rewritings -run 0 ../nenoform '!!a' 'a' -run 0 ../nenoform '!!!!!a' '!a' -run 0 ../nenoform '!Xa' 'X!a' -run 0 ../nenoform '!Fa' 'G!a' -run 0 ../nenoform '!Ga' 'F!a' -run 0 ../nenoform '!(a ^ b)' '!a&!b | a&b' -run 0 ../nenoform '!(a <=> b)' '(!a&b) | a&!b' -run 0 ../nenoform '!(a => b)' 'a&!b' -run 0 ../nenoform '!(!a => !b)' '!a&b' -run 0 ../nenoform '!(a U b)' '!a R !b' -run 0 ../nenoform '!(a R b)' '!a U !b' -run 0 ../nenoform '!(!a R !b)' 'a U b' -run 0 ../nenoform '!(a & b & c & d & b)' '!a | !b | !c | !d' -run 0 ../nenoform '!(a | b | c | d)' '!a & !b & !c & !d' +!!a, a +!!!!!a, !a +!Xa, X!a +!Fa, G!a +!Ga, F!a +!(a ^ b), !a&!b | a&b +!(a <=> b), (!a&b) | a&!b +!(a => b), a&!b +!(!a => !b), !a&b +!(a U b), !a R !b +!(a R b), !a U !b +!(!a R !b), a U b +!(a & b & c & d & b), !a | !b | !c | !d +!(a | b | c | d), !a & !b & !c & !d # Nested rewritings -run 0 ../nenoform '!(a U (!b U ((a & b & c) R d)))' \ - '!a R (b R ((!a | !b | !c) U !d))' -run 0 ../nenoform '!(GF a => FG b)' 'GFa & GF!b' +!(a U (!b U ((a & b & c) R d))), !a R (b R ((!a | !b | !c) U !d)) +!(GF a => FG b), GFa & GF!b # Rational operators -run 0 ../nenoform '!X{a;b}<>->Fx' 'X{a;b}[]->G!x' -run 0 ../nenoform '!F({a*}<>->{b*}<>->c)' 'G({a*}[]->{b*}[]->!c)' +!X{a;b}<>->Fx, X{a;b}[]->G!x +!F({a*}<>->{b*}<>->c), G({a*}[]->{b*}[]->!c) +EOF + +run 0 ../nenoform nenoform.txt diff --git a/src/ltltest/parseerr.test b/src/ltltest/parseerr.test index 9c3fad466..141029e13 100755 --- a/src/ltltest/parseerr.test +++ b/src/ltltest/parseerr.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, 2014 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 @@ -26,6 +26,7 @@ # resulting tree looks like. . ./defs || exit 1 +set -e check() { @@ -64,33 +65,36 @@ check '' '' check '+' '' check '/2/3/4/5 a + b /6/7/8/' '' + +cat >recover.txt < h)' 'a U b U e R f' -run 0 ../equals -E 'a U ((c) U e) R (<=> f g)' 'a U ((c) U e) R (0)' +a U (b c) U e R (f g <=> h), a U b U e R f +a U ((c) U e) R (<=> f g), a U ((c) U e) R (0) # Missing parentheses -run 0 ../equals -E 'a & (a + b' 'a & (a + b)' -run 0 ../equals -E 'a & (a + b c' 'a & (a + b)' -run 0 ../equals -E 'a & (+' 'a & 0' -run 0 ../equals -E 'a & (' 'a & 0' +a & (a + b, a & (a + b) +a & (a + b c, a & (a + b) +a & (+, a & 0 +a & (, a & 0 # Invalid ranges -run 0 ../equals -E '{a[*8..1];b}' '{a[*1..8];b}' -run 0 ../equals -E '{a[=8..1];b}' '{a[=1..8];b}' -run 0 ../equals -E '{a[->8..1];b}' '{a[->1..8];b}' -run 0 ../equals -E '{a[->..0];b}' '{a[->0..1];b}' - +{a[*8..1];b}, {a[*1..8];b} +{a[=8..1];b}, {a[=1..8];b} +{a[->8..1];b}, {a[->1..8];b} +{a[->..0];b}, {a[->0..1];b} +EOF +run 0 ../equals -E recover.txt check 'a - b' 'AP(a)' '>>> a - b ^ diff --git a/src/ltltest/tunabbrev.test b/src/ltltest/tunabbrev.test index b80230846..dfb733a9f 100755 --- a/src/ltltest/tunabbrev.test +++ b/src/ltltest/tunabbrev.test @@ -1,9 +1,10 @@ #! /bin/sh -# Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement +# -*- coding: utf-8- +# Copyright (C) 2009, 2010, 2014 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 -# et Marie Curie. +# Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 +# (LIP6), département Systèmes Répartis Coopératifs (SRC), Université +# Pierre et Marie Curie. # # This file is part of Spot, a model checking library. # @@ -27,32 +28,33 @@ set -e +cat >tunabbrev.txt< Xb' '(Xb & !a) | (!!a & !Xb)' -run 0 ../tunabbrev '(a ^ b) | (b ^ c)' \ - '(c & !b) | (!c & b) | (a & !b) | (!a & b)' +a ^ b, (a & !b) | (!a & b) +a ^ Xb, (!Xb & a) | (!a & Xb) | (Xb & !a) +!a <-> Xb, (Xb & !a) | (!!a & !Xb) +(a ^ b) | (b ^ c), (c & !b) | (!c & b) | (a & !b) | (!a & b) # LTL unabbreviations: -run 0 ../tunabbrev 'G a ' 'false R a' -run 0 ../tunabbrev 'GF a => F G(b)' \ - '!(false R (true U a)) | (true U (false V b))' -run 0 ../tunabbrev 'GGGGa' 'false V a' -run 0 ../tunabbrev 'FFFfalse' '0' -run 0 ../tunabbrev 'FFFf' 'true U f' +G a , false R a +GF a => F G(b), !(false R (true U a)) | (true U (false V b)) +GGGGa, false V a +FFFfalse, 0 +FFFf, true U f +EOF + +run 0 ../tunabbrev tunabbrev.txt diff --git a/src/ltltest/tunenoform.test b/src/ltltest/tunenoform.test index 9c23c0b3a..b900ed447 100755 --- a/src/ltltest/tunenoform.test +++ b/src/ltltest/tunenoform.test @@ -1,8 +1,9 @@ #! /bin/sh -# Copyright (C) 2009 Laboratoire de Recherche et Développement +# -*- coding: utf-8 -*- +# Copyright (C) 2009, 2014 Laboratoire de Recherche et Développement # de l'Epita (LRDE). # Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6), -# département Systèmes Répartis Coopératifs (SRC), Université Pierre +# département Systèmes Répartis Coopératifs (SRC), Université Pierre # et Marie Curie. # # This file is part of Spot, a model checking library. @@ -27,10 +28,14 @@ set -e -run 0 ../tunenoform '!(a ^ b)' '(a|!b) & (!a|b)' -run 0 ../tunenoform '!(a <=> b)' '(a|b) & (!a|!b)' -run 0 ../tunenoform '!(a => b)' 'a&!b' -run 0 ../tunenoform '!(!a => !b)' '!a&b' -run 0 ../tunenoform '!Fa' 'false R !a' -run 0 ../tunenoform '!G!a' 'true U a' -run 0 ../tunenoform '!(GF a => FG b)' '(0 R (1 U a)) & (0 R (1 U !b))' +cat >tunenoform.txt< b), (a|b) & (!a|!b) +!(a => b), a&!b +!(!a => !b), !a&b +!Fa, false R !a +!G!a, true U a +!(GF a => FG b), (0 R (1 U a)) & (0 R (1 U !b)) +EOF + +run 0 ../tunenoform tunenoform.txt