* 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:
Alexandre Duret-Lutz 2003-07-28 15:49:16 +00:00
parent af928d28ac
commit 860d085b1a
10 changed files with 402 additions and 41 deletions

View file

@ -15,3 +15,4 @@ explprod
tripprod
mixprod
spotlbtt
ltlmagic

View file

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