Skip to content

Commit

Permalink
Merge branch 'master' into 1.1.x
Browse files Browse the repository at this point in the history
  • Loading branch information
richhickey committed Dec 23, 2009
2 parents fd01b27 + 855f394 commit fe6a143
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 9 deletions.
8 changes: 5 additions & 3 deletions src/jvm/clojure/lang/PersistentArrayMap.java
Expand Up @@ -269,7 +269,7 @@ public ITransientMap asTransient(){
static final class TransientArrayMap extends ATransientMap {
int len;
final Object[] array;
final Thread owner;
Thread owner;

public TransientArrayMap(Object[] array){
this.owner = Thread.currentThread();
Expand Down Expand Up @@ -330,6 +330,8 @@ int doCount() {
}

IPersistentMap doPersistent(){
ensureEditable();
owner = null;
Object[] a = new Object[len];
System.arraycopy(array,0,a,0,len);
return new PersistentArrayMap(a);
Expand All @@ -339,8 +341,8 @@ void ensureEditable(){
if(owner == Thread.currentThread())
return;
if(owner != null)
throw new IllegalAccessError("Mutable used by non-owner thread");
throw new IllegalAccessError("Mutable used after immutable call");
throw new IllegalAccessError("Transient used by non-owner thread");
throw new IllegalAccessError("Transient used after persistent! call");
}
}
}
4 changes: 2 additions & 2 deletions src/jvm/clojure/lang/PersistentHashMap.java
Expand Up @@ -270,8 +270,8 @@ void ensureEditable(){
if(owner == Thread.currentThread())
return;
if(owner != null)
throw new IllegalAccessError("Mutable used by non-owner thread");
throw new IllegalAccessError("Mutable used after immutable call");
throw new IllegalAccessError("Transient used by non-owner thread");
throw new IllegalAccessError("Transient used after persistent! call");
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/jvm/clojure/lang/PersistentTreeMap.java
Expand Up @@ -137,7 +137,7 @@ public ISeq seq(){
}

public IPersistentCollection empty(){
return EMPTY.withMeta(meta());
return new PersistentTreeMap(meta(), comp);
}

public ISeq rseq() throws Exception{
Expand Down
2 changes: 1 addition & 1 deletion src/jvm/clojure/lang/PersistentTreeSet.java
Expand Up @@ -53,7 +53,7 @@ public IPersistentSet cons(Object o){
}

public IPersistentCollection empty(){
return EMPTY.withMeta(meta());
return new PersistentTreeSet(meta(),(PersistentTreeMap)impl.empty());
}

public ISeq rseq() throws Exception{
Expand Down
4 changes: 2 additions & 2 deletions src/jvm/clojure/lang/PersistentVector.java
Expand Up @@ -402,8 +402,8 @@ void ensureEditable(){
if(owner == Thread.currentThread())
return;
if(owner != null)
throw new IllegalAccessError("Mutable used by non-owner thread");
throw new IllegalAccessError("Mutable used after immutable call");
throw new IllegalAccessError("Transient used by non-owner thread");
throw new IllegalAccessError("Transient used after persistent! call");

// root = editableRoot(root);
// tail = editableTail(tail);
Expand Down
18 changes: 18 additions & 0 deletions test/clojure/test_clojure/sequences.clj
Expand Up @@ -117,9 +117,15 @@
{} {}
{:a 1 :b 2} {}

(sorted-map) (sorted-map)
(sorted-map :a 1 :b 2) (sorted-map)

#{} #{}
#{1 2} #{}

(sorted-set) (sorted-set)
(sorted-set 1 2) (sorted-set)

(seq ()) nil ; (seq ()) => nil
(seq '(1 2)) ()

Expand All @@ -140,6 +146,18 @@
1.2 nil
"abc" nil ))

;Tests that the comparator is preservered
;The first element should be the same in each set if preserved.
(deftest test-empty-sorted
(let [inv-compare (comp - compare)]
(are [x y] (= (first (into (empty x) x))
(first y))
(sorted-set 1 2 3) (sorted-set 1 2 3)
(sorted-set-by inv-compare 1 2 3) (sorted-set-by inv-compare 1 2 3)

(sorted-map 1 :a 2 :b 3 :c) (sorted-map 1 :a 2 :b 3 :c)
(sorted-map-by inv-compare 1 :a 2 :b 3 :c) (sorted-map-by inv-compare 1 :a 2 :b 3 :c))))


(deftest test-not-empty
; empty coll/seq => nil
Expand Down

0 comments on commit fe6a143

Please sign in to comment.