summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAndreas Rumpf <rumpf_a@web.de>2015-07-03 00:19:10 +0200
committerAndreas Rumpf <rumpf_a@web.de>2015-07-03 00:19:10 +0200
commitdc65f9a5f787a14c8aef615104050d938dfa77f2 (patch)
treef6cc6969bd5ee441ebd0729dded2dda7701b7735
parent024c9cde35b87c92aeece9f67bbb56ff5e452871 (diff)
parent101e78df3bc3c90644a9c2aa797e043b3164fcf3 (diff)
downloadNim-dc65f9a5f787a14c8aef615104050d938dfa77f2.tar.gz
Merge pull request #3043 from takaomag/fix_algorithm_reversed
Fix algorithm.reversed to accept non-zero 'first' arg
-rw-r--r--lib/pure/algorithm.nim16
1 files changed, 11 insertions, 5 deletions
diff --git a/lib/pure/algorithm.nim b/lib/pure/algorithm.nim
index e087b5ac9..76531dac4 100644
--- a/lib/pure/algorithm.nim
+++ b/lib/pure/algorithm.nim
@@ -50,12 +50,12 @@ proc reverse*[T](a: var openArray[T]) =
 
 proc reversed*[T](a: openArray[T], first, last: Natural): seq[T] =
   ## returns the reverse of the array `a[first..last]`.
-  result = newSeq[T](last - first + 1)
+  var i = last - first
   var x = first.int
-  var y = last.int
-  while x <= last:
-    result[x] = a[y]
-    dec(y)
+  result = newSeq[T](i + 1)
+  while i >= 0:
+    result[i] = a[x]
+    dec(i)
     inc(x)
 
 proc reversed*[T](a: openArray[T]): seq[T] =
@@ -361,4 +361,10 @@ when isMainModule:
   assert srt3.isSorted(cmp) == true
   var srtseq = newSeq[int]()
   assert srtseq.isSorted(cmp) == true
+  # Tests for reversed
+  var arr1 = @[0,1,2,3,4]
+  assert arr1.reversed() == @[4,3,2,1,0]
+  for i in 0 .. high(arr1):
+    assert arr1.reversed(0, i) == arr1.reversed()[high(arr1) - i .. high(arr1)]
+    assert arr1.reversed(i, high(arr1)) == arr1.reversed()[0 .. high(arr1) - i]