#!/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 # Check the scc_info categorization of SCCs as accepting/rejecting # by looking at the dot output. cat < in.hoa HOA: v1 States: 11 Start: 1 AP: 2 "a" "b" acc-name: generalized-Buchi 2 Acceptance: 3 Inf(0)&Inf(1)&Fin(2) --BODY-- State: 0 {2} [0&1] 0 {0 1} [!0&!1] 0 [0] 5 State: 1 [1] 4 [0&!1] 3 State: 4 [!1] 4 {1 2} [1] 2 State: 2 [0] 0 [1] 7 State: 3 [0&1] 1 {1 0} State: 5 [t] 6 State: 6 [t] 5 State: 7 [!0&1] 7 {0 1} /* This state and the next one differs by */ [0&1] 7 {0 2} /* the order of the self loops. */ [t] 8 State: 8 [!0&1] 8 {0 2} [0&1] 8 {0 1} [t] 9 State: 9 [!0&1] 9 {0 2} [0&1] 10 {0 1} State: 10 [!0&1] 9 {0 1} [0&1] 10 {0 2} --END-- EOF run 0 autfilt --dot=asi in.hoa > out.dot # The important stuff is the color=xxx lines cat <expected digraph "" { rankdir=LR label="(Inf(0)&Inf(1)) & Fin(2)\n[Streett-like 3]" labelloc="t" node [shape="ellipse",width="0.5",height="0.5"] node [id="S\N"] I [label="", style=invis, width=0] I -> 1 subgraph cluster_0 { color=grey id="SCC0" label="" 5 [label="5"] 6 [label="6"] } subgraph cluster_1 { color=grey id="SCC1" label="" 0 [label="0"] } subgraph cluster_2 { color=green id="SCC2" label="" 9 [label="9"] 10 [label="10"] } subgraph cluster_3 { color=green id="SCC3" label="" 8 [label="8"] } subgraph cluster_4 { color=green id="SCC4" label="" 7 [label="7"] } subgraph cluster_5 { color=black id="SCC5" label="" 2 [label="2"] } subgraph cluster_6 { color=red id="SCC6" label="" 4 [label="4"] } subgraph cluster_7 { color=green id="SCC7" label="" 1 [label="1"] 3 [label="3"] } 0 -> 0 [label="a & b\n{0,1,2}", id="E1", tooltip="\\\\E\n#1"] 0 -> 0 [label="!a & !b\n{2}", id="E2", tooltip="\\\\E\n#2"] 0 -> 5 [label="a\n{2}", id="E3", tooltip="\\\\E\n#3"] 1 -> 4 [label="b", id="E4", tooltip="\\\\E\n#4"] 1 -> 3 [label="a & !b", id="E5", tooltip="\\\\E\n#5"] 2 -> 0 [label="a", id="E8", tooltip="\\\\E\n#8"] 2 -> 7 [label="b", id="E9", tooltip="\\\\E\n#9"] 3 -> 1 [label="a & b\n{0,1}", id="E10", tooltip="\\\\E\n#10"] 4 -> 4 [label="!b\n{1,2}", id="E6", tooltip="\\\\E\n#6"] 4 -> 2 [label="b", id="E7", tooltip="\\\\E\n#7"] 5 -> 6 [label="1", id="E11", tooltip="\\\\E\n#11"] 6 -> 5 [label="1", id="E12", tooltip="\\\\E\n#12"] 7 -> 7 [label="!a & b\n{0,1}", id="E13", tooltip="\\\\E\n#13"] 7 -> 7 [label="a & b\n{0,2}", id="E14", tooltip="\\\\E\n#14"] 7 -> 8 [label="1", id="E15", tooltip="\\\\E\n#15"] 8 -> 8 [label="!a & b\n{0,2}", id="E16", tooltip="\\\\E\n#16"] 8 -> 8 [label="a & b\n{0,1}", id="E17", tooltip="\\\\E\n#17"] 8 -> 9 [label="1", id="E18", tooltip="\\\\E\n#18"] 9 -> 9 [label="!a & b\n{0,2}", id="E19", tooltip="\\\\E\n#19"] 9 -> 10 [label="a & b\n{0,1}", id="E20", tooltip="\\\\E\n#20"] 10 -> 9 [label="!a & b\n{0,1}", id="E21", tooltip="\\\\E\n#21"] 10 -> 10 [label="a & b\n{0,2}", id="E22", tooltip="\\\\E\n#22"] } EOF diff out.dot expected # While we are here, make sure scc_filter removes those grey SCCs. autfilt --small -x simul=0 in.hoa -H > out.hoa cat >expected.hoa <input <<'EOF' HOA: v1 States: 2 Start: 0&1 AP: 2 "a" "b" acc-name: Buchi Acceptance: 2 Inf(0) & Fin(1) --BODY-- State: 0 {0 1} [0&1] 0 [!0&1] 1 State: 1 {0 1} [0&!1] 0 [!0&!1] 1 --END-- EOF # This has one useless component autfilt --dot=s input | grep grey