ltlcross: diagnose complementations requiring too many colors

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.
This commit is contained in:
Alexandre Duret-Lutz 2020-07-13 17:59:55 +02:00
parent f2403c91dc
commit 1fa048fe8a
4 changed files with 351 additions and 19 deletions

View file

@ -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;