#!/bin/sh # -*- coding: utf-8 -*- # Copyright (C) 2011, 2012, 2014, 2015, 2016, 2017, 2019, 2020 Laboratoire # de Recherche et Développement de l'Epita (LRDE). # # 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 divine compile > output 2>&1 set -e if ! test -x "`command -v spins`"; then echo "spins not installed." else # Promela for opt in '' '--compress 1'; do run 0 ../modelcheck --is-empty $opt --model $srcdir/elevator2.1.pm \ --formula '!G("req[1]==1" -> (F("p==1" && "cabin_0._pc==2")))' run 1 ../modelcheck --is-empty $opt --model $srcdir/elevator2.1.pm \ --formula 'F("p==2")' done fi if grep -i -- --ltsmin output; then : else echo "divine not installed, or no ltsmin interface" exit 77 fi # dve2 for opt in '' '--compress 1'; do # The three examples from the README. # (Don't run the first one using "run 0" because it would take too much # time with valgrind.). ../modelcheck --is-empty $opt --model $srcdir/beem-peterson.4.dve \ --formula '!GF(P_0.CS|P_1.CS|P_2.CS|P_3.CS)' \ | grep -v pages > stdout1 # same formula, different syntax. ../modelcheck --is-empty $opt --model $srcdir/beem-peterson.4.dve \ --formula '!GF("P_0==CS"|"P_1 == CS"|"P_2 ==CS"|"P_3== CS")' \ | grep -v pages > stdout2 cmp stdout1 stdout2 run 1 ../modelcheck --is-empty $opt --model $srcdir/beem-peterson.4.dve \ --formula '!G(P_0.wait -> F P_0.CS)' run 1 ../modelcheck --is-empty $opt --model $srcdir/beem-peterson.4.dve\ --formula '!G("pos[1] < 3")' done # Now check some error messages. run 2 ../modelcheck --model foo.dve --formula "F(P_0.CS)" 2>stderr cat stderr grep 'Cannot open' stderr # the dve2C file was generated in the current directory run 2 ../modelcheck --model beem-peterson.4.dve2C \ --formula 'Xfoo | P_0.f & X"P_0.k < 2xx" | G"pos[0]"' 2>stderr cat stderr grep 'No variable' stderr grep 'No state' stderr grep 'Unexpected' stderr # Test parallel algorithms # Test Deadlock run 0 ../modelcheck --model $srcdir/beem-peterson.4.dve \ --csv --has-deadlock -p 1 | grep -v Thread > stdout test `grep "#" stdout | awk -F',' '{print $5}'` = "no_deadlock" # Test Bloemen run 0 ../modelcheck --model $srcdir/beem-peterson.4.dve \ --csv --bloemen -p 1 | grep -v Thread > stdout test `grep "#" stdout | awk -F',' '{print $8}'` -eq 29115 # Test Multithreaded Bloemen run 0 ../modelcheck --model $srcdir/beem-peterson.4.dve \ --csv --bloemen -p 3 | grep -v Thread > stdout test `grep "#" stdout | awk -F',' '{print $8}'` -eq 29115 run 0 ../modelcheck --model $srcdir/beem-peterson.4.dve \ --formula '!GF(P_0.CS|P_1.CS|P_2.CS|P_3.CS)' --csv \ --bloemen-ec -p 3 | grep -v Thread > stdout test `grep "#" stdout | awk -F',' '{print $8}'` -eq 1148594 # Test CNDFS run 0 ../modelcheck --model $srcdir/beem-peterson.4.dve \ --formula '!GF(P_0.CS|P_1.CS|P_2.CS|P_3.CS)' --csv \ --cndfs -p 3 | grep -v Thread >stdout test `grep "#" stdout | awk -F',' '{print $5}'` = "empty" # Test SWARMING run 0 ../modelcheck --model $srcdir/beem-peterson.4.dve \ --formula '!GF(P_0.CS|P_1.CS|P_2.CS|P_3.CS)' --csv \ --swarming -p 3 | grep -v Thread > stdout test `grep "#" stdout | awk -F',' '{print $5}'` = "empty" # Test REACHABILITY run 0 ../modelcheck --model $srcdir/beem-peterson.4.dve \ --reachability -p 1 --csv | grep -v Thread > stdout test `grep "#" stdout | awk -F',' '{print $6}'` -eq 1119560 test `grep "#" stdout | awk -F',' '{print $7}'` -eq 3864896