about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2011-07-04 21:20:18 -0700
committerPatrick Walton <pcwalton@mimiga.net>2011-07-04 21:20:18 -0700
commitd3a4102bc177e23d4a7a6dfb44bcad4e4c81eca1 (patch)
tree68f313dbffc8aa77def88c1ffd191f492903f505 /src
parent5d2c1896311cdd5cd244c4a16dfde807974671cf (diff)
downloadrust-d3a4102bc177e23d4a7a6dfb44bcad4e4c81eca1.tar.gz
rust-d3a4102bc177e23d4a7a6dfb44bcad4e4c81eca1.zip
stdlib: Add an inefficient implementation of ivec::pop
Diffstat (limited to 'src')
-rw-r--r--src/lib/ivec.rs12
-rw-r--r--src/test/run-pass/lib-ivec.rs23
2 files changed, 34 insertions, 1 deletions
diff --git a/src/lib/ivec.rs b/src/lib/ivec.rs
index 0547c111d65..91912f7dc5a 100644
--- a/src/lib/ivec.rs
+++ b/src/lib/ivec.rs
@@ -104,7 +104,17 @@ fn slice_mut[T](&T[mutable?] v, uint start, uint end) -> T[mutable] {
 
 // Mutators
 
-// TODO
+// TODO: Write this, unsafely, in a way that's not O(n).
+fn pop[T](&mutable T[mutable?] v) -> T {
+    auto ln = len(v);
+    assert (ln > 0u);
+    ln -= 1u;
+    auto e = v.(ln);
+    v = slice(v, 0u, ln);
+    ret e;
+}
+
+// TODO: More.
 
 
 // Appending
diff --git a/src/test/run-pass/lib-ivec.rs b/src/test/run-pass/lib-ivec.rs
index 2d0955269fe..f1e5aa5b632 100644
--- a/src/test/run-pass/lib-ivec.rs
+++ b/src/test/run-pass/lib-ivec.rs
@@ -106,6 +106,26 @@ fn test_slice() {
     assert (v.(4) == 6);
 }
 
+fn test_pop() {
+    // Test on-stack pop.
+    auto v = ~[ 1, 2, 3 ];
+    auto e = ivec::pop(v);
+    assert (ivec::len(v) == 2u);
+    assert (v.(0) == 1);
+    assert (v.(1) == 2);
+    assert (e == 3);
+
+    // Test on-heap pop.
+    v = ~[ 1, 2, 3, 4, 5 ];
+    e = ivec::pop(v);
+    assert (ivec::len(v) == 4u);
+    assert (v.(0) == 1);
+    assert (v.(1) == 2);
+    assert (v.(2) == 3);
+    assert (v.(3) == 4);
+    assert (e == 5);
+}
+
 fn test_grow() {
     // Test on-stack grow().
     auto v = ~[];
@@ -154,6 +174,9 @@ fn main() {
     test_last();
     test_slice();
 
+    // Mutators
+    test_pop();
+
     // Appending
     test_grow();
     test_grow_fn();