Skip to content

Commit 33371fd

Browse files
author
Eric Holk
committed
---
yaml --- r: 3745 b: refs/heads/master c: 79ca673 h: refs/heads/master i: 3743: 5a000c9 v: v3
1 parent 11cf9e8 commit 33371fd

File tree

5 files changed

+55
-8
lines changed

5 files changed

+55
-8
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 4c309321e0979552f8c9230c6425c96b59ac80da
2+
refs/heads/master: 79ca673af79aecc3c63334dee593ded838007e11

trunk/src/lib/std.rc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
mod int;
1313
mod uint;
1414
mod u8;
15+
mod u64;
1516
mod vec;
1617
mod ivec;
1718
mod str;

trunk/src/lib/u64.rs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
fn to_str(u64 n, uint radix) -> str {
2+
assert(0u < radix && radix <= 16u);
3+
4+
auto r64 = radix as u64;
5+
6+
fn digit(u64 n) -> str {
7+
ret alt (n) {
8+
case (0u64) { "0" }
9+
case (1u64) { "1" }
10+
case (2u64) { "2" }
11+
case (3u64) { "3" }
12+
case (4u64) { "4" }
13+
case (5u64) { "5" }
14+
case (6u64) { "6" }
15+
case (7u64) { "7" }
16+
case (8u64) { "8" }
17+
case (9u64) { "9" }
18+
case (10u64) { "a" }
19+
case (11u64) { "b" }
20+
case (12u64) { "c" }
21+
case (13u64) { "d" }
22+
case (14u64) { "e" }
23+
case (15u64) { "f" }
24+
case (_) { fail }
25+
};
26+
}
27+
28+
if n == 0u64 { ret "0"; }
29+
30+
auto s = "";
31+
32+
while(n > 0u64) {
33+
s = digit(n % r64) + s;
34+
n /= r64;
35+
}
36+
ret s;
37+
}
38+
39+
fn str(u64 n) -> str { ret to_str(n, 10u); }

trunk/src/test/bench/shootout/pfib.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,15 @@ fn main(vec[str] argv) {
5555
auto fibn = fib(n);
5656
auto stop = time::precise_time_ns();
5757

58-
auto elapsed = (stop - start) as int;
59-
auto us_task = elapsed / fibn / 1000;
58+
assert(stop >= start);
6059

61-
log_err #fmt("Determined that fib(%d) = %d in %d ns (%d us / task)",
62-
n, fibn, elapsed, us_task);
60+
auto elapsed = stop - start;
61+
auto us_task = elapsed / (fibn as u64) / (1000 as u64);
62+
63+
log_err #fmt("Determined that fib(%d) = %d in %d%d ns (%d us / task)",
64+
n, fibn,
65+
(elapsed / (1000000 as u64)) as int,
66+
(elapsed % (1000000 as u64)) as int,
67+
us_task as int);
6368
}
6469
}

trunk/src/test/bench/task-perf/pfib.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import std::int::range;
1919
import std::io;
2020
import std::getopts;
2121
import std::task;
22+
import std::u64;
2223

2324
fn recv[T](&port[T] p) -> T {
2425
let T x;
@@ -106,16 +107,17 @@ fn main(vec[str] argv) {
106107
auto num_trials = 10;
107108

108109
auto out = io::stdout();
109-
110+
110111
for each(int n in range(1, max + 1)) {
111112
for each(int i in range(0, num_trials)) {
112113
auto start = time::precise_time_ns();
113114
auto fibn = fib(n);
114115
auto stop = time::precise_time_ns();
115116

116-
auto elapsed = (stop - start) as int;
117+
auto elapsed = stop - start;
117118

118-
out.write_line(#fmt("%d\t%d\t%d", n, fibn, elapsed));
119+
out.write_line(#fmt("%d\t%d\t%s", n, fibn,
120+
u64::str(elapsed)));
119121
}
120122
}
121123
}

0 commit comments

Comments
 (0)