Skip to content

Commit 1ce2f30

Browse files
committed
Build permutation table using fisher-yates
1 parent a7dbdd9 commit 1ce2f30

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

simplex-noise.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,15 @@ SimplexNoise.prototype = {
391391

392392
function buildPermutationTable(random) {
393393
var i;
394-
var j = [];
395-
for (i = 0; i < 256; i++) {
396-
j.push(i);
397-
}
398394
var p = new Uint8Array(256);
399395
for (i = 0; i < 256; i++) {
400-
p[i] = j.splice(~~(random() * (256 - i)), 1);
396+
p[i] = i;
397+
}
398+
for (i = 0; i < 255; i++) {
399+
var r = i + 1 + ~~(random() * (255 - i));
400+
var aux = p[i];
401+
p[i] = p[r];
402+
p[r] = aux;
401403
}
402404
return p;
403405
}

test/simplex-noise-test.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ describe('SimplexNoise', function() {
88
}
99

1010
describe('buildPermutationTable', function() {
11-
var table = SimplexNoise._buildPermutationTable(getRandom());
12-
var aTable = Array.prototype.slice.call(table);
13-
assert.lengthOf(aTable, 256);
14-
for (var i = 0; i < aTable.length; i++) {
15-
assert.include(aTable, i);
16-
}
11+
it('contains all indices exactly once', function() {
12+
var table = SimplexNoise._buildPermutationTable(getRandom());
13+
var aTable = Array.prototype.slice.call(table);
14+
for (var i = 0; i < aTable.length; i++) {
15+
assert.include(aTable, i);
16+
}
17+
});
1718
});
1819

1920
describe('constructor', function() {

0 commit comments

Comments
 (0)