about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-02-13 23:54:43 -0800
committerBrian Anderson <banderson@mozilla.com>2012-02-14 11:24:09 -0800
commit3f4872f03284f4737675a68438350dd2958db229 (patch)
tree4d386e5182be976ae7c35f1837c490d7621e6819
parenta393fb32211f66cd33b1b0c6cad1991ebd8fae01 (diff)
downloadrust-3f4872f03284f4737675a68438350dd2958db229.tar.gz
rust-3f4872f03284f4737675a68438350dd2958db229.zip
test: Test yielding in crust functions
-rw-r--r--src/test/run-pass/crust-yield.rs27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/test/run-pass/crust-yield.rs b/src/test/run-pass/crust-yield.rs
new file mode 100644
index 00000000000..42a61a6af1f
--- /dev/null
+++ b/src/test/run-pass/crust-yield.rs
@@ -0,0 +1,27 @@
+native mod rustrt {
+    fn rust_dbg_call(cb: *u8,
+                     data: ctypes::uintptr_t) -> ctypes::uintptr_t;
+}
+
+crust fn cb(data: ctypes::uintptr_t) -> ctypes::uintptr_t {
+    if data == 1u {
+        data
+    } else {
+        count(data - 1u) + count(data - 1u)
+    }
+}
+
+fn count(n: uint) -> uint {
+    task::yield();
+    rustrt::rust_dbg_call(cb, n)
+}
+
+fn main() {
+    iter::repeat(10u) {||
+        task::spawn {||
+            let result = count(5u);
+            #debug("result = %?", result);
+            assert result == 16u;
+        };
+    }
+}