about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorDaniel Micay <danielmicay@gmail.com>2013-03-05 09:35:45 -0500
committerDaniel Micay <danielmicay@gmail.com>2013-03-05 09:35:45 -0500
commitf7ae9b1759501c38e80bc912f9c39bf6660fd15d (patch)
tree311509755dff998abf320a0a191c9968dfe959e3 /src
parent65986ba0c0b20803dd02a5b0b71e269cbeb8336d (diff)
trie: fix each_reverse
Diffstat (limited to 'src')
-rw-r--r--src/libcore/trie.rs38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/libcore/trie.rs b/src/libcore/trie.rs
index c8faccf28f2..33062dd97c9 100644
--- a/src/libcore/trie.rs
+++ b/src/libcore/trie.rs
@@ -230,7 +230,7 @@ impl<T> TrieNode<T> {
     pure fn each_reverse(&self, f: fn(&(uint, &self/T)) -> bool) {
         for uint::range_rev(self.children.len(), 0) |idx| {
             match self.children[idx - 1] {
-                Internal(ref x) => x.each(f),
+                Internal(ref x) => x.each_reverse(f),
                 External(k, ref v) => if !f(&(k, v)) { return },
                 Nothing => ()
             }
@@ -366,4 +366,40 @@ mod tests {
             check_integrity(&trie.root);
         }
     }
+
+    #[test]
+    fn test_each() {
+        let mut m = TrieMap::new();
+
+        assert m.insert(3, 6);
+        assert m.insert(0, 0);
+        assert m.insert(4, 8);
+        assert m.insert(2, 4);
+        assert m.insert(1, 2);
+
+        let mut n = 0;
+        for m.each |&(k, v)| {
+            assert k == n;
+            assert *v == n * 2;
+            n += 1;
+        }
+    }
+
+    #[test]
+    fn test_each_reverse() {
+        let mut m = TrieMap::new();
+
+        assert m.insert(3, 6);
+        assert m.insert(0, 0);
+        assert m.insert(4, 8);
+        assert m.insert(2, 4);
+        assert m.insert(1, 2);
+
+        let mut n = 4;
+        for m.each_reverse |&(k, v)| {
+            assert k == n;
+            assert *v == n * 2;
+            n -= 1;
+        }
+    }
 }