autfilt: add option (y) to --dot to split universal transitions

Fixes #207

* NEWS: Informations about the option 'y' for --dot added
* bin/common_aoutput.cc: Documentation for the option 'y'
for --dot added
* spot/twaalgos/dot.cc (print_dst, process_link): Functions
modified for the new option
* tests/core/alternating.test: Tests added
This commit is contained in:
Arthur Remaud 2017-02-02 15:18:32 +01:00
parent 5516209d8c
commit 34859568cd
4 changed files with 376 additions and 7 deletions

337
tests/core/alternating.test Normal file → Executable file
View file

@ -353,6 +353,343 @@ State: 0
EOF
diff out5 expect
# Test if split option is correct
cat >ex6<<EOF
HOA: v1.1
States: 2
Start: 0&1
AP: 3 "c" "b" "a"
Acceptance: 1 Fin(0)
spot.highlight.edges: 2 1 3 2
--BODY--
State: 0
[!0&!2] 0
[!0&1&2] 0&1
[!0&2] 0&1
State: 1
[1] 1
--END--
EOF
run 0 autfilt --dot='baryf(Lato)' ex6 > ex6.dot
cat >expect6.dot<<EOF
digraph G {
rankdir=LR
label=<Fin(<font color="#5DA5DA">⓿</font>)>
labelloc="t"
node [shape="circle"]
fontname="Lato"
node [fontname="Lato"]
edge [fontname="Lato"]
I [label="", style=invis, width=0]
I -> -1 [arrowhead=onormal]
-1 [label=<>,shape=point]
-1 -> 0
-1 -> 1
0 [label=<0>]
0 -> 0 [label=<!a &amp; !c>]
0 -> -1.1 [label=<a &amp; b &amp; !c>, style=bold, color="#F17CB0", arrowhead=onormal]
-1.1 [label=<>,shape=point]
-1.1 -> 0 [style=bold, color="#F17CB0"]
-1.1 -> 1 [style=bold, color="#F17CB0"]
0 -> -1.2 [label=<a &amp; !c>, style=bold, color="#FAA43A", arrowhead=onormal]
-1.2 [label=<>,shape=point]
-1.2 -> 0 [style=bold, color="#FAA43A"]
-1.2 -> 1 [style=bold, color="#FAA43A"]
1 [label=<1>]
1 -> 1 [label=<b>]
}
EOF
diff ex6.dot expect6.dot
cat >ex7<<EOF
HOA: v1
tool: "LTL3HOA"
name: "SLAA for c R (c | G(a & b) | (F!b & F!a))"
States: 5
AP: 3 "c" "a" "b"
Start: 0
Acceptance: 2 Fin(1) & Fin(0)
--BODY--
State: 0 "c R (c | G(a & b) | (F!b & F!a))"
[(0)] 4
[(!0 & !1 & !2)] 0
[(!0 & 1 & 2)] 0&1
[(!0 & 1 & !2)] 0&2
[(!0 & !1 & 2)] 0&3
[(!0 & 1 & 2)] 0&2&3
State: 1 "G(a & b)"
[(1 & 2)] 1
State: 2 "F!a"
[(!1)] 4
[(1)] 2 {1}
State: 3 "F!b"
[(!2)] 4
[(2)] 3 {0}
State: 4 "t"
[t] 4
--END--
EOF
run 0 autfilt --dot='sbarf(Lato)' ex7 > ex7.dot
color='<font color="#5DA5DA">⓿</font>'
cat >expect7.dot<<EOF
digraph G {
rankdir=LR
label=<Fin(<font color="#F17CB0">❶</font>) &amp; Fin($color)>
labelloc="t"
fontname="Lato"
node [fontname="Lato"]
edge [fontname="Lato"]
I [label="", style=invis, width=0]
I -> 0
subgraph cluster_0 {
color=green
label=""
4 [label="t"]
4 -> 4 [label=<1>]
}
subgraph cluster_1 {
color=green
label=""
1 [label="G(a & b)"]
1 -> 1 [label=<a &amp; b>]
}
subgraph cluster_2 {
color=red
label=""
2 [label="F!a"]
2 -> 4 [label=<!a>]
2 -> 2 [label=<a<br/><font color="#F17CB0">❶</font>>]
}
subgraph cluster_3 {
color=red
label=""
3 [label="F!b"]
3 -> 4 [label=<!b>]
3 -> 3 [label=<b<br/><font color="#5DA5DA">⓿</font>>]
}
subgraph cluster_4 {
color=green
label=""
0 [label="c R (c | G(a & b) | (F!b & F!a))"]
0 -> 4 [label=<c>]
0 -> 0 [label=<!a &amp; !b &amp; !c>]
0 -> -1.4 [label=<a &amp; b &amp; !c>, arrowhead=onormal]
-1.4 [label=<>,shape=point]
-1.4 -> 0
-1.4 -> 1
0 -> -4.4 [label=<a &amp; !b &amp; !c>, arrowhead=onormal]
-4.4 [label=<>,shape=point]
-4.4 -> 0
-4.4 -> 2
0 -> -7.4 [label=<!a &amp; b &amp; !c>, arrowhead=onormal]
-7.4 [label=<>,shape=point]
-7.4 -> 0
-7.4 -> 3
0 -> -10.4 [label=<a &amp; b &amp; !c>, arrowhead=onormal]
-10.4 [label=<>,shape=point]
-10.4 -> 0
-10.4 -> 2
-10.4 -> 3
}
}
EOF
diff ex7.dot expect7.dot
cat >ex8<<EOF
HOA: v1
tool: "LTL3HOA"
name: "SLAA for c R (c | G(a & b) | (F!b & F!a))"
States: 5
AP: 3 "c" "a" "b"
Start: 0
Acceptance: 2 Fin(1) & Fin(0)
--BODY--
State: 0 "c R (c | G(a & b) | (F!b & F!a))"
[(0)] 4
[(!0 & !1 & !2)] 0
[(!0 & 1 & 2)] 0&1
[(!0 & 1 & !2)] 0&2
[(!0 & !1 & 2)] 0&3
State: 1 "G(a & b)"
[(1 & 2)] 1
[(!0 & 1 & 2)] 0&2&3
State: 2 "F!a"
[(!1)] 4
[(1)] 2 {1}
State: 3 "F!b"
[(!2)] 4
[(2)] 3 {0}
State: 4 "t"
[t] 4
--END--
EOF
run 0 autfilt --dot='sbarf(Lato)' ex8 > ex8.dot
cat >expect8.dot<<EOF
digraph G {
rankdir=LR
label=<Fin(<font color="#F17CB0">❶</font>) &amp; Fin($color)>
labelloc="t"
fontname="Lato"
node [fontname="Lato"]
edge [fontname="Lato"]
I [label="", style=invis, width=0]
I -> 0
subgraph cluster_0 {
color=green
label=""
4 [label="t"]
4 -> 4 [label=<1>]
}
subgraph cluster_1 {
color=red
label=""
2 [label="F!a"]
2 -> 4 [label=<!a>]
2 -> 2 [label=<a<br/><font color="#F17CB0">❶</font>>]
}
subgraph cluster_2 {
color=red
label=""
3 [label="F!b"]
3 -> 4 [label=<!b>]
3 -> 3 [label=<b<br/><font color="#5DA5DA">⓿</font>>]
}
subgraph cluster_3 {
color=green
label=""
0 [label="c R (c | G(a & b) | (F!b & F!a))"]
0 -> 4 [label=<c>]
0 -> 0 [label=<!a &amp; !b &amp; !c>]
0 -> -1.3 [label=<a &amp; b &amp; !c>, arrowhead=onormal]
-1.3 [label=<>,shape=point]
-1.3 -> 0
-1.3 -> 1
0 -> -4.3 [label=<a &amp; !b &amp; !c>, arrowhead=onormal]
-4.3 [label=<>,shape=point]
-4.3 -> 0
-4.3 -> 2
0 -> -7.3 [label=<!a &amp; b &amp; !c>, arrowhead=onormal]
-7.3 [label=<>,shape=point]
-7.3 -> 0
-7.3 -> 3
1 [label="G(a & b)"]
1 -> 1 [label=<a &amp; b>]
1 -> -10.3 [label=<a &amp; b &amp; !c>, arrowhead=onormal]
-10.3 [label=<>,shape=point]
-10.3 -> 0
-10.3 -> 2
-10.3 -> 3
}
}
EOF
diff ex8.dot expect8.dot
cat >ex9 <<EOF
HOA: v1.1
States:3
Start: 0
AP: 3 "c" "b" "a"
Acceptance: 1 Fin(0)
spot.highlight.edges: 1 1 2 1 3 2
--BODY--
State: 0
[0&1] 1&2
State: 1
[1&2] 1&2
State: 2
[!0&!1&!2] 1&2
--END--
EOF
run 0 autfilt --dot='baryf(Lato)' ex9 > ex9.dot
cat >expect9.dot <<EOF
digraph G {
rankdir=LR
label=<Fin(<font color="#5DA5DA">⓿</font>)>
labelloc="t"
node [shape="circle"]
fontname="Lato"
node [fontname="Lato"]
edge [fontname="Lato"]
I [label="", style=invis, width=0]
I -> 0
0 [label=<0>]
0 -> -1.1 [label=<b &amp; c>, style=bold, color="#F17CB0", arrowhead=onormal]
-1.1 [label=<>,shape=point]
-1.1 -> 1 [style=bold, color="#F17CB0"]
-1.1 -> 2 [style=bold, color="#F17CB0"]
1 [label=<1>]
1 -> -1.1 [label=<a &amp; b>, style=bold, color="#F17CB0", arrowhead=onormal]
2 [label=<2>]
2 -> -1.2 [label=<!a &amp; !b &amp; !c>, style=bold, color="#FAA43A", $style]
-1.2 [label=<>,shape=point]
-1.2 -> 1 [style=bold, color="#FAA43A"]
-1.2 -> 2 [style=bold, color="#FAA43A"]
}
EOF
diff ex9.dot expect9.dot
cat >ex10 <<EOF
HOA: v1.1
States:3
Start: 0
AP: 3 "c" "b" "a"
Acceptance: 1 Fin(0)
spot.highlight.edges: 1 1 2 3 3 2
--BODY--
State: 0
[0&1] 1&2
State: 1
[1&2] 1&2
State: 2
[!0&!1&!2] 1&2
--END--
EOF
run 0 autfilt --dot='baryf(Lato)' ex10 > ex10.dot
cat >expect10.dot <<EOF
digraph G {
rankdir=LR
label=<Fin(<font color="#5DA5DA">⓿</font>)>
labelloc="t"
node [shape="circle"]
fontname="Lato"
node [fontname="Lato"]
edge [fontname="Lato"]
I [label="", style=invis, width=0]
I -> 0
0 [label=<0>]
0 -> -1.1 [label=<b &amp; c>, style=bold, color="#F17CB0", arrowhead=onormal]
-1.1 [label=<>,shape=point]
-1.1 -> 1 [style=bold, color="#F17CB0"]
-1.1 -> 2 [style=bold, color="#F17CB0"]
1 [label=<1>]
1 -> -1.3 [label=<a &amp; b>, style=bold, color="#B276B2", arrowhead=onormal]
-1.3 [label=<>,shape=point]
-1.3 -> 1 [style=bold, color="#B276B2"]
-1.3 -> 2 [style=bold, color="#B276B2"]
2 [label=<2>]
2 -> -1.2 [label=<!a &amp; !b &amp; !c>, style=bold, color="#FAA43A", $style]
-1.2 [label=<>,shape=point]
-1.2 -> 1 [style=bold, color="#FAA43A"]
-1.2 -> 2 [style=bold, color="#FAA43A"]
}
EOF
diff ex10.dot expect10.dot
# Detect cases where alternation-removal cannot work.
cat >in <<EOF
HOA: v1