-- 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 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 %