| buf0 = mk(mkarray(i→n(2)), 2, 0, 0) ⊦ ⟪push#(a; buf0)⟫ ⟪push#(b; buf0) ; pop#(; buf0, a0) ; assert#(a0 = a) ; push#(c; buf0) ; pop#(; buf0, a0) ; assert#(a0 = b) ; pop#(; buf0, a0) ; assert#(a0 = c)⟫ true |
buf0 = mk(mkarray(i→n(2)), 2, 0, 0) ⊦ ⟪let j = (buf0 .first + buf0 .len) % buf0 .size in { buf := buf0 ; put#(j, a; buf .data) }⟫ ⟪buf := buf .len:= (buf .len + 1)⟫ ⟪push#(b; buf) ; pop#(; buf, a0) ; assert#(a0 = a) ; push#(c; buf) ; pop#(; buf, a0) ; assert#(a0 = b) ; pop#(; buf, a0) ; assert#(a0 = c)⟫ true
[[CONCRETESIMPRULES : ([CSIMPDECL : push# (a; buf) { let j = ( buf .first + buf .len ) % buf .size in put#(j, a; buf .data) ; buf := buf .len:= (buf .len + 1) }])]]