From 8716005581c83f39d0bfe8c2dff67e9dd1f67b5b Mon Sep 17 00:00:00 2001 From: John Clements Date: Wed, 23 Jan 2013 17:29:08 -0800 Subject: cleaning up, adding tests --- src/libsyntax/util/interner.rs | 44 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) (limited to 'src/libsyntax/util') 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() -> Interner { move ((move hi) as Interner::) } -fn mk_prefill(init: ~[T]) -> Interner { +fn mk_prefill(init: &[T]) -> Interner { let rv = mk(); for init.each() |v| { rv.intern(*v); } return rv; @@ -70,3 +70,45 @@ impl hash_interner: Interner { 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; +} -- cgit 1.4.1-3-g733a5