spot/src/ltltest/kind.test
Alexandre Duret-Lutz e2f70e72b8 Fix translation of !{r}.
We need a marked version of !{r} to perform breakpoint unroling.

* src/ltlast/unop.cc, src/ltlast/unop.hh: Declare a NegClosureMarked
operator.
* src/ltlvisit/mark.hh, src/ltlvisit/mark.cc,
src/tgbaalgos/ltl2tgba_fm.cc: Adjust to deal with NegClosureMarked
and NegClosure as apropriate.
* src/ltlvisit/simplify.cc, src/ltlvisit/tostring.cc,
src/ltlvisit/tunabbrev.cc, src/tgbaalgos/eltl2tgba_lacim.cc,
src/tgbaalgos/ltl2taa.cc, src/tgbaalgos/ltl2tgba_lacim.cc,
src/tgba/formula2bdd.cc: Deal with NegClosureMarked in the same way as
we deal with NegClosure.
* src/tgbatest/ltl2tgba.test: More tests.
* src/ltltest/kind.test: Adjust.
* doc/tl/tl.tex: Mention the marked negated closure.
2012-05-12 12:21:41 +02:00

141 lines
4.8 KiB
Bash
Executable file

#! /bin/sh
# Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et Developement to
# l'Epita (LRDE).
#
# This file is part of Spot, a model checking library.
#
# Spot is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# Spot is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Spot; see the file COPYING. If not, write to the Free
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
# 02111-1307, USA.
# Check for the constant_term visitor
. ./defs || exit 1
set -e
check()
{
run 0 ../kind "$1" >out
read word rest <out
test "$word" = "$2"
}
check 'a' 'B&!xfLEPSFsgopr'
check 'a<->b' 'BxfLEPSFsgopr'
check '!a' 'B&!xfLEPSFsgopr'
check '!(a|b)' 'B&xfLEPSFsgopr'
check 'F(a)' '&!xLPegopr'
check 'G(a)' '&!xLPusopr'
check 'a U b' '&!xfLPgopr'
check 'a U Fb' '&!xLPegopr'
check 'Ga U b' '&!xLPopr'
check '1 U a' '&!xfLPegopr'
check 'a W b' '&!xfLPsopr'
check 'a W 0' '&!xfLPusopr'
check 'a M b' '&!xfLPgopr'
check 'a M 1' '&!xfLPegopr'
check 'a R b' '&!xfLPsopr'
check '0 R b' '&!xfLPusopr'
check 'a R (b R (c R d))' '&!xfLPsopr'
check 'a U (b U (c U d))' '&!xfLPgopr'
check 'a W (b W (c W d))' '&!xfLPsopr'
check 'a M (b M (c M d))' '&!xfLPgopr'
check 'Fa -> Fb' 'xLPopr'
check 'Ga -> Fb' 'xLPgopr'
check 'Fa -> Gb' 'xLPsopr'
check '(Ga|Fc) -> Fb' 'xLPopr'
check '(Ga|Fa) -> Gb' 'xLPopr'
check '{a;c*;b}|->!Xb' '&fPsopr'
check '{a;c*;b}|->X!b' '&!fPsopr'
check '{a;c*;b}|->!Fb' '&xPsopr'
check '{a;c*;b}|->G!b' '&!xPsopr'
check '{a;c*;b}|->!Gb' '&xPr'
check '{a;c*;b}|->F!b' '&!xPr'
check '{a;c*;b}|->GFa' '&!xPr'
check '{a;c*;b}|->FGa' '&!xP'
check '{a;c;b|(d;e)}|->!Xb' '&fPFsgopr'
check '{a;c;b|(d;e)}|->X!b' '&!fPFsgopr'
check '{a;c;b|(d;e)}|->!Fb' '&xPsopr'
check '{a;c;b|(d;e)}|->G!b' '&!xPsopr'
check '{a;c;b|(d;e)}|->!Gb' '&xPgopr'
check '{a;c;b|(d;e)}|->F!b' '&!xPgopr'
check '{a;c;b|(d;e)}|->GFa' '&!xPr'
check '{a;c;b|(d;e)}|->FGa' '&!xPp'
check '{a;c*;b}<>->!Gb' '&xPgopr'
check '{a;c*;b}<>->F!b' '&!xPgopr'
check '{a;c*;b}<>->FGb' '&!xPp'
check '{a;c*;b}<>->!GFb' '&xPp'
check '{a;c*;b}<>->GFb' '&!xP'
check '{a;c*;b}<>->!FGb' '&xP'
check '{a;c|d;b}<>->!Gb' '&xPgopr'
check '{a;c|d;b}<>->G!b' '&!xPsopr'
check '{a;c|d;b}<>->FGb' '&!xPp'
check '{a;c|d;b}<>->!GFb' '&xPp'
check '{a;c|d;b}<>->GFb' '&!xPr'
check '{a;c|d;b}<>->!FGb' '&xPr'
check '{a:b:c:d}!' 'B&!xfLEPSFsgopr' # Equivalent to a&b&c&d
check 'a&b&c&d' 'B&!xfLEPSFsgopr'
check '(Xa <-> XXXc) U (b & Fe)' 'LPgopr'
check '(!X(a|X(!b))&(FX(g xor h)))U(!G(a|b))' 'LPegopr'
check '(!X(a|X(!b))&(GX(g xor h)))R(!F(a|b))' 'LPusopr'
check '(!X(a|X(!b))&(GX(g xor h)))U(!G(a|b))' 'LPeopr'
check '(!X(a|X(!b))&(FX(g xor h)))R(!F(a|b))' 'LPuopr'
check '(!X(a|X(!b))&(GX(g xor h)))U(!F(a|b))' 'LPp'
check '(!X(a|X(!b))&(FX(g xor h)))R(!G(a|b))' 'LPr'
check '(!X(a|GXF(!b))&(FGX(g xor h)))U(!F(a|b))' 'LPp'
check '(!X(a|GXF(!b))&(FGX(g xor h)))R(!F(a|b))' 'LPup'
check '(!X(a|FXG(!b))&(GFX(g xor h)))R(!G(a|b))' 'LPr'
check '(!X(a|FXG(!b))&(GFX(g xor h)))U(!G(a|b))' 'LPer'
check '(!X(a|GXF(!b))&(FGX(g xor h)))U(!G(a|Fb))' 'LPep'
check '(!X(a|GXF(!b))&(FGX(g xor h)))U(!F(a|Gb))' 'LP'
check '(!X(a|FXG(!b))&(GFX(g xor h)))R(!F(a|Gb))' 'LPur'
check '(!X(a|FXG(!b))&(GFX(g xor h)))R(!G(a|Fb))' 'LP'
check 'GFa M GFb' '&!xLPeu'
check 'FGa M FGb' '&!xLPeup'
check 'Fa M GFb' '&!xLPer'
check 'GFa W GFb' '&!xLPeur'
check 'FGa W FGb' '&!xLPeu'
check 'Ga W FGb' '&!xLPup'
check 'Ga W b' '&!xLPsopr'
check 'Fa M b' '&!xLPgopr'
check '{a;b*;c}' '&!xfPsopr'
check '{a;b*;c}!' '&!xfPgopr'
check '!{a;b*;c}!' '&xfPsopr' # The negative normal form is {a;b*;c}[]->0
check '{a;b*;c}[]->0' '&!xfPsopr'
check '!{a;b*;c}' '&!xfPgopr'
run 0 ../consterm '1'
run 0 ../consterm '0'
run 1 ../consterm '[*0]'
run 1 ../consterm 'a*'
run 1 ../consterm '0*'
run 1 ../consterm 'a[*0]'
run 1 ../consterm 'a[*0..]'
run 1 ../consterm 'a[*0..3]'
run 0 ../consterm 'a[*1..3]'
run 0 ../consterm 'a[*3]'
run 1 ../consterm 'a[*..4][*3]'
run 0 ../consterm 'a[*1..4][*3]'
run 1 ../consterm 'a[*1..4][*0..3]'
run 0 ../consterm '((a ; b) + c)'
run 1 ../consterm '((a ; b) + [*0])'
run 0 ../consterm '((a ; b) + [*0]) & e'
run 1 ../consterm '((a ; b) + [*0]) & [*0]'
run 1 ../consterm '((a ; b) + [*0]) & (a* + b)'
run 1 ../consterm '{{a ; b} + {[*0]}} & {a* + b}' # test braces
run 1 ../consterm '(a + [*0]);(b + [*0]);(c + [*0])'
run 0 ../consterm '(a + [*0]);(b + e);(c + [*0])'
run 1 ../consterm '(a + [*0]);(b + e)*;(c + [*0])'