From 1fa048fe8a8b65d05460b93a1fe4064983fe5ad1 Mon Sep 17 00:00:00 2001 From: Alexandre Duret-Lutz Date: Mon, 13 Jul 2020 17:59:55 +0200 Subject: [PATCH] ltlcross: diagnose complementations requiring too many colors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #411 reported by Frantiček Blahoudek. * bin/ltlcross.cc: Catch the issue. * tests/core/ltlcross6.test: New file. * tests/Makefile.am: Add it. * NEWS: Mention it. --- NEWS | 5 + bin/ltlcross.cc | 50 +++--- tests/Makefile.am | 1 + tests/core/ltlcross6.test | 314 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 351 insertions(+), 19 deletions(-) create mode 100755 tests/core/ltlcross6.test diff --git a/NEWS b/NEWS index 7d8adbe84..d04256d35 100644 --- a/NEWS +++ b/NEWS @@ -66,6 +66,11 @@ New in spot 2.9.0.dev (not yet released) issues in intersecting_run(), exclusive_run(), intersecting_word(), exclusive_word(), which all call reduce(). + - ltlcross used to crash with "Too many acceptance sets used. The + limit is 32." when complementing an automaton would require more + acceptance sets than supported by Spot. This is now diagnosed + with --verbose, but does not prevent ltlcross from continuing. + New in spot 2.9 (2020-04-30) Command-line tools: diff --git a/bin/ltlcross.cc b/bin/ltlcross.cc index a7f9fa1da..fd8deb228 100644 --- a/bin/ltlcross.cc +++ b/bin/ltlcross.cc @@ -1336,25 +1336,37 @@ namespace && !spot::is_universal(from[i])) missing_complement = true; else - to[i] = spot::complement(from[i], aborter); - if (verbose) - { - if (to[i]) - { - std::cerr << "\t("; - printsize(from[i]); - std::cerr << ") -> ("; - printsize(to[i]); - std::cerr << ")\tComp(" << prefix << i << ")\n"; - } - else - { - std::cerr << "\tnot complemented"; - if (aborter) - aborter->print_reason(std::cerr << " (") << ')'; - std::cerr << '\n'; - } - } + try + { + to[i] = spot::complement(from[i], aborter); + if (verbose) + { + if (to[i]) + { + std::cerr << "\t("; + printsize(from[i]); + std::cerr << ") -> ("; + printsize(to[i]); + std::cerr << ")\tComp(" << prefix + << i << ")\n"; + } + else + { + std::cerr << "\tnot complemented"; + if (aborter) + aborter->print_reason(std::cerr + << " (") << ')'; + std::cerr << '\n'; + } + } + } + catch (const std::runtime_error& re) + { + missing_complement = true; + if (verbose) + std::cerr << "\tnot complemented (" + << re.what() << ")\n"; + } } }; missing_complement = false; diff --git a/tests/Makefile.am b/tests/Makefile.am index 77b8f8ece..95ac98c1e 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -310,6 +310,7 @@ TESTS_twa = \ core/ltlcross.test \ core/spotlbtt2.test \ core/ltlcross2.test \ + core/ltlcross6.test \ core/autcross.test \ core/autcross2.test \ core/autcross3.test \ diff --git a/tests/core/ltlcross6.test b/tests/core/ltlcross6.test new file mode 100755 index 000000000..4b0a4b188 --- /dev/null +++ b/tests/core/ltlcross6.test @@ -0,0 +1,314 @@ +#!/bin/sh +# -*- coding: utf-8 -*- +# Copyright (C) 2020 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 + +cat >fake <<\EOF +#!/bin/sh +cat <<\FOO +HOA: v1 States: 137 Start: 0 AP: 4 "a" "b" "c" "d" acc-name: Buchi +Acceptance: 1 Inf(0) properties: trans-labels explicit-labels state-acc +--BODY-- State: 0 [!0&!1&!2&!3] 0 [!0&!1&!2&!3] 1 [!0&!1&!2&!3] 2 +[0&!1&!2&!3] 0 [0&!1&!2&!3] 3 [0&!1&!2&!3] 4 [0&!1&!2&!3] 5 [0&!1&!2&!3] 6 +[0&!1&!2&!3] 7 [0&!1&!2&!3] 8 [0&!1&!2&!3] 9 [!0&1&!2&!3] 0 [!0&1&!2&!3] +10 [!0&1&!2&!3] 11 [!0&1&!2&!3] 12 [0&1&!2&!3] 0 [0&1&!2&!3] 13 +[0&1&!2&!3] 14 [0&1&!2&!3] 15 [0&1&!2&!3] 16 [0&1&!2&!3] 17 [0&1&!2&!3] 18 +[0&1&!2&!3] 19 [!0&!1&2&!3] 0 [!0&!1&2&!3] 20 [!0&!1&2&!3] 21 [0&!1&2&!3] +0 [0&!1&2&!3] 22 [0&!1&2&!3] 23 [0&!1&2&!3] 24 [0&!1&2&!3] 25 [0&!1&2&!3] +26 [0&!1&2&!3] 27 [!0&1&2&!3] 0 [!0&1&2&!3] 28 [!0&1&2&!3] 29 [!0&1&2&!3] +30 [0&1&2&!3] 0 [0&1&2&!3] 31 [0&1&2&!3] 32 [0&1&2&!3] 33 [0&1&2&!3] 34 +[0&1&2&!3] 35 [0&1&2&!3] 36 [0&1&2&!3] 37 [!0&!1&!2&3] 0 [!0&!1&!2&3] 38 +[!0&!1&!2&3] 39 [!0&!1&!2&3] 40 [0&!1&!2&3] 0 [0&!1&!2&3] 41 [0&!1&!2&3] +42 [0&!1&!2&3] 43 [0&!1&!2&3] 44 [0&!1&!2&3] 45 [0&!1&!2&3] 46 [0&!1&!2&3] +47 [0&!1&!2&3] 48 [0&!1&!2&3] 49 [!0&1&!2&3] 0 [!0&1&!2&3] 50 [!0&1&!2&3] +51 [0&1&!2&3] 0 [0&1&!2&3] 52 [0&1&!2&3] 53 [0&1&!2&3] 54 [0&1&!2&3] 55 +[0&1&!2&3] 56 [0&1&!2&3] 57 [0&1&!2&3] 58 [0&1&!2&3] 59 [0&1&!2&3] 60 +[0&1&!2&3] 61 [!0&!1&2&3] 0 [!0&!1&2&3] 62 [!0&!1&2&3] 63 [!0&!1&2&3] +64 [0&!1&2&3] 0 [0&!1&2&3] 65 [0&!1&2&3] 66 [0&!1&2&3] 67 [0&!1&2&3] +68 [0&!1&2&3] 69 [0&!1&2&3] 70 [0&!1&2&3] 71 [0&!1&2&3] 72 [0&!1&2&3] +73 [!0&1&2&3] 0 [!0&1&2&3] 74 [!0&1&2&3] 75 [0&1&2&3] 0 [0&1&2&3] 76 +[0&1&2&3] 77 [0&1&2&3] 78 [0&1&2&3] 79 [0&1&2&3] 80 [0&1&2&3] 81 [0&1&2&3] +82 [0&1&2&3] 83 State: 1 [!0&!1&!2&3] 1 [0&!1&!2&3] 1 [!0&!1&2&3] 20 +[0&!1&2&3] 20 State: 2 [!0&!1&!2&3] 2 [0&!1&!2&3] 2 [!0&!1&2&3] 21 +[0&!1&2&3] 21 State: 3 [0&!1&!2&!3] 3 [0&!1&!2&!3] 4 [0&1&!2&!3] 3 +[0&1&!2&!3] 4 [0&!1&2&!3] 3 [0&!1&2&!3] 4 [0&1&2&!3] 3 [0&1&2&!3] 4 +[0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] 3 [0&1&!2&3] 4 [0&!1&2&3] 84 +[0&1&2&3] 3 [0&1&2&3] 4 State: 4 {0} [0&!1&!2&!3] 3 [0&1&!2&!3] 13 +[0&!1&2&!3] 22 [0&1&2&!3] 31 [0&!1&!2&3] 41 [0&1&!2&3] 52 [0&!1&2&3] +65 [0&1&2&3] 76 State: 5 [!0&!1&!2&3] 1 [0&!1&!2&3] 5 [!0&!1&2&3] +20 [0&!1&2&3] 23 State: 6 [!0&!1&!2&3] 2 [0&!1&!2&3] 6 [!0&!1&2&3] +21 [0&!1&2&3] 24 State: 7 [0&!1&!2&!3] 7 [0&1&!2&!3] 7 [0&!1&2&!3] 7 +[0&1&2&!3] 7 [0&!1&!2&3] 7 [0&1&!2&3] 7 [0&!1&2&3] 25 [0&1&2&3] 7 State: +8 [0&!1&!2&!3] 8 [0&1&!2&!3] 8 [0&!1&2&!3] 8 [0&1&2&!3] 8 [0&!1&!2&3] 8 +[0&1&!2&3] 8 [0&!1&2&3] 85 [0&!1&2&3] 86 [0&1&2&3] 8 State: 9 [0&!1&!2&!3] +9 [0&1&!2&!3] 9 [0&!1&2&!3] 9 [0&1&2&!3] 9 [0&!1&!2&3] 9 [0&1&!2&3] +9 [0&!1&2&3] 27 [0&1&2&3] 9 State: 10 [!0&!1&!2&!3] 1 [0&!1&!2&!3] 1 +[!0&1&!2&!3] 10 [!0&1&!2&!3] 11 [0&1&!2&!3] 10 [0&1&!2&!3] 11 [!0&!1&2&!3] +20 [0&!1&2&!3] 20 [!0&1&2&!3] 28 [0&1&2&!3] 28 [!0&1&!2&3] 10 [!0&1&!2&3] +11 [0&1&!2&3] 10 [0&1&!2&3] 11 [!0&1&2&3] 28 [0&1&2&3] 28 State: 11 {0} +[!0&!1&!2&!3] 1 [0&!1&!2&!3] 5 [!0&1&!2&!3] 10 [0&1&!2&!3] 14 [!0&!1&2&!3] +20 [0&!1&2&!3] 23 [!0&1&2&!3] 28 [0&1&2&!3] 32 State: 12 [!0&!1&!2&!3] 2 +[0&!1&!2&!3] 2 [!0&1&!2&!3] 12 [0&1&!2&!3] 12 [!0&!1&2&!3] 21 [0&!1&2&!3] +21 [!0&1&2&!3] 29 [!0&1&2&!3] 30 [0&1&2&!3] 29 [0&1&2&!3] 30 [!0&1&!2&3] +12 [0&1&!2&3] 12 [!0&1&2&3] 29 [!0&1&2&3] 30 [0&1&2&3] 29 [0&1&2&3] +30 State: 13 [0&!1&!2&!3] 3 [0&!1&!2&!3] 4 [0&1&!2&!3] 13 [0&!1&2&!3] +22 [0&1&2&!3] 31 [0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] 13 [0&!1&2&3] +22 [0&1&2&3] 31 State: 14 [!0&!1&!2&!3] 1 [0&!1&!2&!3] 5 [!0&1&!2&!3] 10 +[!0&1&!2&!3] 11 [0&1&!2&!3] 14 [!0&!1&2&!3] 20 [0&!1&2&!3] 23 [!0&1&2&!3] +28 [0&1&2&!3] 32 [!0&1&!2&3] 10 [!0&1&!2&3] 11 [0&1&!2&3] 14 [!0&1&2&3] +28 [0&1&2&3] 32 State: 15 [!0&!1&!2&!3] 2 [0&!1&!2&!3] 6 [!0&1&!2&!3] 12 +[0&1&!2&!3] 15 [!0&!1&2&!3] 21 [0&!1&2&!3] 24 [!0&1&2&!3] 29 [!0&1&2&!3] +30 [0&1&2&!3] 33 [!0&1&!2&3] 12 [0&1&!2&3] 15 [!0&1&2&3] 29 [!0&1&2&3] +30 [0&1&2&3] 33 State: 16 [0&!1&!2&!3] 7 [0&1&!2&!3] 16 [0&1&!2&!3] 17 +[0&!1&2&!3] 25 [0&1&2&!3] 34 [0&!1&!2&3] 7 [0&1&!2&3] 16 [0&1&!2&3] 17 +[0&!1&2&3] 7 [0&1&2&3] 34 State: 17 {0} [0&!1&!2&!3] 7 [0&1&!2&!3] 16 +[0&!1&2&!3] 25 [0&1&2&!3] 34 [0&!1&!2&3] 45 [0&1&!2&3] 54 [0&!1&2&3] +68 [0&1&2&3] 77 State: 18 [0&!1&!2&!3] 8 [0&1&!2&!3] 18 [0&!1&2&!3] +26 [0&1&2&!3] 35 [0&!1&!2&3] 8 [0&1&!2&3] 18 [0&!1&2&3] 26 [0&1&2&3] +35 State: 19 [0&!1&!2&!3] 9 [0&1&!2&!3] 19 [0&!1&2&!3] 27 [0&1&2&!3] +36 [0&1&2&!3] 37 [0&!1&!2&3] 9 [0&1&!2&3] 19 [0&!1&2&3] 9 [0&1&2&3] +36 [0&1&2&3] 37 State: 20 [!0&!1&!2&3] 1 [0&!1&!2&3] 1 [!0&1&!2&3] 10 +[!0&1&!2&3] 11 [0&1&!2&3] 10 [0&1&!2&3] 11 [!0&!1&2&3] 20 [0&!1&2&3] +20 [!0&1&2&3] 28 [0&1&2&3] 28 State: 21 [!0&!1&!2&3] 2 [0&!1&!2&3] 2 +[!0&1&!2&3] 12 [0&1&!2&3] 12 [!0&!1&2&3] 21 [0&!1&2&3] 21 [!0&1&2&3] +29 [!0&1&2&3] 30 [0&1&2&3] 29 [0&1&2&3] 30 State: 22 [0&!1&!2&!3] 3 +[0&!1&!2&!3] 4 [0&1&!2&!3] 3 [0&1&!2&!3] 4 [0&!1&2&!3] 3 [0&!1&2&!3] +4 [0&1&2&!3] 3 [0&1&2&!3] 4 [0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] +13 [0&!1&2&3] 84 [0&1&2&3] 31 State: 23 [!0&!1&!2&3] 1 [0&!1&!2&3] 5 +[!0&1&!2&3] 10 [!0&1&!2&3] 11 [0&1&!2&3] 14 [!0&!1&2&3] 20 [0&!1&2&3] +23 [!0&1&2&3] 28 [0&1&2&3] 32 State: 24 [!0&!1&!2&3] 2 [0&!1&!2&3] 6 +[!0&1&!2&3] 12 [0&1&!2&3] 15 [!0&!1&2&3] 21 [0&!1&2&3] 24 [!0&1&2&3] +29 [!0&1&2&3] 30 [0&1&2&3] 33 State: 25 [0&!1&!2&!3] 7 [0&1&!2&!3] +7 [0&!1&2&!3] 7 [0&1&2&!3] 7 [0&!1&!2&3] 7 [0&1&!2&3] 16 [0&1&!2&3] +17 [0&!1&2&3] 25 [0&1&2&3] 34 State: 26 [0&!1&!2&!3] 8 [0&1&!2&!3] +8 [0&!1&2&!3] 8 [0&1&2&!3] 8 [0&!1&!2&3] 8 [0&1&!2&3] 18 [0&!1&2&3] +85 [0&!1&2&3] 86 [0&1&2&3] 35 State: 27 [0&!1&!2&!3] 9 [0&1&!2&!3] +9 [0&!1&2&!3] 9 [0&1&2&!3] 9 [0&!1&!2&3] 9 [0&1&!2&3] 19 [0&!1&2&3] +27 [0&1&2&3] 36 [0&1&2&3] 37 State: 28 [!0&!1&!2&!3] 1 [0&!1&!2&!3] 1 +[!0&1&!2&!3] 10 [!0&1&!2&!3] 11 [0&1&!2&!3] 10 [0&1&!2&!3] 11 [!0&!1&2&!3] +20 [0&!1&2&!3] 20 [!0&1&2&!3] 28 [0&1&2&!3] 28 State: 29 [!0&!1&!2&!3] 2 +[0&!1&!2&!3] 2 [!0&1&!2&!3] 12 [0&1&!2&!3] 12 [!0&!1&2&!3] 21 [0&!1&2&!3] +21 [!0&1&2&!3] 29 [!0&1&2&!3] 30 [0&1&2&!3] 29 [0&1&2&!3] 30 State: +30 {0} [!0&!1&!2&!3] 2 [0&!1&!2&!3] 6 [!0&1&!2&!3] 12 [0&1&!2&!3] 15 +[!0&!1&2&!3] 21 [0&!1&2&!3] 24 [!0&1&2&!3] 29 [0&1&2&!3] 33 State: 31 +[0&!1&!2&!3] 3 [0&!1&!2&!3] 4 [0&1&!2&!3] 13 [0&!1&2&!3] 22 [0&1&2&!3] +31 [0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] 3 [0&1&!2&3] 4 [0&!1&2&3] +22 [0&1&2&3] 3 [0&1&2&3] 4 State: 32 [!0&!1&!2&!3] 1 [0&!1&!2&!3] 5 +[!0&1&!2&!3] 10 [!0&1&!2&!3] 11 [0&1&!2&!3] 14 [!0&!1&2&!3] 20 [0&!1&2&!3] +23 [!0&1&2&!3] 28 [0&1&2&!3] 32 State: 33 [!0&!1&!2&!3] 2 [0&!1&!2&!3] 6 +[!0&1&!2&!3] 12 [0&1&!2&!3] 15 [!0&!1&2&!3] 21 [0&!1&2&!3] 24 [!0&1&2&!3] +29 [!0&1&2&!3] 30 [0&1&2&!3] 33 State: 34 [0&!1&!2&!3] 7 [0&1&!2&!3] 16 +[0&1&!2&!3] 17 [0&!1&2&!3] 25 [0&1&2&!3] 34 [0&!1&!2&3] 7 [0&1&!2&3] +7 [0&!1&2&3] 7 [0&1&2&3] 7 State: 35 [0&!1&!2&!3] 8 [0&1&!2&!3] 18 +[0&!1&2&!3] 26 [0&1&2&!3] 35 [0&!1&!2&3] 8 [0&1&!2&3] 8 [0&!1&2&3] 26 +[0&1&2&3] 8 State: 36 [0&!1&!2&!3] 9 [0&1&!2&!3] 19 [0&!1&2&!3] 27 +[0&1&2&!3] 36 [0&1&2&!3] 37 [0&!1&!2&3] 9 [0&1&!2&3] 9 [0&!1&2&3] 9 +[0&1&2&3] 9 State: 37 {0} [0&!1&!2&!3] 9 [0&1&!2&!3] 19 [0&!1&2&!3] 27 +[0&1&2&!3] 36 [0&!1&!2&3] 48 [0&1&!2&3] 59 [0&!1&2&3] 72 [0&1&2&3] 81 +State: 38 [!0&!1&!2&3] 38 [!0&!1&!2&3] 39 [0&!1&!2&3] 38 [0&!1&!2&3] 39 +[!0&!1&2&3] 62 [0&!1&2&3] 62 State: 39 {0} [!0&!1&!2&3] 38 [0&!1&!2&3] +42 [!0&!1&2&3] 62 [0&!1&2&3] 66 State: 40 [!0&!1&!2&3] 40 [0&!1&!2&3] +40 [!0&!1&2&3] 63 [!0&!1&2&3] 64 [0&!1&2&3] 63 [0&!1&2&3] 64 State: 41 +[0&!1&!2&!3] 3 [0&!1&!2&!3] 4 [0&1&!2&!3] 3 [0&1&!2&!3] 4 [0&!1&2&!3] +3 [0&!1&2&!3] 4 [0&1&2&!3] 3 [0&1&2&!3] 4 [0&!1&!2&3] 41 [0&1&!2&3] 3 +[0&1&!2&3] 4 [0&!1&2&3] 65 [0&1&2&3] 3 [0&1&2&3] 4 State: 42 [!0&!1&!2&3] +38 [!0&!1&!2&3] 39 [0&!1&!2&3] 42 [!0&!1&2&3] 62 [0&!1&2&3] 66 State: 43 +[0&!1&!2&3] 43 [0&!1&!2&3] 44 [0&!1&2&3] 67 State: 44 {0} [0&!1&!2&3] +43 [0&!1&2&3] 67 State: 45 [0&!1&!2&!3] 7 [0&1&!2&!3] 7 [0&!1&2&!3] +7 [0&1&2&!3] 7 [0&!1&!2&3] 45 [0&1&!2&3] 7 [0&!1&2&3] 87 [0&1&2&3] +7 State: 46 [!0&!1&!2&3] 40 [0&!1&!2&3] 46 [!0&!1&2&3] 63 [!0&!1&2&3] +64 [0&!1&2&3] 69 State: 47 [0&!1&!2&!3] 8 [0&1&!2&!3] 8 [0&!1&2&!3] 8 +[0&1&2&!3] 8 [0&!1&!2&3] 47 [0&1&!2&3] 8 [0&!1&2&3] 70 [0&1&2&3] 8 State: +48 [0&!1&!2&!3] 9 [0&1&!2&!3] 9 [0&!1&2&!3] 9 [0&1&2&!3] 9 [0&!1&!2&3] +48 [0&1&!2&3] 9 [0&!1&2&3] 88 [0&1&2&3] 9 State: 49 [0&!1&!2&3] 49 +[0&!1&2&3] 71 [0&!1&2&3] 73 State: 50 [!0&!1&!2&!3] 89 [0&!1&!2&!3] +89 [!0&1&!2&!3] 50 [0&1&!2&!3] 50 [!0&!1&2&!3] 90 [!0&!1&2&!3] 91 +[0&!1&2&!3] 90 [0&!1&2&!3] 91 [!0&1&2&!3] 74 [0&1&2&!3] 74 [!0&1&!2&3] +50 [0&1&!2&3] 50 [!0&1&2&3] 74 [0&1&2&3] 74 State: 51 [!0&!1&!2&!3] 92 +[0&!1&!2&!3] 92 [!0&1&!2&!3] 94 [!0&1&!2&!3] 95 [0&1&!2&!3] 94 [0&1&!2&!3] +95 [!0&!1&2&!3] 93 [0&!1&2&!3] 93 [!0&1&2&!3] 75 [0&1&2&!3] 75 [!0&1&!2&3] +51 [0&1&!2&3] 51 [!0&1&2&3] 75 [0&1&2&3] 75 State: 52 [0&!1&!2&!3] 41 +[0&1&!2&!3] 52 [0&!1&2&!3] 96 [0&1&2&!3] 76 [0&!1&!2&3] 3 [0&!1&!2&3] +4 [0&1&!2&3] 52 [0&!1&2&3] 22 [0&1&2&3] 76 State: 53 [0&!1&!2&!3] 97 +[0&1&!2&!3] 99 [0&1&!2&!3] 100 [0&!1&2&!3] 98 [0&1&2&!3] 82 [0&1&!2&3] +53 [0&1&2&3] 82 State: 54 [0&!1&!2&!3] 45 [0&1&!2&!3] 54 [0&!1&2&!3] +87 [0&1&2&!3] 77 [0&!1&!2&3] 7 [0&1&!2&3] 54 [0&!1&2&3] 7 [0&1&2&3] 77 +State: 55 [!0&!1&!2&!3] 89 [0&!1&!2&!3] 101 [!0&1&!2&!3] 50 [0&1&!2&!3] +55 [!0&!1&2&!3] 90 [!0&!1&2&!3] 91 [0&!1&2&!3] 102 [!0&1&2&!3] 74 +[0&1&2&!3] 78 [!0&1&!2&3] 50 [0&1&!2&3] 55 [!0&1&2&3] 74 [0&1&2&3] 78 +State: 56 [!0&!1&!2&!3] 92 [0&!1&!2&!3] 103 [!0&1&!2&!3] 94 [!0&1&!2&!3] +95 [0&1&!2&!3] 104 [!0&!1&2&!3] 93 [0&!1&2&!3] 105 [!0&1&2&!3] 75 +[0&1&2&!3] 79 [!0&1&!2&3] 51 [0&1&!2&3] 56 [!0&1&2&3] 75 [0&1&2&3] 79 +State: 57 [0&!1&!2&!3] 106 [0&1&!2&!3] 57 [0&!1&2&!3] 107 [0&!1&2&!3] +108 [0&1&2&!3] 83 [0&1&!2&3] 57 [0&1&2&3] 83 State: 58 [0&!1&!2&!3] 47 +[0&1&!2&!3] 58 [0&!1&2&!3] 70 [0&1&2&!3] 80 [0&!1&!2&3] 8 [0&1&!2&3] +58 [0&!1&2&3] 8 [0&1&2&3] 80 State: 59 [0&!1&!2&!3] 48 [0&1&!2&!3] 59 +[0&!1&2&!3] 72 [0&1&2&!3] 81 [0&!1&!2&3] 9 [0&1&!2&3] 59 [0&!1&2&3] +109 [0&1&2&3] 81 State: 60 [0&1&!2&3] 60 [0&1&!2&3] 61 State: 61 {0} +[0&1&!2&3] 60 State: 62 [!0&!1&!2&3] 38 [!0&!1&!2&3] 39 [0&!1&!2&3] 38 +[0&!1&!2&3] 39 [!0&1&!2&3] 110 [0&1&!2&3] 110 [!0&!1&2&3] 62 [0&!1&2&3] +62 [!0&1&2&3] 111 [0&1&2&3] 111 State: 63 [!0&!1&!2&3] 40 [0&!1&!2&3] 40 +[!0&1&!2&3] 112 [0&1&!2&3] 112 [!0&!1&2&3] 63 [!0&!1&2&3] 64 [0&!1&2&3] +63 [0&!1&2&3] 64 [!0&1&2&3] 113 [0&1&2&3] 113 State: 64 {0} [!0&!1&!2&3] +40 [0&!1&!2&3] 46 [!0&!1&2&3] 63 [0&!1&2&3] 69 State: 65 [0&!1&!2&!3] +3 [0&!1&!2&!3] 4 [0&1&!2&!3] 3 [0&1&!2&!3] 4 [0&!1&2&!3] 3 [0&!1&2&!3] +4 [0&1&2&!3] 3 [0&1&2&!3] 4 [0&!1&!2&3] 41 [0&1&!2&3] 114 [0&!1&2&3] 65 +[0&1&2&3] 115 State: 66 [!0&!1&!2&3] 38 [!0&!1&!2&3] 39 [0&!1&!2&3] 42 +[!0&1&!2&3] 110 [0&1&!2&3] 116 [!0&!1&2&3] 62 [0&!1&2&3] 66 [!0&1&2&3] +111 [0&1&2&3] 117 State: 67 [0&!1&!2&3] 43 [0&!1&!2&3] 44 [0&1&!2&3] +118 [0&!1&2&3] 67 [0&1&2&3] 119 State: 68 [0&!1&!2&!3] 7 [0&1&!2&!3] 7 +[0&!1&2&!3] 7 [0&1&2&!3] 7 [0&!1&!2&3] 45 [0&1&!2&3] 120 [0&!1&2&3] 87 +[0&1&2&3] 121 State: 69 [!0&!1&!2&3] 40 [0&!1&!2&3] 46 [!0&1&!2&3] 112 +[0&1&!2&3] 122 [!0&!1&2&3] 63 [!0&!1&2&3] 64 [0&!1&2&3] 69 [!0&1&2&3] +113 [0&1&2&3] 123 State: 70 [0&!1&!2&!3] 8 [0&1&!2&!3] 8 [0&!1&2&!3] +8 [0&1&2&!3] 8 [0&!1&!2&3] 47 [0&1&!2&3] 58 [0&!1&2&3] 70 [0&1&2&3] +80 State: 71 {0} [0&!1&!2&3] 49 [0&!1&2&3] 73 State: 72 [0&!1&!2&!3] +9 [0&1&!2&!3] 9 [0&!1&2&!3] 9 [0&1&2&!3] 9 [0&!1&!2&3] 48 [0&1&!2&3] +59 [0&!1&2&3] 88 [0&1&2&3] 81 State: 73 [0&!1&!2&3] 49 [0&1&!2&3] 124 +[0&!1&2&3] 71 [0&!1&2&3] 73 [0&1&2&3] 125 State: 74 [!0&!1&!2&!3] +89 [0&!1&!2&!3] 89 [!0&1&!2&!3] 50 [0&1&!2&!3] 50 [!0&!1&2&!3] 90 +[!0&!1&2&!3] 91 [0&!1&2&!3] 90 [0&!1&2&!3] 91 [!0&1&2&!3] 74 [0&1&2&!3] 74 +State: 75 [!0&!1&!2&!3] 92 [0&!1&!2&!3] 92 [!0&1&!2&!3] 94 [!0&1&!2&!3] 95 +[0&1&!2&!3] 94 [0&1&!2&!3] 95 [!0&!1&2&!3] 93 [0&!1&2&!3] 93 [!0&1&2&!3] +75 [0&1&2&!3] 75 State: 76 [0&!1&!2&!3] 41 [0&1&!2&!3] 52 [0&!1&2&!3] +96 [0&1&2&!3] 76 [0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] 3 [0&1&!2&3] +4 [0&!1&2&3] 22 [0&1&2&3] 3 [0&1&2&3] 4 State: 77 [0&!1&!2&!3] 45 +[0&1&!2&!3] 54 [0&!1&2&!3] 87 [0&1&2&!3] 77 [0&!1&!2&3] 7 [0&1&!2&3] +7 [0&!1&2&3] 7 [0&1&2&3] 7 State: 78 [!0&!1&!2&!3] 89 [0&!1&!2&!3] 101 +[!0&1&!2&!3] 50 [0&1&!2&!3] 55 [!0&!1&2&!3] 90 [!0&!1&2&!3] 91 [0&!1&2&!3] +102 [!0&1&2&!3] 74 [0&1&2&!3] 78 State: 79 [!0&!1&!2&!3] 92 [0&!1&!2&!3] +103 [!0&1&!2&!3] 94 [!0&1&!2&!3] 95 [0&1&!2&!3] 104 [!0&!1&2&!3] 93 +[0&!1&2&!3] 105 [!0&1&2&!3] 75 [0&1&2&!3] 79 State: 80 [0&!1&!2&!3] 47 +[0&1&!2&!3] 58 [0&!1&2&!3] 70 [0&1&2&!3] 80 [0&!1&!2&3] 8 [0&1&!2&3] +8 [0&!1&2&3] 8 [0&1&2&3] 8 State: 81 [0&!1&!2&!3] 48 [0&1&!2&!3] 59 +[0&!1&2&!3] 72 [0&1&2&!3] 81 [0&!1&!2&3] 9 [0&1&!2&3] 9 [0&!1&2&3] 109 +[0&1&2&3] 9 State: 82 [0&!1&!2&!3] 97 [0&1&!2&!3] 99 [0&1&!2&!3] 100 +[0&!1&2&!3] 98 [0&1&2&!3] 82 State: 83 [0&!1&!2&!3] 106 [0&1&!2&!3] 57 +[0&!1&2&!3] 107 [0&!1&2&!3] 108 [0&1&2&!3] 83 State: 84 [0&!1&!2&!3] 3 +[0&!1&!2&!3] 4 [0&1&!2&!3] 3 [0&1&!2&!3] 4 [0&!1&2&!3] 3 [0&!1&2&!3] 4 +[0&1&2&!3] 3 [0&1&2&!3] 4 [0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] 127 +[0&!1&2&3] 84 [0&1&2&3] 126 State: 85 [0&!1&!2&!3] 8 [0&1&!2&!3] 8 +[0&!1&2&!3] 8 [0&1&2&!3] 8 [0&!1&!2&3] 8 [0&1&!2&3] 128 [0&!1&2&3] 85 +[0&!1&2&3] 86 [0&1&2&3] 129 State: 86 {0} [0&!1&!2&!3] 8 [0&1&!2&!3] 18 +[0&!1&2&!3] 26 [0&1&2&!3] 35 [0&!1&!2&3] 47 [0&1&!2&3] 58 [0&!1&2&3] +70 [0&1&2&3] 80 State: 87 [0&!1&!2&!3] 7 [0&1&!2&!3] 7 [0&!1&2&!3] +7 [0&1&2&!3] 7 [0&!1&!2&3] 45 [0&1&!2&3] 54 [0&!1&2&3] 87 [0&1&2&3] +77 State: 88 [0&!1&!2&!3] 9 [0&1&!2&!3] 9 [0&!1&2&!3] 9 [0&1&2&!3] 9 +[0&!1&!2&3] 48 [0&1&!2&3] 130 [0&!1&2&3] 88 [0&1&2&3] 131 State: 89 +[!0&!1&!2&3] 89 [0&!1&!2&3] 89 [!0&!1&2&3] 90 [!0&!1&2&3] 91 [0&!1&2&3] +90 [0&!1&2&3] 91 State: 90 [!0&!1&!2&3] 89 [0&!1&!2&3] 89 [!0&1&!2&3] +50 [0&1&!2&3] 50 [!0&!1&2&3] 90 [!0&!1&2&3] 91 [0&!1&2&3] 90 [0&!1&2&3] +91 [!0&1&2&3] 74 [0&1&2&3] 74 State: 91 {0} [!0&1&!2&3] 50 [0&1&!2&3] +55 [!0&1&2&3] 74 [0&1&2&3] 78 State: 92 [!0&!1&!2&3] 92 [0&!1&!2&3] 92 +[!0&!1&2&3] 93 [0&!1&2&3] 93 State: 93 [!0&!1&!2&3] 92 [0&!1&!2&3] 92 +[!0&1&!2&3] 94 [!0&1&!2&3] 95 [0&1&!2&3] 94 [0&1&!2&3] 95 [!0&!1&2&3] +93 [0&!1&2&3] 93 [!0&1&2&3] 75 [0&1&2&3] 75 State: 94 [!0&!1&!2&!3] +92 [0&!1&!2&!3] 92 [!0&1&!2&!3] 94 [!0&1&!2&!3] 95 [0&1&!2&!3] 94 +[0&1&!2&!3] 95 [!0&!1&2&!3] 93 [0&!1&2&!3] 93 [!0&1&2&!3] 75 [0&1&2&!3] +75 [!0&1&!2&3] 94 [!0&1&!2&3] 95 [0&1&!2&3] 94 [0&1&!2&3] 95 [!0&1&2&3] +75 [0&1&2&3] 75 State: 95 {0} [!0&1&!2&3] 51 [0&1&!2&3] 56 [!0&1&2&3] +75 [0&1&2&3] 79 State: 96 [0&!1&!2&!3] 3 [0&!1&!2&!3] 4 [0&1&!2&!3] +3 [0&1&!2&!3] 4 [0&!1&2&!3] 3 [0&!1&2&!3] 4 [0&1&2&!3] 3 [0&1&2&!3] +4 [0&!1&!2&3] 41 [0&1&!2&3] 52 [0&!1&2&3] 65 [0&1&2&3] 76 State: 97 +[0&!1&!2&3] 97 [0&!1&2&3] 98 State: 98 [0&!1&!2&3] 97 [0&1&!2&3] 99 +[0&1&!2&3] 100 [0&!1&2&3] 98 [0&1&2&3] 82 State: 99 [0&!1&!2&!3] 97 +[0&1&!2&!3] 99 [0&1&!2&!3] 100 [0&!1&2&!3] 98 [0&1&2&!3] 82 [0&1&!2&3] +99 [0&1&!2&3] 100 [0&1&2&3] 82 State: 100 {0} [0&1&!2&3] 53 [0&1&2&3] +82 State: 101 [!0&!1&!2&3] 89 [0&!1&!2&3] 101 [!0&!1&2&3] 90 [!0&!1&2&3] +91 [0&!1&2&3] 102 State: 102 [!0&!1&!2&3] 89 [0&!1&!2&3] 101 [!0&1&!2&3] +50 [0&1&!2&3] 55 [!0&!1&2&3] 90 [!0&!1&2&3] 91 [0&!1&2&3] 102 [!0&1&2&3] +74 [0&1&2&3] 78 State: 103 [!0&!1&!2&3] 92 [0&!1&!2&3] 103 [!0&!1&2&3] 93 +[0&!1&2&3] 105 State: 104 [!0&!1&!2&!3] 92 [0&!1&!2&!3] 103 [!0&1&!2&!3] +94 [!0&1&!2&!3] 95 [0&1&!2&!3] 104 [!0&!1&2&!3] 93 [0&!1&2&!3] 105 +[!0&1&2&!3] 75 [0&1&2&!3] 79 [!0&1&!2&3] 94 [!0&1&!2&3] 95 [0&1&!2&3] 104 +[!0&1&2&3] 75 [0&1&2&3] 79 State: 105 [!0&!1&!2&3] 92 [0&!1&!2&3] 103 +[!0&1&!2&3] 94 [!0&1&!2&3] 95 [0&1&!2&3] 104 [!0&!1&2&3] 93 [0&!1&2&3] +105 [!0&1&2&3] 75 [0&1&2&3] 79 State: 106 [0&!1&!2&3] 106 [0&!1&2&3] +107 [0&!1&2&3] 108 State: 107 [0&!1&!2&3] 106 [0&1&!2&3] 57 [0&!1&2&3] +107 [0&!1&2&3] 108 [0&1&2&3] 83 State: 108 {0} [0&1&!2&3] 57 [0&1&2&3] +83 State: 109 [0&!1&!2&!3] 9 [0&1&!2&!3] 9 [0&!1&2&!3] 9 [0&1&2&!3] 9 +[0&!1&!2&3] 9 [0&1&!2&3] 132 [0&!1&2&3] 27 [0&1&2&3] 133 State: 110 +[!0&!1&!2&!3] 38 [!0&!1&!2&!3] 39 [0&!1&!2&!3] 38 [0&!1&!2&!3] +39 [!0&1&!2&!3] 110 [0&1&!2&!3] 110 [!0&!1&2&!3] 62 [0&!1&2&!3] +62 [!0&1&2&!3] 111 [0&1&2&!3] 111 [!0&1&!2&3] 110 [0&1&!2&3] 110 +[!0&1&2&3] 111 [0&1&2&3] 111 State: 111 [!0&!1&!2&!3] 38 [!0&!1&!2&!3] +39 [0&!1&!2&!3] 38 [0&!1&!2&!3] 39 [!0&1&!2&!3] 110 [0&1&!2&!3] 110 +[!0&!1&2&!3] 62 [0&!1&2&!3] 62 [!0&1&2&!3] 111 [0&1&2&!3] 111 State: +112 [!0&!1&!2&!3] 40 [0&!1&!2&!3] 40 [!0&1&!2&!3] 112 [0&1&!2&!3] +112 [!0&!1&2&!3] 63 [!0&!1&2&!3] 64 [0&!1&2&!3] 63 [0&!1&2&!3] +64 [!0&1&2&!3] 113 [0&1&2&!3] 113 [!0&1&!2&3] 112 [0&1&!2&3] 112 +[!0&1&2&3] 113 [0&1&2&3] 113 State: 113 [!0&!1&!2&!3] 40 [0&!1&!2&!3] +40 [!0&1&!2&!3] 112 [0&1&!2&!3] 112 [!0&!1&2&!3] 63 [!0&!1&2&!3] 64 +[0&!1&2&!3] 63 [0&!1&2&!3] 64 [!0&1&2&!3] 113 [0&1&2&!3] 113 State: +114 [0&!1&!2&!3] 41 [0&1&!2&!3] 114 [0&!1&2&!3] 65 [0&1&2&!3] 115 +[0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] 114 [0&!1&2&3] 3 [0&!1&2&3] 4 +[0&1&2&3] 115 State: 115 [0&!1&!2&!3] 41 [0&1&!2&!3] 114 [0&!1&2&!3] +65 [0&1&2&!3] 115 [0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] 3 [0&1&!2&3] 4 +[0&!1&2&3] 3 [0&!1&2&3] 4 [0&1&2&3] 3 [0&1&2&3] 4 State: 116 [!0&!1&!2&!3] +38 [!0&!1&!2&!3] 39 [0&!1&!2&!3] 42 [!0&1&!2&!3] 110 [0&1&!2&!3] 116 +[!0&!1&2&!3] 62 [0&!1&2&!3] 66 [!0&1&2&!3] 111 [0&1&2&!3] 117 [!0&1&!2&3] +110 [0&1&!2&3] 116 [!0&1&2&3] 111 [0&1&2&3] 117 State: 117 [!0&!1&!2&!3] +38 [!0&!1&!2&!3] 39 [0&!1&!2&!3] 42 [!0&1&!2&!3] 110 [0&1&!2&!3] 116 +[!0&!1&2&!3] 62 [0&!1&2&!3] 66 [!0&1&2&!3] 111 [0&1&2&!3] 117 State: +118 [0&!1&!2&!3] 43 [0&!1&!2&!3] 44 [0&1&!2&!3] 118 [0&!1&2&!3] 67 +[0&1&2&!3] 119 [0&1&!2&3] 118 [0&1&2&3] 119 State: 119 [0&!1&!2&!3] 43 +[0&!1&!2&!3] 44 [0&1&!2&!3] 118 [0&!1&2&!3] 67 [0&1&2&!3] 119 State: 120 +[0&!1&!2&!3] 45 [0&1&!2&!3] 120 [0&!1&2&!3] 68 [0&1&2&!3] 121 [0&!1&!2&3] +7 [0&1&!2&3] 120 [0&!1&2&3] 134 [0&1&2&3] 121 State: 121 [0&!1&!2&!3] 45 +[0&1&!2&!3] 120 [0&!1&2&!3] 68 [0&1&2&!3] 121 [0&!1&!2&3] 7 [0&1&!2&3] +7 [0&!1&2&3] 134 [0&1&2&3] 7 State: 122 [!0&!1&!2&!3] 40 [0&!1&!2&!3] +46 [!0&1&!2&!3] 112 [0&1&!2&!3] 122 [!0&!1&2&!3] 63 [!0&!1&2&!3] 64 +[0&!1&2&!3] 69 [!0&1&2&!3] 113 [0&1&2&!3] 123 [!0&1&!2&3] 112 [0&1&!2&3] +122 [!0&1&2&3] 113 [0&1&2&3] 123 State: 123 [!0&!1&!2&!3] 40 [0&!1&!2&!3] +46 [!0&1&!2&!3] 112 [0&1&!2&!3] 122 [!0&!1&2&!3] 63 [!0&!1&2&!3] 64 +[0&!1&2&!3] 69 [!0&1&2&!3] 113 [0&1&2&!3] 123 State: 124 [0&!1&!2&!3] 49 +[0&1&!2&!3] 124 [0&!1&2&!3] 71 [0&!1&2&!3] 73 [0&1&2&!3] 125 [0&1&!2&3] +124 [0&1&2&3] 125 State: 125 [0&!1&!2&!3] 49 [0&1&!2&!3] 124 [0&!1&2&!3] +71 [0&!1&2&!3] 73 [0&1&2&!3] 125 State: 126 [0&!1&!2&!3] 3 [0&!1&!2&!3] 4 +[0&1&!2&!3] 127 [0&!1&2&!3] 84 [0&1&2&!3] 126 [0&!1&!2&3] 3 [0&!1&!2&3] 4 +[0&1&!2&3] 3 [0&1&!2&3] 4 [0&!1&2&3] 3 [0&!1&2&3] 4 [0&1&2&3] 3 [0&1&2&3] +4 State: 127 [0&!1&!2&!3] 3 [0&!1&!2&!3] 4 [0&1&!2&!3] 127 [0&!1&2&!3] +84 [0&1&2&!3] 126 [0&!1&!2&3] 3 [0&!1&!2&3] 4 [0&1&!2&3] 127 [0&!1&2&3] +3 [0&!1&2&3] 4 [0&1&2&3] 126 State: 128 [0&!1&!2&!3] 8 [0&1&!2&!3] 128 +[0&!1&2&!3] 85 [0&!1&2&!3] 86 [0&1&2&!3] 129 [0&!1&!2&3] 8 [0&1&!2&3] +128 [0&!1&2&3] 8 [0&1&2&3] 129 State: 129 [0&!1&!2&!3] 8 [0&1&!2&!3] 128 +[0&!1&2&!3] 85 [0&!1&2&!3] 86 [0&1&2&!3] 129 [0&!1&!2&3] 8 [0&1&!2&3] +8 [0&!1&2&3] 8 [0&1&2&3] 8 State: 130 [0&!1&!2&!3] 48 [0&1&!2&!3] 130 +[0&!1&2&!3] 88 [0&1&2&!3] 131 [0&!1&!2&3] 9 [0&1&!2&3] 130 [0&!1&2&3] +9 [0&1&2&3] 131 State: 131 [0&!1&!2&!3] 48 [0&1&!2&!3] 130 [0&!1&2&!3] +88 [0&1&2&!3] 131 [0&!1&!2&3] 9 [0&1&!2&3] 9 [0&!1&2&3] 9 [0&1&2&3] +9 State: 132 [0&!1&!2&!3] 9 [0&1&!2&!3] 132 [0&!1&2&!3] 109 [0&1&2&!3] +133 [0&!1&!2&3] 9 [0&1&!2&3] 132 [0&!1&2&3] 109 [0&1&2&3] 133 State: 133 +[0&!1&!2&!3] 9 [0&1&!2&!3] 132 [0&!1&2&!3] 109 [0&1&2&!3] 133 [0&!1&!2&3] +9 [0&1&!2&3] 9 [0&!1&2&3] 109 [0&1&2&3] 9 State: 134 [0&!1&!2&!3] 7 +[0&1&!2&!3] 7 [0&!1&2&!3] 7 [0&1&2&!3] 7 [0&!1&!2&3] 7 [0&1&!2&3] 135 +[0&!1&2&3] 25 [0&1&2&3] 136 State: 135 [0&!1&!2&!3] 7 [0&1&!2&!3] 135 +[0&!1&2&!3] 134 [0&1&2&!3] 136 [0&!1&!2&3] 7 [0&1&!2&3] 135 [0&!1&2&3] +134 [0&1&2&3] 136 State: 136 [0&!1&!2&!3] 7 [0&1&!2&!3] 135 [0&!1&2&!3] +134 [0&1&2&!3] 136 [0&!1&!2&3] 7 [0&1&!2&3] 7 [0&!1&2&3] 134 [0&1&2&3] +7 --END-- +FOO +EOF + +chmod +x fake + +ltlcross -f 1 "./fake %f >%O" --verbose --csv=out.csv && exit 1 +test 2 = `grep '"ok"' out.csv | wc -l`