sbacc: fix sbacc producing complete automata marked as incomplete

Fixes #312, reported by František Blahoudek.

* spot/twaalgos/sbacc.cc: Detect the case were this can happen,
and fix it.
* tests/core/sbacc.test: New test case.
* NEWS: Mention the bug.
This commit is contained in:
Alexandre Duret-Lutz 2017-12-22 18:27:07 +01:00
parent 9ec7df670e
commit 95fd75940a
3 changed files with 29 additions and 0 deletions

4
NEWS
View file

@ -248,6 +248,10 @@ New in spot 2.4.3.dev (not yet released)
Fin-less & CNF version of the acceptance condition had several
unit clauses.
- If the automaton passed to sbacc() was incomplete because of some
unreachable states, then it was possible that the output would
marked incomplete while it was in fact complete.
New in spot 2.4.3 (2017-12-19)
Bugs fixed:

View file

@ -168,6 +168,17 @@ namespace spot
}
}
res->merge_edges();
// If the automaton was marked as not complete, and we have
// ignored some unreachable state, then it is possible that the
// result becomes complete.
if (res->prop_complete().is_false())
for (unsigned i = 0; i < ns; ++i)
if (!si.reachable_state(i))
{
res->prop_complete(trival::maybe());
break;
}
return res;
}
}

View file

@ -262,3 +262,17 @@ EOF
autfilt --sbacc alt.hoa > out.hoa
diff out.hoa expect.hoa
# Issue #312
autfilt -S <<EOF | autfilt --is-complete
HOA: v1
States: 2
Start: 0
AP: 0
Acceptance: 1 Inf(0)
properties: !complete
--BODY--
State: 0 [t] 0 {0}
State: 1
--END--
EOF