~ chicken-core (chicken-5) fe4c184e20d358d2c9befb20a3d53c729b58fc86
commit fe4c184e20d358d2c9befb20a3d53c729b58fc86 Author: Moritz Heidkamp <moritz@twoticketsplease.de> AuthorDate: Wed Jan 2 22:02:10 2013 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Thu Jan 3 11:47:01 2013 +0100 Fix TO argument check in subvector procedure The subvector procedure checked its TO argument as if it was inclusive. However, its default value is the passed vector's length so it must be exclusive which also corresponds with the implementation. In effect, the erroneous check prevented producing a subvector including the given vector's last element. This patch changes the TO argument check to be exclusive and adds some test cases for the subvector procedure. Signed-off-by: felix <felix@call-with-current-continuation.org> diff --git a/library.scm b/library.scm index 5ed1e247..46cfe49f 100644 --- a/library.scm +++ b/library.scm @@ -1391,7 +1391,7 @@ EOF (j (or j len)) (len2 (fx- j i))) (##sys#check-range i 0 len 'subvector) - (##sys#check-range j 0 len 'subvector) + (##sys#check-range j 0 (fx+ len 1) 'subvector) (let ((v2 (make-vector len2))) (do ((k 0 (fx+ k 1))) ((fx>= k len2) v2) diff --git a/tests/library-tests.scm b/tests/library-tests.scm index c385c1be..2d88321b 100644 --- a/tests/library-tests.scm +++ b/tests/library-tests.scm @@ -420,4 +420,10 @@ ;;; message checks for invalid strings -(assert-fail (##sys#message "123\x00456")) \ No newline at end of file +(assert-fail (##sys#message "123\x00456")) + +;;; vector procedures + +(assert (equal? '#(2 3) (subvector '#(1 2 3) 1))) +(assert (equal? '#(2) (subvector '#(1 2 3) 1 2))) +(assert (equal? '#() (subvector '#(1 2 3) 1 1)))Trap