Skip to content

Commit

Permalink
Add fannkuch sunspider bench
Browse files Browse the repository at this point in the history
  • Loading branch information
vjeux committed May 11, 2011
1 parent c6e77e7 commit e1ba145
Show file tree
Hide file tree
Showing 2 changed files with 119 additions and 0 deletions.
61 changes: 61 additions & 0 deletions example/fannkuch.cpp
@@ -0,0 +1,61 @@
#include "../src/javascript_start.h"

// www.webkit.org/perf/sunspider-0.9/access-fannkuch.html

var fannkuch = function (var n) {
var check = 0;
var perm = Array(n);
var perm1 = Array(n);
var count = Array(n);
var maxPerm = Array(n);
var maxFlipsCount = 0;
var m = n - 1;

for (var i = 0; i < n; i++) perm1[i] = i;
var r = n;

while (true) {
while (r != 1) { count[r - 1] = r; r--; }
if (!(perm1[0] == 0 || perm1[m] == m)) {
for (var i = 0; i < n; i++) perm[i] = perm1[i];

var flipsCount = 0;
var k;

while (!((k = perm[0]) == 0)) {
var k2 = (k + 1) >> 1;
for (var i = 0; i < k2; i++) {
var temp = perm[i]; perm[i] = perm[k - i]; perm[k - i] = temp;
}
flipsCount++;
}

if (flipsCount > maxFlipsCount) {
maxFlipsCount = flipsCount;
for (var i = 0; i < n; i++) maxPerm[i] = perm1[i];
}
}

while (true) {
if (r == n) return maxFlipsCount;
var perm0 = perm1[0];
var i = 0;
while (i < r) {
var j = i + 1;
perm1[i] = perm1[j];
i = j;
}
perm1[r] = perm0;

count[r] = count[r] - 1;
if (count[r] > 0) break;
r++;
}
}
};

var n = 7;
var ret = fannkuch(n);
std::cout << fannkuch(n) << std::endl;

#include "../src/javascript_end.h"
58 changes: 58 additions & 0 deletions example/fannkuch.js
@@ -0,0 +1,58 @@

// www.webkit.org/perf/sunspider-0.9/access-fannkuch.html

function fannkuch(n) {
var check = 0;
var perm = Array(n);
var perm1 = Array(n);
var count = Array(n);
var maxPerm = Array(n);
var maxFlipsCount = 0;
var m = n - 1;

for (var i = 0; i < n; i++) perm1[i] = i;
var r = n;

while (true) {
while (r != 1) { count[r - 1] = r; r--; }
if (!(perm1[0] == 0 || perm1[m] == m)) {
for (var i = 0; i < n; i++) perm[i] = perm1[i];

var flipsCount = 0;
var k;

while (!((k = perm[0]) == 0)) {
var k2 = (k + 1) >> 1;
for (var i = 0; i < k2; i++) {
var temp = perm[i]; perm[i] = perm[k - i]; perm[k - i] = temp;
}
flipsCount++;
}

if (flipsCount > maxFlipsCount) {
maxFlipsCount = flipsCount;
for (var i = 0; i < n; i++) maxPerm[i] = perm1[i];
}
}

while (true) {
if (r == n) return maxFlipsCount;
var perm0 = perm1[0];
var i = 0;
while (i < r) {
var j = i + 1;
perm1[i] = perm1[j];
i = j;
}
perm1[r] = perm0;

count[r] = count[r] - 1;
if (count[r] > 0) break;
r++;
}
}
}

var n = 7;
var ret = fannkuch(n);
console.log(ret);

0 comments on commit e1ba145

Please sign in to comment.