* src/tgbatest/ltl2tgba.cc (main): For non-generalized emptiness

check, degeneralize the automaton only if it has too much
acceptance conditions.  This makes it easier to reproduce runs
of randtgba.
* src/tgbatest/emptchk.test: Adjust.
This commit is contained in:
Alexandre Duret-Lutz 2004-11-16 00:35:18 +00:00
parent dd4d8dea01
commit 49b871f924
3 changed files with 31 additions and 26 deletions

View file

@ -1,3 +1,11 @@
2004-11-15 Alexandre Duret-Lutz <adl@gnu.org>
* src/tgbatest/ltl2tgba.cc (main): For non-generalized emptiness
check, degeneralize the automaton only if it has too much
acceptance conditions. This makes it easier to reproduce runs
of randtgba.
* src/tgbatest/emptchk.test: Adjust.
2004-11-15 Poitrenaud Denis <denis@src.lip6.fr> 2004-11-15 Poitrenaud Denis <denis@src.lip6.fr>
* src/tgbaalgos/magic.cc: Fix a stupid bug. * src/tgbaalgos/magic.cc: Fix a stupid bug.

View file

@ -72,14 +72,14 @@ expect_no()
run 0 ./ltl2tgba -Ese05_search -f "$1" run 0 ./ltl2tgba -Ese05_search -f "$1"
run 0 ./ltl2tgba -Ebsh_se05_search "$1" run 0 ./ltl2tgba -Ebsh_se05_search "$1"
run 0 ./ltl2tgba -Ebsh_se05_search -f "$1" run 0 ./ltl2tgba -Ebsh_se05_search -f "$1"
test `./ltl2tgba -emagic_search_repeated "!($1)" | test `./ltl2tgba -emagic_search_repeated "!($1)" |
grep Prefix: | wc -l` -ge $2 grep Prefix: | wc -l` -ge $2
test `./ltl2tgba -ese05_search_repeated "!($1)" | test `./ltl2tgba -ese05_search_repeated "!($1)" |
grep Prefix: | wc -l` -ge $2 grep Prefix: | wc -l` -ge $2
} }
expect_ce 'a' 1 expect_ce 'a' 1
expect_ce 'a U b' 2 expect_ce 'a U b' 1
expect_ce 'X a' 1 expect_ce 'X a' 1
expect_ce 'a & b & c' 1 expect_ce 'a & b & c' 1
expect_ce 'a | b | (c U (d & (g U (h ^ i))))' 2 expect_ce 'a | b | (c U (d & (g U (h ^ i))))' 2
@ -90,4 +90,4 @@ expect_ce 'Fc & X(a | Xb) & GF(a | Xb) & Gc' 1
expect_ce '!((FF a) <=> (F x))' 3 expect_ce '!((FF a) <=> (F x))' 3
expect_no '!((FF a) <=> (F a))' 4 expect_no '!((FF a) <=> (F a))' 4
expect_no 'Xa && (!a U b) && !b && X!b' 5 expect_no 'Xa && (!a U b) && !b && X!b' 5
expect_no '(a U !b) && Gb' 4 expect_no '(a U !b) && Gb' 3

View file

@ -135,6 +135,7 @@ main(int argc, char** argv)
bool debug_opt = false; bool debug_opt = false;
bool degeneralize_opt = false; bool degeneralize_opt = false;
bool degeneralize_maybe = false;
bool fm_opt = false; bool fm_opt = false;
bool fm_exprop_opt = false; bool fm_exprop_opt = false;
bool fm_symb_merge_opt = true; bool fm_symb_merge_opt = true;
@ -356,48 +357,48 @@ main(int argc, char** argv)
else if (echeck_algo == "magic_search") else if (echeck_algo == "magic_search")
{ {
echeck = MagicSearch; echeck = MagicSearch;
degeneralize_opt = true; degeneralize_maybe = true;
} }
else if (echeck_algo == "magic_search_repeated") else if (echeck_algo == "magic_search_repeated")
{ {
echeck = MagicSearch; echeck = MagicSearch;
degeneralize_opt = true; degeneralize_maybe = true;
magic_many = true; magic_many = true;
} }
else if (echeck_algo == "bsh_magic_search") else if (echeck_algo == "bsh_magic_search")
{ {
echeck = MagicSearch; echeck = MagicSearch;
degeneralize_opt = true; degeneralize_maybe = true;
bit_state_hashing = true; bit_state_hashing = true;
} }
else if (echeck_algo == "bsh_magic_search_repeated") else if (echeck_algo == "bsh_magic_search_repeated")
{ {
echeck = MagicSearch; echeck = MagicSearch;
degeneralize_opt = true; degeneralize_maybe = true;
bit_state_hashing = true; bit_state_hashing = true;
magic_many = true; magic_many = true;
} }
else if (echeck_algo == "se05_search") else if (echeck_algo == "se05_search")
{ {
echeck = Se05Search; echeck = Se05Search;
degeneralize_opt = true; degeneralize_maybe = true;
} }
else if (echeck_algo == "se05_search_repeated") else if (echeck_algo == "se05_search_repeated")
{ {
echeck = Se05Search; echeck = Se05Search;
degeneralize_opt = true; degeneralize_maybe = true;
magic_many = true; magic_many = true;
} }
else if (echeck_algo == "bsh_se05_search") else if (echeck_algo == "bsh_se05_search")
{ {
echeck = Se05Search; echeck = Se05Search;
degeneralize_opt = true; degeneralize_maybe = true;
bit_state_hashing = true; bit_state_hashing = true;
} }
else if (echeck_algo == "bsh_se05_search_repeated") else if (echeck_algo == "bsh_se05_search_repeated")
{ {
echeck = Se05Search; echeck = Se05Search;
degeneralize_opt = true; degeneralize_maybe = true;
bit_state_hashing = true; bit_state_hashing = true;
magic_many = true; magic_many = true;
} }
@ -492,6 +493,9 @@ main(int argc, char** argv)
} }
spot::tgba_tba_proxy* degeneralized = 0; spot::tgba_tba_proxy* degeneralized = 0;
if (degeneralize_maybe && a->number_of_acceptance_conditions() > 1)
degeneralize_opt = true;
if (degeneralize_opt) if (degeneralize_opt)
a = degeneralized = new spot::tgba_tba_proxy(a); a = degeneralized = new spot::tgba_tba_proxy(a);
@ -605,37 +609,31 @@ main(int argc, char** argv)
} }
spot::emptiness_check* ec = 0; spot::emptiness_check* ec = 0;
spot::tgba* ec_a = 0;
switch (echeck) switch (echeck)
{ {
case None: case None:
break; break;
case Couvreur: case Couvreur:
ec_a = a;
ec = new spot::couvreur99_check(a); ec = new spot::couvreur99_check(a);
break; break;
case Couvreur2: case Couvreur2:
ec_a = a;
ec = new spot::couvreur99_check_shy(a); ec = new spot::couvreur99_check_shy(a);
break; break;
case MagicSearch: case MagicSearch:
ec_a = degeneralized;
if (bit_state_hashing) if (bit_state_hashing)
ec = spot::bit_state_hashing_magic_search( ec = spot::bit_state_hashing_magic_search(a, heap_size);
degeneralized, heap_size);
else else
ec = spot::explicit_magic_search(degeneralized); ec = spot::explicit_magic_search(a);
break; break;
case Se05Search: case Se05Search:
ec_a = degeneralized;
if (bit_state_hashing) if (bit_state_hashing)
ec = spot::bit_state_hashing_se05_search(degeneralized, heap_size); ec = spot::bit_state_hashing_se05_search(a, heap_size);
else else
ec = spot::explicit_se05_search(degeneralized); ec = spot::explicit_se05_search(a);
break; break;
} }
@ -677,13 +675,12 @@ main(int argc, char** argv)
if (graph_run_opt) if (graph_run_opt)
{ {
spot::tgba_run_dotty_decorator deco(run); spot::tgba_run_dotty_decorator deco(run);
spot::dotty_reachable(std::cout, ec_a, &deco); spot::dotty_reachable(std::cout, a, &deco);
} }
else else
{ {
spot::print_tgba_run(std::cout, ec_a, run); spot::print_tgba_run(std::cout, a, run);
if (!spot::replay_tgba_run(std::cout, ec_a, run, if (!spot::replay_tgba_run(std::cout, a, run, true))
true))
exit_code = 1; exit_code = 1;
} }
delete run; delete run;