bin: add -0 option for LTL output
* src/bin/common_output.cc: Add option -0. * src/tests/ltlfilt.test: Test it. * NEWS: Document it.
This commit is contained in:
parent
a44e1bf325
commit
e026766219
3 changed files with 35 additions and 11 deletions
5
NEWS
5
NEWS
|
|
@ -117,7 +117,10 @@ New in spot 1.99b (not yet released)
|
||||||
the same %-escape sequences that are available for --stats or
|
the same %-escape sequences that are available for --stats or
|
||||||
--format.
|
--format.
|
||||||
|
|
||||||
- All tools that output automata have a --check option that
|
- all tools that output formulas have a -0 option to separate
|
||||||
|
formulas with \0. This helps in conjunction with xargs -0.
|
||||||
|
|
||||||
|
- all tools that output automata have a --check option that
|
||||||
request extra checks to be performed on the output to fill
|
request extra checks to be performed on the output to fill
|
||||||
in properties values for the HOA format. This options
|
in properties values for the HOA format. This options
|
||||||
implies -H for HOA output. For instance
|
implies -H for HOA output. For instance
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ enum {
|
||||||
output_format_t output_format = spot_output;
|
output_format_t output_format = spot_output;
|
||||||
bool full_parenth = false;
|
bool full_parenth = false;
|
||||||
bool escape_csv = false;
|
bool escape_csv = false;
|
||||||
|
char output_terminator = '\n';
|
||||||
|
|
||||||
static const argp_option options[] =
|
static const argp_option options[] =
|
||||||
{
|
{
|
||||||
|
|
@ -58,6 +59,9 @@ static const argp_option options[] =
|
||||||
"send output to a file named FORMAT instead of standard output. The"
|
"send output to a file named FORMAT instead of standard output. The"
|
||||||
" first formula sent to a file truncates it unless FORMAT starts"
|
" first formula sent to a file truncates it unless FORMAT starts"
|
||||||
" with '>>'.", 0 },
|
" with '>>'.", 0 },
|
||||||
|
{ "zero-terminated-output", '0', 0, 0,
|
||||||
|
"separate output formulas with \\0 instead of \\n "
|
||||||
|
"(for use with xargs -0)", 0 },
|
||||||
{ 0, 0, 0, 0, 0, 0 }
|
{ 0, 0, 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -212,6 +216,9 @@ parse_opt_output(int key, char* arg, struct argp_state*)
|
||||||
// This switch is alphabetically-ordered.
|
// This switch is alphabetically-ordered.
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
|
case '0':
|
||||||
|
output_terminator = 0;
|
||||||
|
break;
|
||||||
case '8':
|
case '8':
|
||||||
output_format = utf8_output;
|
output_format = utf8_output;
|
||||||
break;
|
break;
|
||||||
|
|
@ -304,7 +311,7 @@ output_formula_checked(const spot::ltl::formula* f,
|
||||||
out = &p.first->second->ostream();
|
out = &p.first->second->ostream();
|
||||||
}
|
}
|
||||||
output_formula(*out, f, filename, linenum, prefix, suffix);
|
output_formula(*out, f, filename, linenum, prefix, suffix);
|
||||||
*out << '\n';
|
*out << output_terminator;
|
||||||
// Make sure we abort if we can't write to std::cout anymore
|
// Make sure we abort if we can't write to std::cout anymore
|
||||||
// (like disk full or broken pipe with SIGPIPE ignored).
|
// (like disk full or broken pipe with SIGPIPE ignored).
|
||||||
check_cout();
|
check_cout();
|
||||||
|
|
|
||||||
|
|
@ -25,10 +25,12 @@
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
ltlfilt=../../bin/ltlfilt
|
||||||
|
|
||||||
checkopt()
|
checkopt()
|
||||||
{
|
{
|
||||||
cat >exp
|
cat >exp
|
||||||
run 0 ../../bin/ltlfilt "$@" formulas > out
|
run 0 $ltlfilt "$@" formulas > out
|
||||||
diff exp out
|
diff exp out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -168,7 +170,7 @@ p0 & GFp1 & FGp1
|
||||||
p0 | Gp1 | FG(p2 | Xp3)
|
p0 | Gp1 | FG(p2 | Xp3)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
run 0 ../../bin/ltlfilt -u --nnf --relabel-bool=pnn in >out
|
run 0 $ltlfilt -u --nnf --relabel-bool=pnn in >out
|
||||||
diff exp out
|
diff exp out
|
||||||
|
|
||||||
cat >exp <<EOF
|
cat >exp <<EOF
|
||||||
|
|
@ -189,7 +191,7 @@ p0 && []<>p1 && <>[]p1
|
||||||
p0 || []p1 || <>[](p2 || Xp3)
|
p0 || []p1 || <>[](p2 || Xp3)
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
run 0 ../../bin/ltlfilt -s -u --nnf --relabel-bool=pnn --define in >out
|
run 0 $ltlfilt -s -u --nnf --relabel-bool=pnn --define in >out
|
||||||
diff exp out
|
diff exp out
|
||||||
|
|
||||||
cat >exp <<EOF
|
cat >exp <<EOF
|
||||||
|
|
@ -219,28 +221,40 @@ cat >exp <<EOF
|
||||||
#define p4 ((c=1))
|
#define p4 ((c=1))
|
||||||
(p0=1) * (p1=1) * ((p2=1) + (p3=1)) * (X(p4=0))
|
(p0=1) * (p1=1) * ((p2=1) + (p3=1)) * (X(p4=0))
|
||||||
EOF
|
EOF
|
||||||
run 0 ../../bin/ltlfilt -p --wring -u --nnf --relabel=pnn --define in >out
|
run 0 $ltlfilt -p --wring -u --nnf --relabel=pnn --define in >out
|
||||||
|
diff exp out
|
||||||
|
|
||||||
|
run 0 $ltlfilt -0 in > out
|
||||||
|
perl -i -pe 's/\0/@\n/g' out
|
||||||
|
cat >exp <<EOF
|
||||||
|
a & c & Xb@
|
||||||
|
a & b & GF(a | c) & FG(a | c)@
|
||||||
|
b & GF(a | c) & FG(a | c)@
|
||||||
|
h | i | G(d & e) | FG(!c | Xf)@
|
||||||
|
b & e & (f | g) & !Xc@
|
||||||
|
b & GF(a | c) & !GF!(a | c)@
|
||||||
|
EOF
|
||||||
diff exp out
|
diff exp out
|
||||||
|
|
||||||
SPOT_STUTTER_CHECK=0 \
|
SPOT_STUTTER_CHECK=0 \
|
||||||
../../bin/ltlfilt --stutter-invariant -f '!{a:b*:c}' 2> stderr && exit 1
|
$ltlfilt --stutter-invariant -f '!{a:b*:c}' 2> stderr && exit 1
|
||||||
test $? = 2
|
test $? = 2
|
||||||
grep 'non-LTL' stderr
|
grep 'non-LTL' stderr
|
||||||
|
|
||||||
SPOT_STUTTER_CHECK=555 \
|
SPOT_STUTTER_CHECK=555 \
|
||||||
../../bin/ltlfilt --stutter-invariant -f '!{a:b*:c}' 2> stderr && exit 1
|
$ltlfilt --stutter-invariant -f '!{a:b*:c}' 2> stderr && exit 1
|
||||||
test $? = 2
|
test $? = 2
|
||||||
grep 'invalid' stderr
|
grep 'invalid' stderr
|
||||||
|
|
||||||
SPOT_STUTTER_CHECK=5 \
|
SPOT_STUTTER_CHECK=5 \
|
||||||
../../bin/ltlfilt --stutter-invariant -f '!{a:b*:c}'
|
$ltlfilt --stutter-invariant -f '!{a:b*:c}'
|
||||||
|
|
||||||
# This one was incorrectly diagnosed as stutter invariant because of a
|
# This one was incorrectly diagnosed as stutter invariant because of a
|
||||||
# bug in the bitvectors.
|
# bug in the bitvectors.
|
||||||
../../bin/ltlfilt --stutter-invariant -f 'F(a & XXXXXX!a)' && exit 1
|
$ltlfilt --stutter-invariant -f 'F(a & XXXXXX!a)' && exit 1
|
||||||
|
|
||||||
|
|
||||||
../../bin/ltlfilt -c -o 'foo' -f a 2>stderr && exit 1
|
$ltlfilt -c -o 'foo' -f a 2>stderr && exit 1
|
||||||
grep 'ltlfilt: options --output and --count are incompatible' stderr
|
grep 'ltlfilt: options --output and --count are incompatible' stderr
|
||||||
|
|
||||||
true
|
true
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue