263 lines
4.6 KiB
Plaintext
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
|
|
|
|
|
|
|
|
%
|