diff options
| author | John Clements <clements@racket-lang.org> | 2013-01-23 17:29:08 -0800 |
|---|---|---|
| committer | John Clements <clements@racket-lang.org> | 2013-01-23 17:31:12 -0800 |
| commit | 8716005581c83f39d0bfe8c2dff67e9dd1f67b5b (patch) | |
| tree | 6eddacfea2e40159cc648668a54d441d4b61d6c8 /src/libsyntax/util | |
| parent | 721c174b6c7e856633577d17f05bdd3fd4fc8a12 (diff) | |
| download | rust-8716005581c83f39d0bfe8c2dff67e9dd1f67b5b.tar.gz rust-8716005581c83f39d0bfe8c2dff67e9dd1f67b5b.zip | |
cleaning up, adding tests
Diffstat (limited to 'src/libsyntax/util')
| -rw-r--r-- | src/libsyntax/util/interner.rs | 44 |
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; +} |
