Skip to content

Commit 87533b6

Browse files
Eric Holkgraydon
authored andcommitted
---
yaml --- r: 3357 b: refs/heads/master c: 91eadfd h: refs/heads/master i: 3355: f541e01 v: v3
1 parent 5207882 commit 87533b6

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
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: bea28ea5376cba26713c4e49bc1d6fa2642ab419
2+
refs/heads/master: 91eadfd1ea1544513258fc30bf94ef384db2ad90

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

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// -*- rust -*-
2+
3+
/*
4+
A parallel version of fibonacci numbers.
5+
*/
6+
7+
fn recv[T](&port[T] p) -> T {
8+
let T x;
9+
p |> x;
10+
ret x;
11+
}
12+
13+
fn fib(int n) -> int {
14+
fn pfib(chan[int] c, int n) {
15+
if (n == 0) {
16+
c <| 0;
17+
}
18+
else if (n <= 2) {
19+
c <| 1;
20+
}
21+
else {
22+
let port[int] p = port();
23+
24+
auto t1 = spawn pfib(chan(p), n - 1);
25+
auto t2 = spawn pfib(chan(p), n - 2);
26+
27+
c <| recv(p) + recv(p);
28+
}
29+
}
30+
31+
let port[int] p = port();
32+
auto t = spawn pfib(chan(p), n);
33+
ret recv(p);
34+
}
35+
36+
fn main() {
37+
assert (fib(8) == 21);
38+
assert (fib(15) == 610);
39+
log fib(8);
40+
log fib(15);
41+
}

0 commit comments

Comments
 (0)