summaryrefslogtreecommitdiff
path: root/Test/dafny0/SeqSlice.dfy
diff options
context:
space:
mode:
authorGravatar leino <unknown>2014-10-11 13:15:07 -0700
committerGravatar leino <unknown>2014-10-11 13:15:07 -0700
commit1ccf16ba273126bad1257289638f08315a218dc1 (patch)
tree31df7ec8ed6818200521e362d73b7f3e7dcf083b /Test/dafny0/SeqSlice.dfy
parente39c935b9ea48ef398ea08c3096f1a2a257d8b20 (diff)
Test cases for sequence slicing with non-int integer-based numeric types.
Diffstat (limited to 'Test/dafny0/SeqSlice.dfy')
-rw-r--r--Test/dafny0/SeqSlice.dfy23
1 files changed, 23 insertions, 0 deletions
diff --git a/Test/dafny0/SeqSlice.dfy b/Test/dafny0/SeqSlice.dfy
index 381bb131..2f9c4bbd 100644
--- a/Test/dafny0/SeqSlice.dfy
+++ b/Test/dafny0/SeqSlice.dfy
@@ -25,3 +25,26 @@ method test(x:seq<int>)
assert forall i :: 0 <= i < |e| ==> e[i] == x[i+1];
assert forall i :: 0 <= i < |f| ==> f[i] == x[i+6];
}
+
+newtype MyNumeric = n | 0 <= n < 100
+
+method NumericSlice<T>(x: seq<T>, two: MyNumeric) returns (y: seq<T>)
+ requires 10 <= |x| && two == 2;
+ ensures |y| == 3;
+{
+ var slices;
+ if * {
+ slices := x[0:two:3:0:];
+ } else {
+ slices := x[1 : 1 : 1 : 3 : two : two : 0];
+ assert |slices[5]| == 2;
+ }
+ assert |slices| == 5 || |slices| == 7;
+ return middle(slices);
+}
+
+function method middle<G>(s: seq<G>): G
+ requires |s| % 2 == 1;
+{
+ s[|s| / 2]
+}