#!/bin/sh
# -*- coding: utf-8 -*-
# Copyright (C) by the Spot authors, see the AUTHORS file for details.
#
# This file is part of Spot, a model checking library.
#
# Spot is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# Spot is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
# License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see .
. ./defs
set -e
# For issue #568. Before the patch implemented for #568, running
# simulation-based reduction on automata with many APs was getting
# exponentially slow even if few different labels were used.
#
# For instance we had this:
#
# % genaut --cycle-onehot=10..20 --name='size %L' |
# autfilt --small --stats='%M: %S->%s in %r seconds'
# size 10: 100->10 in 0.0395407 seconds
# size 11: 121->11 in 0.0950484 seconds
# size 12: 144->12 in 0.227828 seconds
# size 13: 169->13 in 0.391545 seconds
# size 14: 196->14 in 0.954784 seconds
# size 15: 225->15 in 2.34656 seconds
# size 16: 256->16 in 5.80549 seconds
# size 17: 289->17 in 14.3545 seconds
# size 18: 324->18 in 47.1589 seconds
# size 19: 361->19 in 138.023 seconds
#
# The test below shows that even with --cycle-onehot-nba=80 we don't
# have any problem now.
genaut --cycle-onehot-nba=20 \
--cycle-onehot-nba=40 \
--cycle-onehot-nba=60 \
--cycle-onehot-nba=80 \
--cycle-log-nba=20 \
--cycle-log-nba=40 \
--cycle-log-nba=60 \
--cycle-log-nba=80 \
| autfilt --small --stats='%S -> %s' > out
cat >expected < 20
1600 -> 40
3600 -> 60
6400 -> 6400
400 -> 20
1600 -> 40
3600 -> 60
6400 -> 6400
EOF
diff expected out
# the reason for the 6400 states above is that simulation-based
# reductions are disabled above 4096 states by default. This can be
# changed with -x simul-max=N.
genaut --cycle-onehot-nba=80 --cycle-log-nba=80 \
| autfilt -x simul-max=6400 --small --stats='%S -> %s' > out
cat >expected < 80
6400 -> 80
EOF
diff expected out
genaut --cycle-onehot=7..12 |
autfilt --parity -D --stats="%S -> %s" > out
cat >expected < 13
64 -> 15
81 -> 17
100 -> 19
121 -> 4360
144 -> 9481
EOF
genaut --cycle-onehot=7..12 |
autfilt -x simul-max=10000 --parity -D --stats="%S -> %s" > out
cat >expected < 13
64 -> 15
81 -> 17
100 -> 19
121 -> 21
144 -> 23
EOF
# Using autcross will also test tgba_determinize
genaut --cycle-onehot-nba=11..12 --cycle-log-nba=11..12 |
autcross --language-preserved 'autfilt --small' --verbose
# A test case from issue #575
cat >575.hoa < res.hoa
test "16 49 0" = "`autfilt --stats='%s %e %d' res.hoa`"