summaryrefslogtreecommitdiff
path: root/Test/dafny0/fun-with-slices.dfy
blob: 3d8da242f0a85c2aa79d14fcea15e09f9995e417 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// RUN: %dafny /compile:0 /print:"%t.print" /dprint:"%t.dprint" "%s" > "%t"
// RUN: %diff "%s.expect" "%t"

// This test was contributed by Bryan. It has shown some instabilities in the past.

method seqIntoArray<A>(s: seq<A>, a: array<A>, index: nat)
  requires a != null
  requires index + |s| <= a.Length
  modifies a
  ensures  a[..] == old(a[0..index]) + s + old(a[index + |s|..]) {
    var i := index;

    while i < index + |s|
      invariant index <= i <= index + |s| <= a.Length
      invariant a[..] == old(a[0..index]) + s[0..(i-index)] + old(a[i..]) {
        a[i] := s[i - index];
        i := i + 1;
    }
}