Skip to content

Commit 24d4832

Browse files
committed
---
yaml --- r: 37885 b: refs/heads/try c: b4401d1 h: refs/heads/master i: 37883: 0b675e7 v: v3
1 parent 2edabbb commit 24d4832

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: 09bb07bed9166105ea961a42b5fff7739ae0d2e9
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: eb8fd119c65c67f3b1b8268cc7341c22d39b7b61
5-
refs/heads/try: bcde593d3a9ae72241bd5ba163a990af2f33b919
5+
refs/heads/try: b4401d12a7fe4af43698e8360cffce3f9cb4bc62
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: a810c03263670238bccd64cabb12a23a46e3a278

branches/try/src/test/bench/shootout-nbody.rs

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,19 +24,25 @@ fn main() {
2424
args
2525
};
2626
let n = int::from_str(args[1]).get();
27-
let bodies: ~[Body::props] = NBodySystem::make();
28-
io::println(fmt!("%f", NBodySystem::energy(copy bodies)));
27+
let mut bodies: ~[Body::props] = NBodySystem::make();
28+
io::println(fmt!("%f", NBodySystem::energy(bodies)));
2929
let mut i = 0;
30-
while i < n { NBodySystem::advance(bodies, 0.01); i += 1; }
30+
while i < n {
31+
NBodySystem::advance(bodies, 0.01);
32+
i += 1;
33+
}
3134
io::println(fmt!("%f", NBodySystem::energy(bodies)));
3235
}
3336

3437
mod NBodySystem {
3538
#[legacy_exports];
3639

3740
fn make() -> ~[Body::props] {
38-
let bodies: ~[Body::props] =
39-
~[Body::sun(), Body::jupiter(), Body::saturn(), Body::uranus(),
41+
let mut bodies: ~[Body::props] =
42+
~[Body::sun(),
43+
Body::jupiter(),
44+
Body::saturn(),
45+
Body::uranus(),
4046
Body::neptune()];
4147

4248
let mut px = 0.0;
@@ -53,26 +59,35 @@ mod NBodySystem {
5359
}
5460

5561
// side-effecting
56-
Body::offset_momentum(bodies[0], px, py, pz);
62+
Body::offset_momentum(&mut bodies[0], px, py, pz);
5763

5864
return bodies;
5965
}
6066

61-
fn advance(bodies: ~[Body::props], dt: float) {
67+
fn advance(bodies: &mut [Body::props], dt: float) {
6268

6369
let mut i = 0;
6470
while i < 5 {
6571
let mut j = i + 1;
66-
while j < 5 { advance_one(bodies[i], bodies[j], dt); j += 1; }
72+
while j < 5 {
73+
advance_one(&mut bodies[i],
74+
&mut bodies[j], dt);
75+
j += 1;
76+
}
6777

6878
i += 1;
6979
}
7080

7181
i = 0;
72-
while i < 5 { move_(bodies[i], dt); i += 1; }
82+
while i < 5 {
83+
move_(&mut bodies[i], dt);
84+
i += 1;
85+
}
7386
}
7487

75-
fn advance_one(bi: Body::props, bj: Body::props, dt: float) unsafe {
88+
fn advance_one(bi: &mut Body::props,
89+
bj: &mut Body::props,
90+
dt: float) unsafe {
7691
let dx = bi.x - bj.x;
7792
let dy = bi.y - bj.y;
7893
let dz = bi.z - bj.z;
@@ -91,13 +106,13 @@ mod NBodySystem {
91106
bj.vz += dz * bi.mass * mag;
92107
}
93108

94-
fn move_(b: Body::props, dt: float) {
109+
fn move_(b: &mut Body::props, dt: float) {
95110
b.x += dt * b.vx;
96111
b.y += dt * b.vy;
97112
b.z += dt * b.vz;
98113
}
99114

100-
fn energy(bodies: ~[Body::props]) -> float unsafe {
115+
fn energy(bodies: &[Body::props]) -> float unsafe {
101116
let mut dx;
102117
let mut dy;
103118
let mut dz;
@@ -197,7 +212,8 @@ mod Body {
197212
mass: SOLAR_MASS};
198213
}
199214

200-
fn offset_momentum(props: Body::props, px: float, py: float, pz: float) {
215+
fn offset_momentum(props: &mut Body::props,
216+
px: float, py: float, pz: float) {
201217
props.vx = -px / SOLAR_MASS;
202218
props.vy = -py / SOLAR_MASS;
203219
props.vz = -pz / SOLAR_MASS;

0 commit comments

Comments
 (0)