testall-coffee.zn
3.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# test net with all features
lang coffee
declare """
MAX = 5
abs = Math.abs
max = Math.max
"""
net "test net" :
place p0 = dot # ensure finite execution
place p1 number = 0, 1, 2
place p2 number = 1, 2, 3
place p3 number = MAX, {MAX+1}
# values
trans t01 :
< p0 val = dot
< p1 val = 1
> p2 val = 2
# variables
trans t02 x > 0 :
< p0 val = dot
< p1 var = x
> p2 var = x
# input multiarc, expressions
trans t03 x != y :
< p0 val = dot
< p1 var = x
< p1 var = y
> p2 expr = x+y
# input expressions
trans t04 x > 0 :
< p0 val = dot
< p1 var = x
< p1 expr = x+1
> p2 expr = x+2
# output multiarc, expressions reuse, untyped output
trans t05 x != y :
< p0 val = dot
< p1 var = x
< p1 var = y
< p1 expr = abs(x - y)
> p2 var = x
> p2 expr = y+1
> p3 expr = abs(x - y)
# test on input
trans t06 x != y :
< p0 val = dot
< p1 var = x
< p2 ?var = y
> p3 expr = x+y
# test on input multiarc
trans t07 x != y :
< p0 val = dot
< p1 var = x
< p1 ?var = y
> p3 expr = x+y
# only test inputs
trans t08 x != y :
< p0 val = dot
< p1 ?var = x
< p2 ?var = y
> p3 expr = x+y
# only tests in input multiarc
trans t09 x != y :
< p0 val = dot
< p1 ?var = x
< p1 ?var = y
> p3 expr = x+y
# test on output
trans t10 x != y :
< p0 val = dot
< p1 var = x
< p2 var = y
> p3 ?expr = x+y
# flush and fill arcs
trans t11 m.len() > 0 :
< p0 val = dot
< p1 flush = m
< p3 flush+ = n
> p2 fill = m.copy().add(n)
# test flush and test fill
trans t12 m.len() > 0 :
< p0 val = dot
< p1 ?flush = m
> p2 ?fill = m.copy().add(m)
# multiarc fill
trans t13 m.len() > 0 :
< p0 val = dot
< p1 flush = m
> p1 fill = m
> p1 fill = m.map((v, c) -> [v+1, c])
# inhibitor value
trans t14 :
< p0 val = dot
< p1 !val = 1
> p2 val = 2
# inhibitor variable
trans t15 :
< p0 val = dot
< p1 var = x
< p2 ![y<x]var = y
> p3 val = 2
# inhibitor expression
trans t16 :
< p0 val = dot
< p1 var = x
< p2 !expr = x+1
> p3 val = 2
# tuples
place p5 (number, number)
place p6 (string, (number, number), boolean)
# input/output and nested
trans t17 :
< p0 val = dot
< p5 (var, var) = (x, y)
< p6 (var, (var, var), var) = (z, (x, y), b)
> p6 (expr, (var, var), expr) = (["#{x}+#{y}"], (x, y), {x==y})
# partially matched tuples
trans t18 :
< p0 val = dot
< p5 var = x
> p6 (expr, var, expr) = (["#{x}"], x, {max(x...)>0})
# tests
trans t19 :
< p0 val = dot
< p5 ?(var, val) = (x, 0)
> p6 ?(var, expr, val) = (x, {[x+1, x]}, true)
# multiarc
trans t20 :
< p0 val = dot
< p5 (var, val) = (x, 0)
< p5 var = y
> p6 (expr, var, val) = (["#{x}"], y, true)
> p6 (expr, (var, expr), val) = (["#{x}"], (x, {x-1}), true)
# inhibitor
trans t22 :
< p0 val = dot
< p5 !(var, val) = (x, 0)