spot/tests/core/complement.test
Alexandre Duret-Lutz 67b5d2aa9a fix several algorithms that incorrectly preserved !weak
This massive set of changes was triggered by issue #546.
In addition to the better handling of !weak, this also adds some
weak properties in a few places.

* spot/twaalgos/product.cc (product_aux): Throw some exception
if an automaton with t or f acceptance has the !weak property.  This
is a cheap sanity check to help detect algorithms that incorrectly
assumed !weak input would necessarily become !weak output.
* spot/twaalgos/hoa.cc (print_hoa): Likewise, also do not assume
that terminal implies very-weak.
* spot/parseaut/parseaut.yy: Add several diagnostics for similar
cases.  E.g., a one-state automaton cannot be declared as !very-weak.
* tests/core/parseaut.test: Check those new diagnostics.
* spot/twa/twa.cc (twa::intersecting_run): Temporary remove the weak
property by setting it to maybe, not to false.
* spot/twaalgos/minimize.cc, spot/twaalgos/parity.cc,
spot/twaalgos/sccfilter.cc, spot/twaalgos/simulation.cc: Account for
the fact that these algorithm may in fact improve the weakness.
* spot/twaalgos/strength.cc: Only look at colors used by the
acceptance condition when deciding weakness.
* spot/twaalgos/synthesis.cc: Declare the strategy as weak.
* bin/randaut.cc: Add weak to automata with t/f acceptance.
* spot/kripke/kripke.hh: Make kripke structures as weak.
* tests/core/acc_word.test, tests/core/alternating.test,
tests/core/complement.test, tests/core/complete.test,
tests/core/ltlsynt.test, tests/core/randomize.test,
tests/core/readsave.test, tests/core/remfin.test,
tests/core/sccsimpl.test, tests/core/strength.test,
tests/core/wdba2.test, tests/ltsmin/kripke.test,
tests/python/automata-io.ipynb, tests/python/automata.ipynb,
tests/python/dbranch.py, tests/python/highlighting.ipynb,
tests/python/kripke.py, tests/python/ltsmin-dve.ipynb,
tests/python/mealy.py, tests/python/simstate.py: Adjust all these test
cases.
* NEWS: Mention the fixes.
2023-11-10 23:38:25 +01:00

484 lines
14 KiB
Bash
Executable file

#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) 2015-2019, 2021, 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 <http://www.gnu.org/licenses/>.
. ./defs
set -e
randaut -H -A 'random 0..4' -Q1..10 -D -n 50 0..2 >aut
run 0 autfilt --complement -H aut >/dev/null
cat >in <<EOF
HOA: v1
States: 0
Acceptance: 0 t
--BODY--
--END--
EOF
autfilt --complement -H in >out
cat >expected <<EOF
HOA: v1
States: 1
Start: 0
AP: 0
acc-name: all
Acceptance: 0 t
properties: trans-labels explicit-labels state-acc complete
properties: deterministic very-weak
--BODY--
State: 0
[t] 0
--END--
EOF
diff out expected
ltl2tgba -H 'GFa & GFb' Xa Fa 'FGa & FGb' | autfilt --complement -H >out
cat >expected <<EOF
HOA: v1
States: 1
Start: 0
AP: 2 "a" "b"
acc-name: generalized-co-Buchi 2
Acceptance: 2 Fin(0)|Fin(1)
properties: trans-labels explicit-labels trans-acc complete
properties: deterministic stutter-invariant
--BODY--
State: 0
[!0&!1] 0
[0&!1] 0 {0}
[!0&1] 0 {1}
[0&1] 0 {0 1}
--END--
HOA: v1
States: 4
Start: 1
AP: 1 "a"
acc-name: co-Buchi
Acceptance: 1 Fin(0)
properties: trans-labels explicit-labels state-acc complete
properties: deterministic very-weak
--BODY--
State: 0
[0] 2
[!0] 3
State: 1
[t] 0
State: 2 {0}
[t] 2
State: 3
[t] 3
--END--
HOA: v1
States: 2
Start: 1
AP: 1 "a"
acc-name: co-Buchi
Acceptance: 1 Fin(0)
properties: trans-labels explicit-labels state-acc complete
properties: deterministic stutter-invariant very-weak
--BODY--
State: 0 {0}
[t] 0
State: 1
[0] 0
[!0] 1
--END--
HOA: v1
States: 2
Start: 0
AP: 2 "a" "b"
acc-name: Buchi
Acceptance: 1 Inf(0)
properties: trans-labels explicit-labels trans-acc complete
properties: deterministic stutter-invariant
--BODY--
State: 0
[!0 | !1] 0 {0}
[0&1] 1
State: 1
[!0 | !1] 0 {0}
[0&1] 1
--END--
EOF
diff out expected
# The complement of a nondeterministic automaton is currently done via
# a determinization.
ltl2tgba -H 'FGa' | autfilt --complement >out
cat >expected <<EOF
HOA: v1
States: 2
Start: 0
AP: 1 "a"
acc-name: Buchi
Acceptance: 1 Inf(0)
properties: trans-labels explicit-labels trans-acc complete
properties: deterministic stutter-invariant
--BODY--
State: 0
[!0] 0 {0}
[0] 1
State: 1
[!0] 0 {0}
[0] 1
--END--
EOF
diff out expected
# The following automaton used to be badly complemented due
# to a bug in the Rabin-to-BA conversion.
# Reported by Juraj Major and Tereza Šťastná.
cat >pos.hoa <<EOF
HOA: v1 States: 8 Start: 0 AP: 3 "a" "b" "c" Acceptance: 3 Fin(0) |
(Inf(1) & Fin(2)) properties: trans-labels explicit-labels trans-acc
--BODY-- State: 0 [0&1&2] 5 {2} State: 1 [0&1&!2] 1 {0} [0&1&2]
2 [0&!1&!2] 6 State: 2 [!0&1&2] 4 State: 3 [!0&1&2] 2 {0} [0&1&2] 3
[0&1&2] 1 State: 4 [!0&!1&!2] 7 {2} State: 5 [!0&1&!2] 3 [!0&!1&2]
5 [!0&!1&!2] 2 {0} State: 6 [!0&1&2] 7 {0 1 2} [!0&!1&!2] 6 State: 7
[!0&1&2] 4 [0&!1&2] 7 --END--
EOF
autfilt --complement pos.hoa >neg.hoa
autfilt -q --intersect=pos.hoa neg.hoa && exit 1
# The following automaton, generated by the Cyclist theorem prover was
# sent by Reuben Rowe to show a regression between Spot 2.9.8 and Spot
# 2.10. In the latter version, complementation was slower and larger,
# because the simulation-based optimization of the determinization was
# turned off. Here we do not check the runtime, but we can check the output
# size, which should be 4 and not 153.
cat >large.hoa<<EOF
HOA: v1
States: 102
Start: 0
AP: 8 "a" "b" "c" "d" "e" "f" "g" "h"
acc-name: Buchi
Acceptance: 1 Inf(0)
Alias: @x 0 & !1 & !2 & !3 & !4 & !5 & !6 & !7
--BODY--
State: 0
[0 & 1 & !2 & 3 & 4 & 5 & !6 & !7] 1
[!0 & !1 & !2 & 3 & 4 & !5 & 6 & !7] 2
[0 & !1 & !2 & 3 & 4 & 5 & !6 & !7] 3
[!0 & 1 & 2 & !3 & 4 & 5 & !6 & !7] 4
[0 & !1 & 2 & !3 & 4 & 5 & !6 & !7] 5
[0 & 1 & !2 & !3 & 4 & 5 & !6 & !7] 6
[!0 & 1 & 2 & 3 & 4 & !5 & !6 & !7] 7
[!0 & 1 & !2 & !3 & 4 & 5 & !6 & !7] 8
[@x] 9
[!0 & !1 & 2 & 3 & !4 & !5 & 6 & !7] 10
[!0 & !1 & !2 & !3 & 4 & 5 & !6 & !7] 11
[!0 & !1 & 2 & 3 & 4 & !5 & !6 & !7] 12
[0 & !1 & 2 & 3 & !4 & 5 & !6 & !7] 13
[0 & !1 & !2 & 3 & 4 & !5 & !6 & !7] 14
[!0 & !1 & 2 & 3 & !4 & 5 & !6 & !7] 15
[0 & 1 & !2 & !3 & !4 & !5 & 6 & !7] 16
[0 & 1 & !2 & 3 & !4 & 5 & !6 & !7] 17
[!0 & !1 & !2 & 3 & !4 & !5 & !6 & !7] 18
[!0 & !1 & !2 & !3 & !4 & 5 & 6 & !7] 19
[0 & !1 & !2 & 3 & !4 & 5 & !6 & !7] 20
[!0 & !1 & !2 & 3 & !4 & 5 & !6 & !7] 21
[!0 & 1 & 2 & !3 & 4 & !5 & !6 & !7] 22
[0 & 1 & 2 & 3 & 4 & !5 & 6 & !7] 23
[0 & 1 & 2 & !3 & !4 & 5 & !6 & !7] 24
[!0 & !1 & 2 & !3 & 4 & !5 & !6 & !7] 25
[!0 & !1 & 2 & !3 & !4 & 5 & !6 & !7] 26
[0 & 1 & !2 & !3 & 4 & !5 & !6 & !7] 27
[0 & !1 & !2 & !3 & !4 & 5 & !6 & !7] 28
[0 & 1 & 2 & 3 & 4 & !5 & !6 & !7] 29
[0 & !1 & !2 & !3 & 4 & 5 & !6 & !7] 30
[0 & 1 & !2 & 3 & !4 & !5 & 6 & !7] 31
[0 & !1 & 2 & !3 & 4 & !5 & !6 & !7] 32
[0 & 1 & 2 & !3 & !4 & !5 & !6 & !7] 33
[!0 & !1 & 2 & 3 & 4 & !5 & 6 & !7] 34
[0 & !1 & !2 & 3 & !4 & !5 & !6 & !7] 35
[!0 & 1 & 2 & 3 & !4 & 5 & !6 & !7] 36
[0 & 1 & 2 & 3 & !4 & 5 & !6 & !7] 37
[!0 & 1 & 2 & !3 & !4 & !5 & 6 & !7] 38
[0 & 1 & 2 & !3 & 4 & 5 & !6 & !7] 39
[!0 & 1 & !2 & !3 & 4 & !5 & 6 & !7] 40
[!0 & 1 & !2 & !3 & 4 & !5 & !6 & !7] 41
[0 & 1 & 2 & !3 & 4 & !5 & !6 & !7] 42
[!0 & !1 & !2 & 3 & 4 & 5 & !6 & !7] 43
[0 & !1 & 2 & 3 & !4 & !5 & !6 & !7] 44
[0 & !1 & 2 & 3 & 4 & !5 & !6 & !7] 45
[!0 & 1 & !2 & 3 & !4 & 5 & !6 & !7] 46
[!0 & 1 & !2 & 3 & !4 & !5 & !6 & !7] 47
[!0 & !1 & 2 & !3 & !4 & !5 & 6 & !7] 48
[!0 & !1 & 2 & !3 & !4 & !5 & !6 & !7] 49
[!0 & 1 & 2 & !3 & 4 & !5 & 6 & !7] 50
[!0 & !1 & 2 & 3 & !4 & !5 & !6 & !7] 51
[!0 & 1 & 2 & !3 & !4 & !5 & !6 & !7] 52
[0 & 1 & !2 & 3 & 4 & !5 & 6 & !7] 53
[0 & 1 & !2 & 3 & 4 & !5 & !6 & !7] 54
[!0 & 1 & 2 & !3 & !4 & 5 & !6 & !7] 55
[!0 & 1 & 2 & 3 & !4 & !5 & !6 & !7] 56
[!0 & !1 & !2 & !3 & !4 & 5 & !6 & !7] 57
[0 & 1 & !2 & 3 & !4 & !5 & !6 & !7] 58
[!0 & 1 & !2 & 3 & 4 & !5 & !6 & !7] 59
[0 & !1 & !2 & !3 & 4 & !5 & !6 & !7] 60
[!0 & 1 & !2 & !3 & !4 & 5 & !6 & !7] 61
[0 & !1 & 2 & !3 & 4 & !5 & 6 & !7] 62
[0 & 1 & 2 & 3 & !4 & !5 & !6 & !7] 63
[!0 & !1 & 2 & !3 & 4 & 5 & !6 & !7] 64
[!0 & !1 & !2 & !3 & 4 & !5 & !6 & !7] 65
[0 & 1 & !2 & !3 & !4 & 5 & !6 & !7] 66
[0 & !1 & 2 & !3 & !4 & 5 & !6 & !7] 67
[0 & 1 & !2 & !3 & !4 & !5 & !6 & !7] 68
[0 & !1 & !2 & !3 & 4 & !5 & 6 & !7] 69
[!0 & !1 & !2 & 3 & 4 & !5 & !6 & !7] 70
[0 & 1 & !2 & !3 & !4 & 5 & 6 & !7] 71
[0 & !1 & 2 & !3 & !4 & !5 & !6 & !7] 72
[!0 & 1 & !2 & 3 & 4 & 5 & !6 & !7] 73
[!0 & 1 & !2 & !3 & !4 & !5 & !6 & !7] 74
[!0 & !1 & 2 & 3 & 4 & 5 & !6 & !7] 75
[0 & !1 & 2 & 3 & 4 & 5 & !6 & !7] 76
[!0 & 1 & 2 & 3 & 4 & 5 & !6 & !7] 77
[0 & 1 & 2 & 3 & 4 & 5 & !6 & !7] 78
[!0 & !1 & !2 & !3 & !4 & !5 & 6 & !7] 79
[0 & !1 & !2 & !3 & !4 & !5 & 6 & !7] 80
[!0 & 1 & !2 & !3 & !4 & !5 & 6 & !7] 81
[0 & !1 & 2 & !3 & !4 & !5 & 6 & !7] 82
[0 & 1 & 2 & !3 & !4 & !5 & 6 & !7] 83
[!0 & !1 & !2 & 3 & !4 & !5 & 6 & !7] 84
[0 & !1 & !2 & 3 & !4 & !5 & 6 & !7] 85
[!0 & 1 & !2 & 3 & !4 & !5 & 6 & !7] 86
[0 & !1 & 2 & 3 & !4 & !5 & 6 & !7] 87
[!0 & 1 & 2 & 3 & !4 & !5 & 6 & !7] 88
[0 & 1 & 2 & 3 & !4 & !5 & 6 & !7] 89
[!0 & !1 & !2 & !3 & 4 & !5 & 6 & !7] 90
[0 & 1 & !2 & !3 & 4 & !5 & 6 & !7] 91
[!0 & !1 & 2 & !3 & 4 & !5 & 6 & !7] 92
[0 & 1 & 2 & !3 & 4 & !5 & 6 & !7] 93
[0 & !1 & !2 & 3 & 4 & !5 & 6 & !7] 94
[!0 & 1 & !2 & 3 & 4 & !5 & 6 & !7] 95
[0 & !1 & 2 & 3 & 4 & !5 & 6 & !7] 96
[!0 & 1 & 2 & 3 & 4 & !5 & 6 & !7] 97
[0 & !1 & !2 & !3 & !4 & 5 & 6 & !7] 98
[!0 & 1 & !2 & !3 & !4 & 5 & 6 & !7] 99
[!0 & !1 & 2 & !3 & !4 & 5 & 6 & !7] 100
[0 & !1 & 2 & !3 & !4 & 5 & 6 & !7] 101
[1] 0
State: 1 [@x] 9
State: 2 [@x] 9
State: 3 [@x] 9
State: 4 [@x] 9
State: 5 [@x] 9
State: 6 [@x] 9
State: 7 [@x] 9
State: 8 [@x] 9
State: 9 {0}
[0 & 1 & !2 & 3 & 4 & 5 & !6 & !7] 1
[!0 & !1 & !2 & 3 & 4 & !5 & 6 & !7] 2
[0 & !1 & !2 & 3 & 4 & 5 & !6 & !7] 3
[!0 & 1 & 2 & !3 & 4 & 5 & !6 & !7] 4
[0 & !1 & 2 & !3 & 4 & 5 & !6 & !7] 5
[0 & 1 & !2 & !3 & 4 & 5 & !6 & !7] 6
[!0 & 1 & 2 & 3 & 4 & !5 & !6 & !7] 7
[!0 & 1 & !2 & !3 & 4 & 5 & !6 & !7] 8
[!0 & !1 & 2 & 3 & !4 & !5 & 6 & !7] 10
[!0 & !1 & !2 & !3 & 4 & 5 & !6 & !7] 11
[!0 & !1 & 2 & 3 & 4 & !5 & !6 & !7] 12
[!0 & 1 & 2 & 3 & !4 & 5 & !6 & !7] 36
[0 & !1 & 2 & 3 & !4 & 5 & !6 & !7] 13
[0 & !1 & !2 & 3 & 4 & !5 & !6 & !7] 14
[!0 & !1 & 2 & 3 & !4 & 5 & !6 & !7] 15
[0 & 1 & !2 & !3 & !4 & !5 & 6 & !7] 16
[0 & 1 & !2 & 3 & !4 & 5 & !6 & !7] 17
[!0 & !1 & !2 & 3 & !4 & !5 & !6 & !7] 18
[!0 & !1 & !2 & !3 & !4 & 5 & 6 & !7] 19
[0 & !1 & !2 & 3 & !4 & 5 & !6 & !7] 20
[!0 & !1 & !2 & 3 & !4 & 5 & !6 & !7] 21
[!0 & 1 & 2 & !3 & 4 & !5 & !6 & !7] 22
[0 & 1 & 2 & 3 & 4 & !5 & 6 & !7] 23
[0 & 1 & 2 & !3 & !4 & 5 & !6 & !7] 24
[!0 & !1 & 2 & !3 & 4 & !5 & !6 & !7] 25
[!0 & !1 & 2 & !3 & !4 & 5 & !6 & !7] 26
[0 & 1 & !2 & !3 & 4 & !5 & !6 & !7] 27
[0 & !1 & !2 & !3 & !4 & 5 & !6 & !7] 28
[!0 & !1 & 2 & 3 & 4 & 5 & !6 & !7] 75
[0 & 1 & 2 & 3 & 4 & !5 & !6 & !7] 29
[!0 & 1 & 2 & !3 & !4 & 5 & !6 & !7] 55
[!0 & 1 & 2 & 3 & !4 & !5 & !6 & !7] 56
[!0 & !1 & !2 & !3 & !4 & 5 & !6 & !7] 57
[0 & !1 & !2 & !3 & 4 & !5 & !6 & !7] 60
[!0 & 1 & !2 & !3 & !4 & 5 & !6 & !7] 61
[0 & !1 & 2 & !3 & 4 & !5 & 6 & !7] 62
[0 & 1 & !2 & 3 & !4 & !5 & !6 & !7] 58
[!0 & 1 & !2 & 3 & 4 & !5 & !6 & !7] 59
[0 & !1 & 2 & !3 & 4 & !5 & !6 & !7] 32
[0 & 1 & 2 & !3 & !4 & !5 & !6 & !7] 33
[!0 & !1 & 2 & 3 & 4 & !5 & 6 & !7] 34
[0 & !1 & !2 & 3 & !4 & !5 & !6 & !7] 35
[0 & 1 & 2 & 3 & !4 & 5 & !6 & !7] 37
[!0 & 1 & 2 & !3 & !4 & !5 & 6 & !7] 38
[0 & 1 & 2 & !3 & 4 & 5 & !6 & !7] 39
[!0 & 1 & !2 & !3 & 4 & !5 & 6 & !7] 40
[!0 & 1 & !2 & !3 & 4 & !5 & !6 & !7] 41
[0 & 1 & 2 & !3 & 4 & !5 & !6 & !7] 42
[!0 & !1 & !2 & 3 & 4 & 5 & !6 & !7] 43
[0 & !1 & 2 & 3 & !4 & !5 & !6 & !7] 44
[0 & !1 & 2 & 3 & 4 & !5 & !6 & !7] 45
[!0 & 1 & !2 & 3 & !4 & 5 & !6 & !7] 46
[!0 & 1 & !2 & 3 & !4 & !5 & !6 & !7] 47
[!0 & !1 & 2 & !3 & !4 & !5 & 6 & !7] 48
[!0 & !1 & 2 & !3 & !4 & !5 & !6 & !7] 49
[!0 & 1 & 2 & !3 & 4 & !5 & 6 & !7] 50
[!0 & !1 & 2 & 3 & !4 & !5 & !6 & !7] 51
[!0 & 1 & 2 & !3 & !4 & !5 & !6 & !7] 52
[0 & 1 & !2 & 3 & 4 & !5 & 6 & !7] 53
[0 & 1 & !2 & 3 & 4 & !5 & !6 & !7] 54
[0 & 1 & 2 & 3 & !4 & !5 & !6 & !7] 63
[!0 & !1 & 2 & !3 & 4 & 5 & !6 & !7] 64
[!0 & !1 & !2 & !3 & 4 & !5 & !6 & !7] 65
[0 & 1 & !2 & !3 & !4 & 5 & !6 & !7] 66
[0 & !1 & 2 & !3 & !4 & 5 & !6 & !7] 67
[0 & 1 & !2 & !3 & !4 & !5 & !6 & !7] 68
[0 & !1 & !2 & !3 & 4 & !5 & 6 & !7] 69
[!0 & !1 & !2 & 3 & 4 & !5 & !6 & !7] 70
[0 & 1 & !2 & !3 & !4 & 5 & 6 & !7] 71
[0 & !1 & 2 & !3 & !4 & !5 & !6 & !7] 72
[!0 & 1 & !2 & 3 & 4 & 5 & !6 & !7] 73
[!0 & 1 & !2 & !3 & !4 & !5 & !6 & !7] 74
[0 & !1 & !2 & !3 & 4 & 5 & !6 & !7] 30
[0 & 1 & !2 & 3 & !4 & !5 & 6 & !7] 31
[0 & !1 & 2 & 3 & 4 & 5 & !6 & !7] 76
[!0 & 1 & 2 & 3 & 4 & 5 & !6 & !7] 77
[0 & 1 & 2 & 3 & 4 & 5 & !6 & !7] 78
[!0 & !1 & !2 & !3 & !4 & !5 & 6 & !7] 79
[0 & !1 & !2 & !3 & !4 & !5 & 6 & !7] 80
[!0 & 1 & !2 & !3 & !4 & !5 & 6 & !7] 81
[0 & !1 & 2 & !3 & !4 & !5 & 6 & !7] 82
[0 & 1 & 2 & !3 & !4 & !5 & 6 & !7] 83
[!0 & !1 & !2 & 3 & !4 & !5 & 6 & !7] 84
[0 & !1 & !2 & 3 & !4 & !5 & 6 & !7] 85
[!0 & 1 & !2 & 3 & !4 & !5 & 6 & !7] 86
[0 & !1 & 2 & 3 & !4 & !5 & 6 & !7] 87
[!0 & 1 & 2 & 3 & !4 & !5 & 6 & !7] 88
[0 & 1 & 2 & 3 & !4 & !5 & 6 & !7] 89
[!0 & !1 & !2 & !3 & 4 & !5 & 6 & !7] 90
[0 & 1 & !2 & !3 & 4 & !5 & 6 & !7] 91
[!0 & !1 & 2 & !3 & 4 & !5 & 6 & !7] 92
[0 & 1 & 2 & !3 & 4 & !5 & 6 & !7] 93
[0 & !1 & !2 & 3 & 4 & !5 & 6 & !7] 94
[!0 & 1 & !2 & 3 & 4 & !5 & 6 & !7] 95
[0 & !1 & 2 & 3 & 4 & !5 & 6 & !7] 96
[!0 & 1 & 2 & 3 & 4 & !5 & 6 & !7] 97
[0 & !1 & !2 & !3 & !4 & 5 & 6 & !7] 98
[!0 & 1 & !2 & !3 & !4 & 5 & 6 & !7] 99
[!0 & !1 & 2 & !3 & !4 & 5 & 6 & !7] 100
[0 & !1 & 2 & !3 & !4 & 5 & 6 & !7] 101
State: 10 [@x] 9
State: 11 [@x] 9
State: 12 [@x] 9
State: 13 [@x] 9
State: 14 [@x] 9
State: 15 [@x] 9
State: 16 [@x] 9
State: 17 [@x] 9
State: 18 [@x] 9
State: 19 [@x] 9
State: 20 [@x] 9
State: 21 [@x] 9
State: 22 [@x] 9
State: 23 [@x] 9
State: 24 [@x] 9
State: 25 [@x] 9
State: 26 [@x] 9
State: 27 [@x] 9
State: 28 [@x] 9
State: 29 [@x] 9
State: 30 [@x] 9
State: 31 [@x] 9
State: 32 [@x] 9
State: 33 [@x] 9
State: 34 [@x] 9
State: 35 [@x] 9
State: 36 [@x] 9
State: 37 [@x] 9
State: 38 [@x] 9
State: 39 [@x] 9
State: 40 [@x] 9
State: 41 [@x] 9
State: 42 [@x] 9
State: 43 [@x] 9
State: 44 [@x] 9
State: 45 [@x] 9
State: 46 [@x] 9
State: 47 [@x] 9
State: 48 [@x] 9
State: 49 [@x] 9
State: 50 [@x] 9
State: 51 [@x] 9
State: 52 [@x] 9
State: 53 [@x] 9
State: 54 [@x] 9
State: 55 [@x] 9
State: 56 [@x] 9
State: 57 [@x] 9
State: 58 [@x] 9
State: 59 [@x] 9
State: 60 [@x] 9
State: 61 [@x] 9
State: 62 [@x] 9
State: 63 [@x] 9
State: 64 [@x] 9
State: 65 [@x] 9
State: 66 [@x] 9
State: 67 [@x] 9
State: 68 [@x] 9
State: 69 [@x] 9
State: 70 [@x] 9
State: 71 [@x] 9
State: 72 [@x] 9
State: 73 [@x] 9
State: 74 [@x] 9
State: 75 [@x] 9
State: 76 [@x] 9
State: 77 [@x] 9
State: 78 [@x] 9
State: 79 [@x] 9
State: 80 [@x] 9
State: 81 [@x] 9
State: 82 [@x] 9
State: 83 [@x] 9
State: 84 [@x] 9
State: 85 [@x] 9
State: 86 [@x] 9
State: 87 [@x] 9
State: 88 [@x] 9
State: 89 [@x] 9
State: 90 [@x] 9
State: 91 [@x] 9
State: 92 [@x] 9
State: 93 [@x] 9
State: 94 [@x] 9
State: 95 [@x] 9
State: 96 [@x] 9
State: 97 [@x] 9
State: 98 [@x] 9
State: 99 [@x] 9
State: 100 [@x] 9
State: 101 [@x] 9
--END--
EOF
test 4 = `autfilt --complement large.hoa --stats=%s`
: