#!/bin/sh # -*- coding: utf-8 -*- # Copyright (C) 2016-2019, 2023 Laboratoire de Recherche # et Développement de 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 3 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 this program. If not, see . . ./defs set -e # The --accept-word option filters automata that accept the given word # If several words are given, it filters automata that accept ALL words ltl2tgba 'G!a' | autfilt --accept-word 'b; cycle{!a}' -q ltl2tgba 'a U b' | autfilt --accept-word 'a; a; cycle{b}' -q ltl2tgba 'F(!a&b)' | autfilt --accept-word 'b; cycle{b; !a&b}' --accept-word 'cycle{b}' -q ltl2tgba -f 'a U b' | autfilt --accept-word='cycle{!a}' --accept-word='a;cycle{b}' -q ltl2tgba -f 'a U b' | autfilt --accept-word='cycle{!b}' -q && exit 1 # An example from the documentation: randltl -n -1 a b | ltlfilt --simplify --uniq | ltl2tgba | autfilt --accept-word='a&!b;cycle{!a&!b}' --accept-word='!a&!b;cycle{a&b}' \ --reject-word='cycle{b}' --stats=%M -n 3 > out cat >expect < out diff out expect # Test syntax errors autfilt --reject-w='foobar' error && exit 1 autfilt --accept-w='cycle{foo' >error && exit 1 cat error cat >expect <>> foobar ^ A twa_word must contain a cycle autfilt: failed to parse the argument of --accept-word: >>> cycle{foo ^ Missing ';' or '}' after formula EOF diff expect error ltl2tgba 'a U b' | autfilt -H1.1 --highlight-word='cycle{b}' >out cat >expected < GF(b & XXb)) & GFc' > aut.hoa word='!a&!c;cycle{!a&b&!c;!a&c;!a&b&c}' autfilt -H1.1 aut.hoa --highlight-word="$word" > out.hoa grep spot.highlight.edges out.hoa >out.edges cat >expected <out cat >expected <stderr && exit 1 test $? -eq 2 cat stderr grep 'failed to parse the argument of --highlight-word' stderr done # highlight-word used not to work with Fin acceptance, but it's ok now ltl2tgba -G -D 'FGa' | autfilt --highlight-word='cycle{a}' ltlfilt -f 'GFa' --accept-word 'cycle{!a}' && exit 1 ltlfilt -f 'GF!a' --accept-word 'cycle{!a}' cat >input < c {first_match(a ##[2:3] b)} |-> c EOF test 2 = `ltlfilt -c input --accept-word 'a;!b&!c;!b&!c;b&c;cycle{1}'` test 2 = `ltlfilt -c input --accept-word 'a;!b&!c;b&c;cycle{1}'` test 0 = `ltlfilt -c input --accept-word 'a;!b;b&!c;b&c;cycle{1}'` test 2 = `ltlfilt -c input --accept-word 'a;!b;b&c;b&c;cycle{1}'` test 1 = `ltlfilt -c input --accept-word 'a;!b;b&c;b&!c;cycle{1}'` L='ltlfilt -c input --accept-word' cat >input < e {first_match(a ##[2:3] b):first_match(c ##[1:2] d)} |-> e EOF test 2 = `$L 'a;!b&!c;!b&!c;b&c;b&c&d&e;cycle{1}'` test 1 = `$L 'a;!b&!c;!b&!c;b&c;b&c&d&e;b&c&d&!e;cycle{1}'` test 1 = `$L 'a;!b&!c;b&c;b&c&d&e;b&c&d&!e;cycle{1}'`