about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEric Holk <eholk@mozilla.com>2011-07-08 12:18:54 -0700
committerEric Holk <eholk@mozilla.com>2011-07-08 14:02:26 -0700
commit79ca673af79aecc3c63334dee593ded838007e11 (patch)
tree3cc5ce72659f1d86460af68d8c0fac1ef1d4b45e /src
parent4c309321e0979552f8c9230c6425c96b59ac80da (diff)
downloadrust-79ca673af79aecc3c63334dee593ded838007e11.tar.gz
rust-79ca673af79aecc3c63334dee593ded838007e11.zip
Adding more support for working with u64s.
Diffstat (limited to 'src')
-rw-r--r--src/lib/std.rc1
-rw-r--r--src/lib/u64.rs39
-rw-r--r--src/test/bench/shootout/pfib.rs13
-rw-r--r--src/test/bench/task-perf/pfib.rs8
4 files changed, 54 insertions, 7 deletions
diff --git a/src/lib/std.rc b/src/lib/std.rc
index 21fd2cbbbc6..20d3e3f071f 100644
--- a/src/lib/std.rc
+++ b/src/lib/std.rc
@@ -12,6 +12,7 @@
 mod int;
 mod uint;
 mod u8;
+mod u64;
 mod vec;
 mod ivec;
 mod str;
diff --git a/src/lib/u64.rs b/src/lib/u64.rs
new file mode 100644
index 00000000000..5bedd102c2a
--- /dev/null
+++ b/src/lib/u64.rs
@@ -0,0 +1,39 @@
+fn to_str(u64 n, uint radix) -> str {
+    assert(0u < radix && radix <= 16u);
+
+    auto r64 = radix as u64;
+    
+    fn digit(u64 n) -> str {
+        ret alt (n) {
+            case (0u64) { "0" }
+            case (1u64) { "1" }
+            case (2u64) { "2" }
+            case (3u64) { "3" }
+            case (4u64) { "4" }
+            case (5u64) { "5" }
+            case (6u64) { "6" }
+            case (7u64) { "7" }
+            case (8u64) { "8" }
+            case (9u64) { "9" }
+            case (10u64) { "a" }
+            case (11u64) { "b" }
+            case (12u64) { "c" }
+            case (13u64) { "d" }
+            case (14u64) { "e" }
+            case (15u64) { "f" }
+            case (_) { fail }
+        };
+    }
+
+    if n == 0u64 { ret "0"; }
+
+    auto s = "";
+
+    while(n > 0u64) {
+        s = digit(n % r64) + s;
+        n /= r64;
+    }
+    ret s;
+}
+
+fn str(u64 n) -> str { ret to_str(n, 10u); }
diff --git a/src/test/bench/shootout/pfib.rs b/src/test/bench/shootout/pfib.rs
index cbe0813efc4..c63b8ae3c08 100644
--- a/src/test/bench/shootout/pfib.rs
+++ b/src/test/bench/shootout/pfib.rs
@@ -55,10 +55,15 @@ fn main(vec[str] argv) {
         auto fibn = fib(n);
         auto stop = time::precise_time_ns();
 
-        auto elapsed = (stop - start) as int;
-        auto us_task = elapsed / fibn / 1000; 
+        assert(stop >= start);
 
-        log_err #fmt("Determined that fib(%d) = %d in %d ns (%d us / task)",
-                     n, fibn, elapsed, us_task);
+        auto elapsed = stop - start;
+        auto us_task = elapsed / (fibn as u64) / (1000 as u64); 
+
+        log_err #fmt("Determined that fib(%d) = %d in %d%d ns (%d us / task)",
+                     n, fibn, 
+                     (elapsed / (1000000 as u64)) as int, 
+                     (elapsed % (1000000 as u64)) as int, 
+                     us_task as int);
     }
 }
diff --git a/src/test/bench/task-perf/pfib.rs b/src/test/bench/task-perf/pfib.rs
index c1069513980..64ab42147e8 100644
--- a/src/test/bench/task-perf/pfib.rs
+++ b/src/test/bench/task-perf/pfib.rs
@@ -19,6 +19,7 @@ import std::int::range;
 import std::io;
 import std::getopts;
 import std::task;
+import std::u64;
 
 fn recv[T](&port[T] p) -> T {
     let T x;
@@ -106,16 +107,17 @@ fn main(vec[str] argv) {
             auto num_trials = 10;
 
             auto out = io::stdout();
-
+            
             for each(int n in range(1, max + 1)) {
                 for each(int i in range(0, num_trials)) {
                     auto start = time::precise_time_ns();
                     auto fibn = fib(n);
                     auto stop = time::precise_time_ns();
 
-                    auto elapsed = (stop - start) as int;
+                    auto elapsed = stop - start;
             
-                    out.write_line(#fmt("%d\t%d\t%d", n, fibn, elapsed));
+                    out.write_line(#fmt("%d\t%d\t%s", n, fibn, 
+                                        u64::str(elapsed)));
                 }
             }
         }