diff --git a/wrap/python/buddy.i b/wrap/python/buddy.i index e9fc2dd35..e90945e4c 100644 --- a/wrap/python/buddy.i +++ b/wrap/python/buddy.i @@ -164,6 +164,7 @@ bdd bdd_xor(const bdd &l, const bdd &r); bdd bdd_imp(const bdd &l, const bdd &r); bdd bdd_biimp(const bdd &l, const bdd &r); bdd bdd_setxor(const bdd &l, const bdd &r); +int bdd_implies(const bdd &l, const bdd &r); bdd bdd_ite(const bdd &f, const bdd &g, const bdd &h); bdd bdd_exist(const bdd &r, const bdd &var); bdd bdd_existcomp(const bdd &r, const bdd &var); diff --git a/wrap/python/tests/Makefile.am b/wrap/python/tests/Makefile.am index b75a1d3b9..59bb712e0 100644 --- a/wrap/python/tests/Makefile.am +++ b/wrap/python/tests/Makefile.am @@ -31,11 +31,12 @@ check_SCRIPTS = run TESTS = \ alarm.py \ - ltlsimple.py \ - ltlparse.py \ bddnqueen.py \ - ltl2tgba.test \ + implies.py \ interdep.py \ + ltl2tgba.test \ + ltlparse.py \ + ltlsimple.py \ minato.py \ modgray.py \ optionmap.py \ diff --git a/wrap/python/tests/implies.py b/wrap/python/tests/implies.py new file mode 100755 index 000000000..6f8db23f6 --- /dev/null +++ b/wrap/python/tests/implies.py @@ -0,0 +1,63 @@ +# -*- mode: python; coding: utf-8 -*- +# Copyright (C) 2012 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 2 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 Spot; see the file COPYING. If not, write to the Free +# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA +# 02111-1307, USA. + +import sys +from buddy import * + +bdd_init(10000, 10000) +bdd_setvarnum(5) + +V = [bdd_ithvar(i) for i in range(5)] + +a = V[0] & V[1] & -V[2] +b = V[0] & V[1] & -V[2] & -V[3] +c = -V[0] & V[1] & -V[2] & -V[3] +d = V[1] & -V[2] +e = V[1] & V[2] & -V[3] & V[4] +f = V[0] & -V[3] & V[4] +g = -V[0] | V[1] + +assert(bdd_implies(b,a)) +assert(not bdd_implies(a,b)) +assert(not bdd_implies(c,a)) +assert(bdd_implies(a,d)) +assert(bdd_implies(b,d)) +assert(bdd_implies(c,d)) +assert(bdd_implies(d,d)) +assert(not bdd_implies(e,d)) +assert(not bdd_implies(d,e)) +assert(not bdd_implies(f,e)) +assert(not bdd_implies(e,f)) +assert(bdd_implies(bddfalse,f)) +assert(not bdd_implies(bddtrue,f)) +assert(bdd_implies(f,bddtrue)) +assert(not bdd_implies(f,bddfalse)) +assert(bdd_implies(a,g)) + +a = (-V[2] & (-V[1] | V[0])) | (-V[0] & V[1] & V[2]) +b = V[1] | -V[2] +assert(bdd_implies(a,b)) + +# Cleanup all BDD variables before calling bdd_done(), otherwise +# bdd_delref will be called after bdd_done() and this is unsafe in +# optimized builds. +V = a = b = c = d = e = f = g = 0; +bdd_done()