aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorRoy Frostig <[email protected]>2010-07-28 17:31:41 -0700
committerRoy Frostig <[email protected]>2010-07-28 17:31:41 -0700
commitc489af8e1a4e1caf35dd7be616ef4a848a477317 (patch)
treef1e942e8ac08cc5f73a7888efad6ee9dbe8a0865 /src/test
parentTest the deque more and fix uncovered off-by-one bug. (diff)
downloadrust-c489af8e1a4e1caf35dd7be616ef4a848a477317.tar.xz
rust-c489af8e1a4e1caf35dd7be616ef4a848a477317.zip
Test the deque some more.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/run-pass/lib-deque.rs152
1 files changed, 152 insertions, 0 deletions
diff --git a/src/test/run-pass/lib-deque.rs b/src/test/run-pass/lib-deque.rs
index 003fb9a2..188b5ec5 100644
--- a/src/test/run-pass/lib-deque.rs
+++ b/src/test/run-pass/lib-deque.rs
@@ -39,6 +39,158 @@ fn test_simple() {
* segfault. */
}
+fn test_boxes(@int a, @int b, @int c, @int d) {
+ let deque.t[@int] deq = deque.create[@int]();
+ check (deq.size() == 0u);
+ deq.add_front(a);
+ deq.add_front(b);
+ deq.add_back(c);
+ check (deq.size() == 3u);
+ deq.add_back(d);
+ check (deq.size() == 4u);
+
+ check (deq.peek_front() == b);
+ check (deq.peek_back() == d);
+
+ check (deq.pop_front() == b);
+ check (deq.pop_back() == d);
+ check (deq.pop_back() == c);
+ check (deq.pop_back() == a);
+
+ /* FIXME (issue #138): Test d.get() once it no longer causes
+ * segfault. */
+}
+
+type eqfn[T] = fn(&T a, &T b) -> bool;
+
+fn test_parameterized[T](eqfn[T] e, &T a, &T b, &T c, &T d) {
+ let deque.t[T] deq = deque.create[T]();
+ check (deq.size() == 0u);
+ deq.add_front(a);
+ deq.add_front(b);
+ deq.add_back(c);
+ check (deq.size() == 3u);
+ deq.add_back(d);
+ check (deq.size() == 4u);
+
+ check (e(deq.peek_front(), b));
+ check (e(deq.peek_back(), d));
+
+ check (e(deq.pop_front(), b));
+ check (e(deq.pop_back(), d));
+ check (e(deq.pop_back(), c));
+ check (e(deq.pop_back(), a));
+
+ /* FIXME (issue #138): Test d.get() once it no longer causes
+ * segfault. */
+}
+
+type taggy = tag(one(int), two(int, int), three(int, int, int));
+
+type taggypar[T] = tag(onepar(int),
+ twopar(int, int),
+ threepar(int, int, int));
+
fn main() {
+ fn inteq(&int a, &int b) -> bool {
+ ret a == b;
+ }
+
+ fn intboxeq(&@int a, &@int b) -> bool {
+ ret a == b;
+ }
+
+ fn taggyeq(&taggy a, &taggy b) -> bool {
+ alt (a) {
+ case (one(a1)) {
+ alt (b) {
+ case (one(b1)) { ret a1 == b1; }
+ case (_) { ret false; }
+ }
+ }
+ case (two(a1, a2)) {
+ alt (b) {
+ case (two(b1, b2)) { ret (a1 == b1 && a2 == b2); }
+ case (_) { ret false; }
+ }
+ }
+ case (three(a1, a2, a3)) {
+ alt (b) {
+ case (three(b1, b2, b3)) { ret (a1 == b1 && a2 == b2 && a3 == b3); }
+ case (_) { ret false; }
+ }
+ }
+ }
+ }
+
+ fn taggypareq[T](&taggypar[T] a, &taggypar[T] b) -> bool {
+ alt (a) {
+ case (onepar[T](a1)) {
+ alt (b) {
+ case (onepar[T](b1)) { ret a1 == b1; }
+ case (_) { ret false; }
+ }
+ }
+ case (twopar[T](a1, a2)) {
+ alt (b) {
+ case (twopar[T](b1, b2)) { ret (a1 == b1 && a2 == b2); }
+ case (_) { ret false; }
+ }
+ }
+ case (threepar[T](a1, a2, a3)) {
+ alt (b) {
+ case (threepar[T](b1, b2, b3)) {
+ ret (a1 == b1 && a2 == b2 && a3 == b3);
+ }
+ case (_) { ret false; }
+ }
+ }
+ }
+ }
+
+
+ log "test simple";
test_simple();
+
+ /*
+ * FIXME: Causes "Invalid read of size 4" under valgrind.
+
+ log "test boxes";
+ test_boxes(@5, @72, @64, @175);
+
+ */
+
+ log "test parameterized: int";
+ let eqfn[int] eq1 = bind inteq(_, _);
+ test_parameterized[int](eq1, 5, 72, 64, 175);
+
+ /*
+ * FIXME: Appears to segfault after an upcall_grow_task
+
+ log "test parameterized: @int";
+ let eqfn[@int] eq2 = bind intboxeq(_, _);
+ test_parameterized[@int](eq2, @5, @72, @64, @175);
+
+ */
+
+
+ log "test parameterized: taggy";
+ let eqfn[taggy] eq3 = bind taggyeq(_, _);
+ test_parameterized[taggy](eq3,
+ one(1), two(1, 2), three(1, 2, 3), two(17, 42));
+
+ /*
+ * FIXME: Segfault.
+
+ log "test parameterized: taggypar[int]";
+ let eqfn[taggypar[int]] eq4 = bind taggypareq[int](_, _);
+ test_parameterized[taggypar[int]](eq4,
+ onepar[int](1),
+ twopar[int](1, 2),
+ threepar[int](1, 2, 3),
+ twopar[int](17, 42));
+
+ */
+
+ log "done";
}