Skip to content

Commit d3e380a

Browse files
draft + tests for randint and randfloat
1 parent 9547f72 commit d3e380a

File tree

7 files changed

+187
-25
lines changed

7 files changed

+187
-25
lines changed

js/dist/random.js

Lines changed: 59 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,49 +3,87 @@
33
'use strict';
44

55

6-
/* js/src/randint.js */
6+
/* js/src/fisheryates.js */
7+
8+
/**
9+
* Sample array using Fisher-Yates method.
10+
*/
11+
12+
var __fisheryates__ = function ( randint ) {
13+
14+
var fisheryates = function ( n, a, i, j ) {
15+
16+
var k, p, tmp;
17+
18+
// we will swap at most n elements
19+
20+
k = i + n;
21+
22+
for ( ; i < k ; ++i ) {
23+
24+
// choose any index p in the remaining array
25+
26+
p = randint( i, j );
27+
28+
29+
// swap element at index p with first element in the array
30+
31+
tmp = a[i];
32+
a[i] = a[p];
33+
a[p] = tmp;
34+
35+
}
36+
37+
};
738

39+
return fisheryates;
840

9-
var randint = function(i, j){
10-
return i + Math.floor(Math.random() * (j - i));
1141
};
1242

13-
exports.randint = randint;
14-
/* js/src/sample.js */
43+
exports.__fisheryates__ = __fisheryates__;
44+
exports.__sample__ = __fisheryates__;
45+
46+
/* js/src/randfloat.js */
1547

1648
/**
17-
* Sample using Fisher-Yates method.
49+
* Returns a floating point number in interval [i, j[ (i included, j excluded)
50+
* according to a uniform distribution.
1851
*/
1952

20-
var sample_t = function(randint){
53+
var randfloat = function ( i, j ) {
54+
return i + Math.random() * (j - i);
55+
};
2156

22-
var sample = function(n, a, i, j){
23-
var tmp, k, t = i - 1, x = i + n;
57+
exports.randfloat = randfloat;
2458

25-
while(++t < x){
26-
k = randint(t, j);
27-
tmp = a[t];
28-
a[t] = a[k];
29-
a[k] = tmp;
30-
}
31-
};
59+
/* js/src/randint.js */
3260

33-
return sample;
61+
/**
62+
* Returns an integer in interval [i, j[ (i included, j excluded)
63+
* according to a uniform distribution.
64+
*/
3465

66+
var randint = function ( i, j ) {
67+
return i + Math.floor( Math.random() * (j - i) );
3568
};
3669

37-
exports.sample_t = sample_t;
70+
exports.randint = randint;
71+
3872
/* js/src/shuffle.js */
3973

74+
/**
75+
* Shuffle array by sampling the complete array.
76+
*/
4077

41-
var shuffle_t = function(sample){
78+
var __shuffle__ = function ( sample ) {
4279

43-
var shuffle = function(a, i, j){
80+
var shuffle = function ( a, i, j ) {
4481
sample(j - i, a, i, j);
4582
};
4683

4784
return shuffle;
4885
};
4986

50-
exports.shuffle_t = shuffle_t;
87+
exports.__shuffle__ = __shuffle__;
88+
5189
})(typeof exports === 'undefined' ? this['random'] = {} : exports);

js/dist/random.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/dist/random.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424
],
2525
"version": "0.0.1",
2626
"devDependencies": {
27-
"aureooms-node-package": "^1.0.0"
27+
"aureooms-node-package": "^1.1.3",
28+
"aureooms-js-type": "^0.1.0",
29+
"aureooms-js-operator": "^0.1.3"
2830
},
2931
"author": "aureooms",
3032
"dependencies": {},
3133
"main": "js/dist/random.js",
3234
"homepage": "http://aureooms.github.io/js-random/"
33-
}
35+
}

test/js/src/randfloat.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
var util, type;
3+
4+
util = require( "util" );
5+
6+
type = require( "aureooms-js-type" );
7+
8+
9+
10+
test( "randfloat", function () {
11+
12+
var i, n, r, ri, rj, check;
13+
14+
n = 5000;
15+
ri = -n;
16+
rj = n;
17+
18+
check = function () {
19+
ok( r < rj, util.format( "%s < %s", r, rj ) );
20+
ok( r >= ri, util.format( "%s >= %s", r, ri ) );
21+
ok( type.isfinite(r), util.format( "type.isint(%s)", r ) );
22+
};
23+
24+
for ( i = 0 ; i < n ; ++i ) {
25+
r = random.randfloat( ri, rj );
26+
27+
check();
28+
29+
++ri;
30+
}
31+
32+
for ( i = 0 ; i < n ; ++i ) {
33+
r = random.randfloat( ri, rj );
34+
35+
check();
36+
37+
--ri;
38+
--rj;
39+
}
40+
41+
for ( i = 0 ; i < n ; ++i ) {
42+
r = random.randfloat( ri, rj );
43+
44+
check();
45+
46+
++rj;
47+
}
48+
49+
50+
});

test/js/src/randint.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
var util, type;
3+
4+
util = require( "util" );
5+
6+
type = require( "aureooms-js-type" );
7+
8+
9+
10+
test( "randint", function () {
11+
12+
var i, n, r, ri, rj, check;
13+
14+
n = 5000;
15+
ri = -n;
16+
rj = n;
17+
18+
check = function () {
19+
ok( r < rj, util.format( "%s < %s", r, rj ) );
20+
ok( r >= ri, util.format( "%s >= %s", r, ri ) );
21+
ok( type.isint(r), util.format( "type.isint(%s)", r ) );
22+
};
23+
24+
for ( i = 0 ; i < n ; ++i ) {
25+
r = random.randint( ri, rj );
26+
27+
check();
28+
29+
++ri;
30+
}
31+
32+
for ( i = 0 ; i < n ; ++i ) {
33+
r = random.randint( ri, rj );
34+
35+
check();
36+
37+
--ri;
38+
--rj;
39+
}
40+
41+
for ( i = 0 ; i < n ; ++i ) {
42+
r = random.randint( ri, rj );
43+
44+
check();
45+
46+
++rj;
47+
}
48+
49+
50+
});

test/js/src/sample.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
var util, operator;
3+
4+
util = require( "util" );
5+
6+
operator = require( "aureooms-js-operator" );
7+
8+
test ( "sample", function () {
9+
10+
var algorithms;
11+
12+
algorithms = [
13+
random.__fisheryates__( random.randint ),
14+
random.__sample__( random.randint )
15+
];
16+
17+
// TODO implement test
18+
19+
expect(0);
20+
21+
22+
});

0 commit comments

Comments
 (0)