From e7b41f125860c57e58cdc15c9c2c656fd1308a83 Mon Sep 17 00:00:00 2001 From: Andy Fingerhut Date: Thu, 10 May 2012 16:24:30 -0700 Subject: [PATCH] Make nth on subvec throw exception for negative indices --- src/jvm/clojure/lang/APersistentVector.java | 2 +- test/clojure/test_clojure/vectors.clj | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/jvm/clojure/lang/APersistentVector.java b/src/jvm/clojure/lang/APersistentVector.java index 995789e..84acdc9 100644 --- a/src/jvm/clojure/lang/APersistentVector.java +++ b/src/jvm/clojure/lang/APersistentVector.java @@ -523,7 +523,7 @@ static class SubVector extends APersistentVector implements IObj{ public Iterator iterator(){return ((PersistentVector)v).rangedIterator(start,end);} public Object nth(int i){ - if(start + i >= end) + if((start + i >= end) || (i < 0)) throw new IndexOutOfBoundsException(); return v.nth(start + i); } diff --git a/test/clojure/test_clojure/vectors.clj b/test/clojure/test_clojure/vectors.clj index 8d76e3a..f58907e 100644 --- a/test/clojure/test_clojure/vectors.clj +++ b/test/clojure/test_clojure/vectors.clj @@ -370,3 +370,11 @@ (are [r c1] (=vec r (filterv even? c1)) [] [1 3 5] [2 4] [1 2 3 4 5])) + +(deftest test-subvec + (let [v1 (vec (range 100)) + v2 (subvec v1 50 57)] + (is (thrown? IndexOutOfBoundsException (v2 -1))) + (is (thrown? IndexOutOfBoundsException (v2 7))) + (is (= (v1 50) (v2 0))) + (is (= (v1 56) (v2 6))))) -- 1.7.10