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

263 lines
4.6 KiB
Plaintext

-- This file tests array uses with prior knowledge
PROC p(INT x, y, z)
INT i,j:
[10]INT a:
%%
:
PROC m()
SKIP
:
%PASS Distinct variables
SEQ
i, j := 1,2
PAR
a[i] := 0
a[j] := 0
%FAIL Same variable
SEQ
i, j := 1, 1
PAR
a[i] := 0
a[j] := 0
%PASS Distinct variable based on earlier equality
SEQ
i := j
PAR
a[i] := 0
a[j + 1] := 0
%PASS Distinct variables due to bounds
SEQ k = 0 FOR 4
PAR
a[4] := 0
a[k] := 0
%FAIL Non-distinct variables due to bounds
SEQ k = 0 FOR 4
PAR
a[3] := 0
a[k] := 0
%PASS Distinct due to IF
IF
i = 3
PAR
a[i] := 0
a[4] := 0
TRUE
SKIP
%FAIL Non-distinct despite IF
IF
i <= 4
PAR
a[i] := 0
a[4] := 0
TRUE
SKIP
%PASS Distinct variables, passed to PROC
PROC foo(INT x, INT y)
x, y := y, x
:
SEQ
i, j := 1, 2
foo(i, j)
%PASS Distinct array variables, passed to PROC
PROC foo(INT x, INT y)
x, y := y, x
:
SEQ
i, j := 1, 2
foo(a[i], a[j])
%PASS Distinct array variables, used in assignment
PROC foo(INT x, INT y)
x, y := y, x
:
SEQ
i, j := 1, 2
a[i], a[j] := 3, 4
%PASS IF, safe over replication
PAR k = 0 FOR 10
IF
k = 3
PAR
a[k] := 1
a[k+1] := 2
TRUE
SKIP
%FAIL IF, unsafe over replication
PAR k = 0 FOR 10
IF
k = 3
a[2] := 1
TRUE
a[k] := 3
%PASS IF, safe indirectly over replication
PAR k = 0 FOR 10
IF
k = 3
a[0] := 1
TRUE
SKIP
%PASS IF, safe indirectly over replication 2
PAR k = 0 FOR 10
IF
k = 3
a[0] := 1
k <> 0
a[k] := 1
TRUE
SKIP
%PASS IF, safe indirectly over replication 2B
PAR k = 0 FOR 10
IF
k = 3
a[0] := 1
k > 0
a[k] := 1
TRUE
SKIP
%PASS IF, safe indirectly over replication 3
PAR k = 0 FOR 9
IF
k = 0
a[9] := 3
TRUE
a[k] := 3
%FAIL IF, unsafe indirectly over replication
PAR k = 0 FOR 10
IF
k = 3
a[0] := 1
k = 0
a[k] := 1
TRUE
SKIP
%PASS Replicated, with VAL abbrev of replicator
PAR
PAR k = 0 FOR 5
VAL kay IS k + 5:
a[kay] := 4
a[4] := 3
%FAIL Replicated, with VAL abbrev of replicator (unsafe)
PAR
PAR k = 0 FOR 5
VAL kay IS k + 5:
a[kay] := 4
a[5] := 3
%PASS Replicated, with VAL and normal abbrev of replicator
PAR
PAR k = 0 FOR 5
VAL kayplus3 IS k + 3:
INT kay:
SEQ
kay := kayplus3 - 3
a[kay] := 4
a[5] := 3
%FAIL Replicated, with VAL and normal abbrev of replicator (unsafe)
PAR
PAR k = 0 FOR 5
VAL kayplus3 IS k + 4:
INT kay:
SEQ
kay := kayplus3 - 3
a[kay] := 4
a[5] := 3
%PASS Replicated, with VAL and normal abbrev of replicator in IF
PAR
PAR k = 0 FOR 5
VAL kayplus3 IS k + 3:
INT kay:
SEQ
IF
i > 65
kay := kayplus3 - 3
TRUE
kay := kayplus3 - 4
a[kay] := 4
a[5] := 3
%FAIL Replicated, with VAL and normal abbrev of replicator in IF (unsafe)
PAR
PAR k = 0 FOR 5
VAL kayplus3 IS k + 3:
INT kay:
SEQ
IF
i > 65
kay := kayplus3 - 3
TRUE
kay := kayplus3 - 2
a[kay] := 4
a[5] := 3
%PASS Replicated, following TRUE branch
PAR
a[0] := 3
PAR k = 0 FOR 10
IF
k = 0
SKIP
TRUE
a[k] := 4
%FAIL Replicated, following TRUE branch (unsafe)
PAR
a[0] := 3
PAR k = 0 FOR 10
IF
k = 1
SKIP
TRUE
a[k] := 4
%PASS Replicated, following NOT with = branch
PAR
a[0] := 3
PAR k = 0 FOR 10
IF
NOT (k = 0)
a[k] := 4
TRUE
SKIP
%FAIL Replicated, following NOT with = branch (unsafe)
PAR
a[0] := 3
PAR k = 0 FOR 10
IF
NOT (k = 0)
SKIP
TRUE
a[k] := 4
%PASS Replicated, following TRUE branch with OR
PAR
a[0] := 3
a[9] := 4
PAR k = 0 FOR 10
IF
(k = 0) OR (k = 9)
SKIP
TRUE
a[k] := 4
%PASS Replicated, following TRUE branch with NOT and AND
PAR
a[0] := 3
a[9] := 4
PAR k = 0 FOR 10
IF
NOT ((k <> 0) AND (k <> 9))
SKIP
TRUE
a[k] := 4
%FAIL Replicated, following TRUE branch with bad AND
PAR
a[0] := 3
a[9] := 4
PAR k = 0 FOR 10
IF
(k = 0) AND (k = 9)
SKIP
TRUE
a[k] := 4
%