* spot/tl/delta2.cc, spot/tl/delta2.hh: New files. * spot/tl/Makefile.am: Add them. * python/spot/impl.i: Include delta2.hh. * tests/python/delta2.py: New file. * tests/Makefile.am: Add it. * NEWS: Mention the change.
57 lines
2.2 KiB
Python
Executable file
57 lines
2.2 KiB
Python
Executable file
#!/usr/bin/python3
|
|
# -*- mode: python; 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 <http://www.gnu.org/licenses/>.
|
|
|
|
import spot
|
|
from unittest import TestCase
|
|
tc = TestCase()
|
|
|
|
def generate_formulas():
|
|
for i in ['{} {} ({} {} {})', '({} {} {}) {} {}']:
|
|
for k in "MWUR":
|
|
for l in "MWUR":
|
|
for a in ['a', 'false', 'true']:
|
|
for b in ['b', 'false', 'true']:
|
|
for c in ['c', 'false', 'true']:
|
|
inner = i.format(a,k,b,l,c);
|
|
for j in ['GF({})', 'FG({})',
|
|
'({}) W d', '({}) U d',
|
|
'd W ({})', 'd U ({})',
|
|
'({}) R d', '({}) M d',
|
|
'd R ({})', 'd M ({})']:
|
|
yield j.format(inner)
|
|
|
|
for j1 in ['G(F({}){}F(e {} f))',
|
|
'F(G({}){}G(e {} f))']:
|
|
for j2 in "&|":
|
|
for j3 in "MWUR":
|
|
yield j1.format(inner,j2,j3)
|
|
|
|
seen = set()
|
|
for f in generate_formulas():
|
|
ltl_in = spot.formula(f)
|
|
if ltl_in in seen:
|
|
continue
|
|
seen.add(ltl_in)
|
|
ltl_out = spot.to_delta2(ltl_in)
|
|
ok = spot.are_equivalent(ltl_in, ltl_out)
|
|
din = ltl_in.is_delta2()
|
|
dout = ltl_out.is_delta2()
|
|
print(f"{ok:1} {din:1}{dout:1} {ltl_in::30} {ltl_out::30}")
|
|
tc.assertTrue(ok)
|
|
tc.assertTrue(dout)
|