File tree Expand file tree Collapse file tree 2 files changed +42
-1
lines changed
trunk/src/test/bench/shootout Expand file tree Collapse file tree 2 files changed +42
-1
lines changed Original file line number Diff line number Diff line change 1
1
---
2
- refs/heads/master: bea28ea5376cba26713c4e49bc1d6fa2642ab419
2
+ refs/heads/master: 91eadfd1ea1544513258fc30bf94ef384db2ad90
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments