summary refs log tree commit diff
path: root/src/test
diff options
context:
space:
mode:
authorEric Holk <eholk@mozilla.com>2011-06-28 17:58:44 -0700
committerEric Holk <eholk@mozilla.com>2011-06-30 11:32:10 -0700
commitb4a145e60f4bbc90dc780239cc49c024b9f52ca8 (patch)
tree020734b92aa7fea2269b3915d45d1d9730c4192c /src/test
parent441c7e06109772f7ff942682fb6d0a7535f03666 (diff)
downloadrust-b4a145e60f4bbc90dc780239cc49c024b9f52ca8.tar.gz
rust-b4a145e60f4bbc90dc780239cc49c024b9f52ca8.zip
Added a nanosecond timer to time.rs, support for some floating point casts, and a commandline-driven mode for pfib.rs
Diffstat (limited to 'src/test')
-rw-r--r--src/test/bench/shootout/pfib.rs71
1 files changed, 47 insertions, 24 deletions
diff --git a/src/test/bench/shootout/pfib.rs b/src/test/bench/shootout/pfib.rs
index f7fda8b8110..cbe0813efc4 100644
--- a/src/test/bench/shootout/pfib.rs
+++ b/src/test/bench/shootout/pfib.rs
@@ -4,38 +4,61 @@
   A parallel version of fibonacci numbers.
 */
 
+use std;
+
+import std::vec;
+import std::uint;
+import std::time;
+import std::str;
+
 fn recv[T](&port[T] p) -> T {
-  let T x;
-  p |> x;
-  ret x;
+    let T x;
+    p |> x;
+    ret x;
 }
 
 fn fib(int n) -> int {
-  fn pfib(chan[int] c, int n) {
-    if (n == 0) {
-      c <| 0;
-    }
-    else if (n <= 2) {
-      c <| 1;
-    }
-    else {
-      let port[int] p = port();
+    fn pfib(chan[int] c, int n) {
+        if (n == 0) {
+            c <| 0;
+        }
+        else if (n <= 2) {
+            c <| 1;
+        }
+        else {
+            let port[int] p = port();
       
-      auto t1 = spawn pfib(chan(p), n - 1);
-      auto t2 = spawn pfib(chan(p), n - 2);
+            auto t1 = spawn pfib(chan(p), n - 1);
+            auto t2 = spawn pfib(chan(p), n - 2);
 
-      c <| recv(p) + recv(p);
+            c <| recv(p) + recv(p);
+        }
     }
-  }
 
-  let port[int] p = port();
-  auto t = spawn pfib(chan(p), n);
-  ret recv(p);
+    let port[int] p = port();
+    auto t = spawn pfib(chan(p), n);
+    ret recv(p);
 }
 
-fn main() {
-  assert (fib(8) == 21);
-  assert (fib(15) == 610);
-  log fib(8);
-  log fib(15);
+fn main(vec[str] argv) {
+    if(vec::len(argv) == 1u) {
+        assert (fib(8) == 21);
+        assert (fib(15) == 610);
+        log fib(8);
+        log fib(15);
+    }
+    else {
+        // Interactive mode! Wooo!!!!
+
+        auto n = uint::parse_buf(str::bytes(argv.(1)), 10u) as int;
+        auto start = time::precise_time_ns();
+        auto fibn = fib(n);
+        auto stop = time::precise_time_ns();
+
+        auto elapsed = (stop - start) as int;
+        auto us_task = elapsed / fibn / 1000; 
+
+        log_err #fmt("Determined that fib(%d) = %d in %d ns (%d us / task)",
+                     n, fibn, elapsed, us_task);
+    }
 }