* src/tgba/tgbatba.hh, src/tgba/tgbatba.cc
(tgba_tba_proxy::state_is_accepting): New method. * src/tgbaalgos/magic.hh, src/tgbaalgos/magic.cc: New files. * src/tgbaalgos/Makefile.am (libtgbaalgos_la_SOURCES, tgbaalgos_HEADERS): Add them. * src/tgbatest/ltlmagic.cc, src/tgbatest/ltlmagic.test: New files. * src/tgbatest/Makefile.am (TESTS, ltlmagic_SOURCES, check_PROGRAMS): Add them.
This commit is contained in:
parent
af928d28ac
commit
860d085b1a
10 changed files with 402 additions and 41 deletions
|
|
@ -15,3 +15,4 @@ explprod
|
|||
tripprod
|
||||
mixprod
|
||||
spotlbtt
|
||||
ltlmagic
|
||||
|
|
|
|||
|
|
@ -4,16 +4,17 @@ LDADD = ../libspot.la
|
|||
check_SCRIPTS = defs
|
||||
# Keep this sorted alphabetically.
|
||||
check_PROGRAMS = \
|
||||
explicit \
|
||||
readsave \
|
||||
tgbaread \
|
||||
ltl2tgba \
|
||||
ltlprod \
|
||||
bddprod \
|
||||
explicit \
|
||||
explprod \
|
||||
tripprod \
|
||||
ltl2tgba \
|
||||
ltlmagic \
|
||||
ltlprod \
|
||||
mixprod \
|
||||
spotlbtt
|
||||
readsave \
|
||||
spotlbtt \
|
||||
tgbaread \
|
||||
tripprod
|
||||
|
||||
# Keep this sorted alphabetically.
|
||||
bddprod_SOURCES = ltlprod.cc
|
||||
|
|
@ -21,6 +22,7 @@ bddprod_CXXFLAGS = -DBDD_CONCRETE_PRODUCT
|
|||
explicit_SOURCES = explicit.cc
|
||||
explprod_SOURCES = explprod.cc
|
||||
ltl2tgba_SOURCES = ltl2tgba.cc
|
||||
ltlmagic_SOURCES = ltlmagic.cc
|
||||
ltlprod_SOURCES = ltlprod.cc
|
||||
mixprod_SOURCES = mixprod.cc
|
||||
readsave_SOURCES = readsave.cc
|
||||
|
|
@ -40,7 +42,8 @@ TESTS = \
|
|||
explprod.test \
|
||||
tripprod.test \
|
||||
mixprod.test \
|
||||
spotlbtt.test
|
||||
spotlbtt.test \
|
||||
ltlmagic.test
|
||||
|
||||
EXTRA_DIST = $(TESTS)
|
||||
|
||||
|
|
|
|||
77
src/tgbatest/ltlmagic.cc
Normal file
77
src/tgbatest/ltlmagic.cc
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
#include <iostream>
|
||||
#include <cassert>
|
||||
#include "ltlvisit/destroy.hh"
|
||||
#include "ltlast/allnodes.hh"
|
||||
#include "ltlparse/public.hh"
|
||||
#include "tgbaalgos/ltl2tgba.hh"
|
||||
#include "tgbaalgos/magic.hh"
|
||||
|
||||
void
|
||||
syntax(char* prog)
|
||||
{
|
||||
std::cerr << prog << " formula" << std::endl;
|
||||
exit(2);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
int exit_code = 0;
|
||||
int formula_index = 0;
|
||||
bool all_opt = false;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (argc < formula_index + 1)
|
||||
syntax(argv[0]);
|
||||
|
||||
++formula_index;
|
||||
|
||||
if (!strcmp(argv[formula_index], "-a"))
|
||||
{
|
||||
all_opt = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
spot::ltl::environment& env(spot::ltl::default_environment::instance());
|
||||
|
||||
spot::ltl::parse_error_list pel1;
|
||||
spot::ltl::formula* f1 = spot::ltl::parse(argv[formula_index], pel1, env);
|
||||
|
||||
if (spot::ltl::format_parse_errors(std::cerr, argv[formula_index], pel1))
|
||||
return 2;
|
||||
|
||||
spot::bdd_dict* dict = new spot::bdd_dict();
|
||||
{
|
||||
spot::tgba_bdd_concrete* a1 = spot::ltl_to_tgba(f1, dict);
|
||||
spot::tgba_tba_proxy* a2 = new spot::tgba_tba_proxy(a1);
|
||||
spot::ltl::destroy(f1);
|
||||
|
||||
spot::magic_search ms(a2);
|
||||
|
||||
if (ms.check())
|
||||
{
|
||||
do
|
||||
ms.print_result (std::cout);
|
||||
while (all_opt && ms.check());
|
||||
}
|
||||
else
|
||||
{
|
||||
exit_code = 1;
|
||||
}
|
||||
|
||||
delete a2;
|
||||
delete a1;
|
||||
}
|
||||
|
||||
assert(spot::ltl::atomic_prop::instance_count() == 0);
|
||||
assert(spot::ltl::unop::instance_count() == 0);
|
||||
assert(spot::ltl::binop::instance_count() == 0);
|
||||
assert(spot::ltl::multop::instance_count() == 0);
|
||||
delete dict;
|
||||
return exit_code;
|
||||
}
|
||||
15
src/tgbatest/ltlmagic.test
Executable file
15
src/tgbatest/ltlmagic.test
Executable file
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/sh
|
||||
|
||||
. ./defs
|
||||
|
||||
set -e
|
||||
|
||||
./ltlmagic a
|
||||
./ltlmagic 0 || test $? = 1
|
||||
./ltlmagic 'a & !a' || test $? = 1
|
||||
./ltlmagic 'a U b'
|
||||
./ltlmagic '!(a U b)'
|
||||
./ltlmagic '!(a U b) & !(!a R !b)' || test $? = 1
|
||||
# Expect four satisfactions
|
||||
test `./ltlmagic -a 'FFx <=> Fx' | grep Prefix: | wc -l` = 4
|
||||
./ltlmagic '!(FFx <=> Fx)' || test $? = 1
|
||||
Loading…
Add table
Add a link
Reference in a new issue