summary refs log tree commit diff
path: root/src/libsyntax
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
parent721c174b6c7e856633577d17f05bdd3fd4fc8a12 (diff)
downloadrust-8716005581c83f39d0bfe8c2dff67e9dd1f67b5b.tar.gz
rust-8716005581c83f39d0bfe8c2dff67e9dd1f67b5b.zip
cleaning up, adding tests
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/print/pprust.rs10
-rw-r--r--src/libsyntax/util/interner.rs44
2 files changed, 48 insertions, 6 deletions
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index a0d3a81f867..baeb437152c 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -172,15 +172,15 @@ fn fun_to_str(decl: ast::fn_decl, name: ast::ident,
 
 #[test]
 fn test_fun_to_str() {
-    let decl: ast::fn_decl = {
+    let decl: ast::fn_decl = ast::fn_decl {
         inputs: ~[],
-        output: @{id: 0,
+        output: @ast::Ty {id: 0,
                   node: ast::ty_nil,
                   span: ast_util::dummy_sp()},
-        purity: ast::impure_fn,
+        //purity: ast::impure_fn,
         cf: ast::return_val
     };
-    assert fun_to_str(decl, "a", ~[]) == "fn a()";
+    assert fun_to_str(decl, "abba", ~[]) == "fn abba()";
 }
 
 fn block_to_str(blk: ast::blk, intr: @ident_interner) -> ~str {
@@ -214,7 +214,7 @@ fn test_variant_to_str() {
         attrs: ~[],
         args: ~[],
         id: 0,
-        disr_expr: none
+        disr_expr: None
     });
 
     let varstr = variant_to_str(var);
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;
+}