Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: tests/language/src/FannkuchTest.dart

Issue 10248007: test rename overhaul: step 8 - language tests (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tests/language/src/FailingMain.dart ('k') | tests/language/src/FauxverrideTest.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4 // The Great Computer Language Shootout
5 // http://shootout.alioth.debian.org/
6 // Ported from JavaScript contributed by Isaac Gouy.
7 // Description: Repeatedly acccess a tiny integer-sequence.
8
9 class FannkuchTest {
10 static fannkuch(n) {
11 var p = new List(n), q = new List(n), s = new List(n);
12 var sign = 1, maxflips = 0, sum = 0, m = n - 1;
13 for (var i = 0; i < n; i++) { p[i] = i; q[i] = i; s[i] = i; }
14 do {
15 // Copy and flip.
16 var q0 = p[0]; // Cache 0th element.
17 if (q0 != 0) {
18 for (var i = 1; i < n; i++) q[i] = p[i]; // Work on a copy.
19 var flips = 1;
20 do {
21 var qq = q[q0];
22 if (qq == 0) { // ... until 0th element is 0.
23 sum += sign * flips;
24 if (flips > maxflips) maxflips = flips; // New maximum?
25 break;
26 }
27 q[q0] = q0;
28 if (q0 >= 3) {
29 var i = 1, j = q0 - 1, t;
30 do { t = q[i]; q[i] = q[j]; q[j] = t; i++; j--; } while (i < j);
31 }
32 q0 = qq; flips++;
33 } while (true);
34 }
35 if (sign == 1) {
36 var t = p[1]; p[1] = p[0]; p[0] = t; sign = -1; // Rotate 0<-1.
37 } else {
38 // Rotate 0<-1 and 0<-1<-2.
39 var t = p[1];
40 p[1] = p[2];
41 p[2] = t;
42 sign = 1;
43 for(var i = 2; i < n; i++) {
44 var sx = s[i];
45 if (sx != 0) { s[i] = sx-1; break; }
46 if (i == m) {
47 return [sum, maxflips];
48 }
49 s[i] = i;
50 // Rotate 0<-...<-i+1.
51 t = p[0];
52 for(var j=0; j<=i; j++) { p[j] = p[j+1]; }
53 p[i+1] = t;
54 }
55 }
56 } while (true);
57 }
58
59 static testMain() {
60 var n = 6;
61 var pf = fannkuch(n);
62 Expect.equals(49, pf[0]);
63 Expect.equals(10, pf[1]);
64 print("${pf[0]}\nPfannkuchen($n) = ${pf[1]}");
65 }
66 }
67 main() {
68 FannkuchTest.testMain();
69 }
OLDNEW
« no previous file with comments | « tests/language/src/FailingMain.dart ('k') | tests/language/src/FauxverrideTest.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698