about summary refs log tree commit diff
path: root/src/libsyntax/util
diff options
context:
space:
mode:
authorJohn Clements <clements@racket-lang.org>2013-01-23 17:29:08 -0800
committerJohn Clements <clements@racket-lang.org>2013-01-23 17:31:12 -0800
commit8716005581c83f39d0bfe8c2dff67e9dd1f67b5b (patch)
tree6eddacfea2e40159cc648668a54d441d4b61d6c8 /src/libsyntax/util
parent721c174b6c7e856633577d17f05bdd3fd4fc8a12 (diff)
downloadrust-8716005581c83f39d0bfe8c2dff67e9dd1f67b5b.tar.gz
rust-8716005581c83f39d0bfe8c2dff67e9dd1f67b5b.zip
cleaning up, adding tests
Diffstat (limited to 'src/libsyntax/util')
-rw-r--r--src/libsyntax/util/interner.rs44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/libsyntax/util/interner.rs b/src/libsyntax/util/interner.rs
index fd759a32941..9f0b0a322cd 100644
--- a/src/libsyntax/util/interner.rs
+++ b/src/libsyntax/util/interner.rs
@@ -29,7 +29,7 @@ fn mk<T:Eq IterBytes Hash Const Copy>() -> Interner<T> {
     move ((move hi) as Interner::<T>)
 }
 
-fn mk_prefill<T:Eq IterBytes Hash Const Copy>(init: ~[T]) -> Interner<T> {
+fn mk_prefill<T:Eq IterBytes Hash Const Copy>(init: &[T]) -> Interner<T> {
     let rv = mk();
     for init.each() |v| { rv.intern(*v); }
     return rv;
@@ -70,3 +70,45 @@ impl <T:Eq IterBytes Hash Const Copy> hash_interner<T>: Interner<T> {
 
     fn len() -> uint { return self.vect.len(); }
 }
+
+
+#[test]
+#[should_fail]
+fn i1 () {
+    let i : Interner<@~str> = mk();
+    i.get(13);
+} 
+
+#[test]
+fn i2 () {
+    let i : Interner<@~str> = mk();
+    // first one is zero:
+    assert i.intern (@~"dog") == 0;
+    // re-use gets the same entry:
+    assert i.intern (@~"dog") == 0;
+    // different string gets a different #:
+    assert i.intern (@~"cat") == 1;
+    assert i.intern (@~"cat") == 1;
+    // dog is still at zero
+    assert i.intern (@~"dog") == 0;
+    // gensym gets 3
+    assert i.gensym (@~"zebra" ) == 2;
+    // gensym of same string gets new number :
+    assert i.gensym (@~"zebra" ) == 3;
+    // gensym of *existing* string gets new number:
+    assert i.gensym (@~"dog") == 4;
+    assert i.get(0) == @~"dog";
+    assert i.get(1) == @~"cat";
+    assert i.get(2) == @~"zebra";
+    assert i.get(3) == @~"zebra";
+    assert i.get(4) == @~"dog";
+} 
+
+#[test]
+fn i3 () {
+    let i : Interner<@~str> = mk_prefill([@~"Alan",@~"Bob",@~"Carol"]);
+    assert i.get(0) == @~"Alan";
+    assert i.get(1) == @~"Bob";
+    assert i.get(2) == @~"Carol";
+    assert i.intern(@~"Bob") == 1;
+}