// RUN: %boogie -typeEncoding:n -logPrefix:0n "%s" > "%t"
// RUN: %diff "%s.n.expect" "%t"
// RUN: %boogie -typeEncoding:p -logPrefix:0p "%s" > "%t"
// RUN: %diff "%s.p.expect" "%t"
// RUN: %boogie -typeEncoding:a -logPrefix:0a "%s" > "%t"
// RUN: %diff "%s.a.expect" "%t"
var p : [int]a;
procedure P() returns () modifies p; {
p[13] := 5;
p[17] := true;
p[13] := false;
p[17] := 8;
assert p[13] == 5 && !p[13] && p[17] == 8 && p[17];
assert p == p[28 := p]; // error
}
var q : [int][a]b;
procedure Q() returns () modifies q; {
q[17] := q[17][true := 13];
q[17] := q[17][true := false];
q[16] := q[17][true := 14];
assert q[17][true] == 13 && !q[17][true];
assert q[17][true] == 14; // error
}
procedure R() returns () modifies p; {
p[7] := 28;
p[5] := p[7];
assert p[7] == 28;
assert p[6] == 28; // error
}