Skip to content

Commit 86d112d

Browse files
committed
fixed test
1 parent a3c36de commit 86d112d

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

Test/datatypes/node-client.bpl

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,27 @@
33

44
type TaggedLocNode V = TaggedLoc (Node V) Unit;
55

6-
datatype Treiber<V> { Treiber(top: Option (LocNode V), {:linear} nodes: Map (LocNode V) (Node V)) }
6+
datatype Treiber<V> { Treiber(top: Option (LocNode V), {:linear} nodes: Map (One (LocNode V)) (Node V)) }
77
type LocTreiber V = Loc (Treiber V);
88
type TaggedLocTreiber V = TaggedLoc (Treiber V) Unit;
99

1010
type X;
1111
var ts: Map (LocTreiber X) (Treiber X);
1212

13+
function {:inline} SubsetInv(ts: Map (LocTreiber X) (Treiber X), ref_t: LocTreiber X): bool
14+
{
15+
(var t := Map_At(ts, ref_t);
16+
(var m := t->nodes;
17+
(forall x: LocNode X:: BetweenSet(m->val, t->top, None())[x] ==> Set_Contains(m->dom, One(x)))))
18+
}
19+
1320
procedure YieldInv(ref_t: LocTreiber X)
1421
requires Map_Contains(ts, ref_t);
1522
requires (var t := Map_At(ts, ref_t); Between(t->nodes->val, t->top, None(), None()));
16-
requires (var t := Map_At(ts, ref_t); (var m := t->nodes; IsSubset(BetweenSet(m->val, t->top, None()), m->dom->val)));
23+
requires SubsetInv(ts, ref_t);
1724
ensures Map_Contains(ts, ref_t);
1825
ensures (var t := Map_At(ts, ref_t); Between(t->nodes->val, t->top, None(), None()));
19-
ensures (var t := Map_At(ts, ref_t); (var m := t->nodes; IsSubset(BetweenSet(m->val, t->top, None()), m->dom->val)));
26+
ensures SubsetInv(ts, ref_t);
2027
modifies ts;
2128
{
2229
var x: X;
@@ -31,8 +38,8 @@ modifies ts;
3138
var loc_n_opt: Option (LocNode X);
3239
assert Map_Contains(ts, loc_t);
3340
treiber := Map_At(ts, loc_t);
34-
assume treiber->top is Some && Map_Contains(treiber->nodes, treiber->top->t);
35-
Node(loc_n_opt, x) := Map_At(treiber->nodes, treiber->top->t);
41+
assume treiber->top is Some && Map_Contains(treiber->nodes, One(treiber->top->t));
42+
Node(loc_n_opt, x) := Map_At(treiber->nodes, One(treiber->top->t));
3643
treiber->top := loc_n_opt;
3744
ts := Map_Update(ts, loc_t, treiber);
3845
}
@@ -44,8 +51,8 @@ modifies ts;
4451
var loc_n: LocNode X;
4552
assert Map_Contains(ts, loc_t);
4653
treiber := Map_At(ts, loc_t);
47-
assume !Map_Contains(treiber->nodes, loc_n);
48-
treiber->nodes := Map_Update(treiber->nodes, loc_n, Node(treiber->top, x));
54+
assume !Map_Contains(treiber->nodes, One(loc_n));
55+
treiber->nodes := Map_Update(treiber->nodes, One(loc_n), Node(treiber->top, x));
4956
treiber->top := Some(loc_n);
5057
ts := Map_Update(ts, loc_t, treiber);
5158
}

0 commit comments

Comments
 (0)