twaalgos: Implement language_map algo

* python/spot/impl.i: Add python bindings.
* spot/twaalgos/langmap.cc: Implement algo.
* spot/twaalgos/langmap.hh: Declare algo.
* spot/twaalgos/Makefile.am: Add new files.
* tests/python/langmap.py: Add tests.
* NEWS: Update.
This commit is contained in:
Alexandre GBAGUIDI AISSE 2016-12-12 16:45:03 +01:00
parent 9a204b770f
commit 8a0eed6cef
6 changed files with 234 additions and 0 deletions

104
tests/python/langmap.py Normal file
View file

@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-
# Copyright (C) 2016 Laboratoire de Recherche et Développement de l'Epita.
#
# 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 <http:#www.gnu.org/licenses/>.
import spot
import re
import sys
def test_langmap_functions_for(aut, expected):
# First, let's get aut's languages map as v.
v = ''
try:
v = spot.language_map(aut)
except Exception as e:
# If aut is not deterministic and the exception is as expected then
# it is ok.
if 'language_map only works with deterministic automata' in str(e)\
and not spot.is_deterministic(aut):
return
else:
print(e, file=sys.stderr)
exit(1)
# Now let's check highligthed states.
spot.highlight_languages(aut, v)
lines = aut.to_str('hoa', '1.1').split('\n')
colors_l = []
for line in lines:
if 'spot.highlight.states' in line:
l = [int(w) for w in \
re.search(': (.+?)$', line).group(1).split(' ')]
if l[1::2] != expected:
print('expected:' + repr(expected) +
' but got:' + repr(l[1::2]), file=sys.stderr)
exit(1)
aut_l = []
expected_l = []
aut_l.append(spot.translate('(a U b) & GFc & GFd', 'BA', 'deterministic'))
expected_l.append([0, 1, 1, 1])
aut_l.append(spot.translate('GF(a <-> b) | c', 'BA', 'deterministic'))
expected_l.append([0, 1, 2, 2])
aut_l.append(spot.translate('GF(a <-> b) | c | X!a', 'BA', 'deterministic'))
expected_l.append([0, 1, 2, 3, 3])
aut = spot.automaton("""
HOA: v1
States: 4
properties: implicit-labels trans-labels no-univ-branch deterministic complete
acc-name: Rabin 2
Acceptance: 4 (Fin(0)&Inf(1))|(Fin(2)&Inf(3))
Start: 0
AP: 2 "p0" "p1"
--BODY--
State: 0 {0}
1
0
3
2
State: 1 {1}
1
0
3
2
State: 2 {0 3}
1
0
3
2
State: 3 {1 3}
1
0
3
2
--END--
""")
aut_l.append(aut)
expected_l.append([0, 0, 0, 0])
# Add a non deterministic test:
aut_l.append(spot.translate('GF(a <-> XXb) | Xc', 'BA'))
expected_l.append([])
len_aut = len(aut_l)
for i in range(0, len_aut):
test_langmap_functions_for(aut_l[i], expected_l[i])