tock-mirror/testcases/automatic/usage-check-8.occ.test

135 lines
2.3 KiB
Plaintext

-- This file checks the array usage checking on channel arrays
PROC read(CHAN OF INT c)
INT x:
c ? x
:
PROC write(CHAN OF INT c)
c ! 0
:
PROC both(CHAN OF INT c)
INT x:
SEQ
c ? x
c ! x
:
PROC both.2(CHAN OF INT c, CHAN OF INT d)
PAR
read(c)
write(d)
:
PROC m()
[10]CHAN OF INT c:
%%
:
%PASS Safe direct parallel use of distinct
PAR
write(c[0])
read(c[1])
both(c[2])
%PASS Safe direct parallel use with overlap
PAR
write(c[0])
read(c[0])
both(c[1])
%FAIL Unsafe direct parallel use
PAR
write(c[0])
both(c[0])
%PASS Safe replicated parallel use of distinct
PAR i = 0 FOR 10
both(c[i])
%PASS Safe replicated parallel use with overlap #1
PAR i = 0 FOR 10
PAR
write(c[i])
read(c[i])
%PASS Safe replicated parallel use with overlap #2
PAR
PAR i = 0 FOR 10
write(c[i])
PAR j = 0 FOR 10
read(c[j])
%PASS Safe replicated parallel use with overlap #3
PAR
PAR i = 0 FOR 5
write(c[i])
PAR j = 0 FOR 5
read(c[j])
PAR i = 5 FOR 5
write(c[i])
PAR j = 5 FOR 5
read(c[j])
%PASS Safe replicated parallel use with overlap #4
PAR
PAR i = 0 FOR 10
IF
i >= 5
write(c[i])
TRUE
read(c[i])
PAR j = 0 FOR 10
IF
j >= 5
read(c[j])
TRUE
write(c[j])
%PASS Safe replicated parallel use with overlap #5
PAR
PAR i = 0 FOR 10
IF
(i = 5) OR (i >= 6)
write(c[i])
TRUE
read(c[i])
PAR j = 0 FOR 10
IF
(j >= 5) AND ((j = 5) OR (j = 6) OR (j > 6))
read(c[j])
TRUE
write(c[j])
%FAIL Unsafe replicated parallel use with overlap #3
PAR
PAR i = 0 FOR 5
write(c[i])
PAR j = 0 FOR 5
read(c[j])
PAR i = 4 FOR 5
write(c[i])
PAR j = 5 FOR 5
read(c[j])
%PASS Safe overlapping use with modulo (ring)
PAR i = 0 FOR 10
both.2(c[i],c[(i + 1) \ 10])
%FAIL Unsafe overlapping use with modulo (ring)
PAR i = 0 FOR 11
both.2(c[i],c[(i + 1) \ 10])
%PASS Safe overlapping use with modulo (pipeline)
PAR
PAR i = 0 FOR 9
both.2(c[i],c[(i + 1) \ 10])
c[0] ! 3
INT x:
c[9] ? x
%FAIL Unsafe overlapping use with modulo (pipeline)
PAR
PAR i = 0 FOR 9
both.2(c[(i + 1) \ 10],c[i])
c[0] ! 3
INT x:
c[9] ? x
%