Skip to content

Commit 0f0618c

Browse files
fix #3
1 parent 0933418 commit 0f0618c

10 files changed

+244
-4
lines changed

js/dist/random.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,37 @@ var randint = function ( i , j ) {
9090

9191
exports.randint = randint ;
9292

93-
/* js/src/001-api/002-sample.js */
93+
/* js/src/001-api/002-randrange.js */
94+
95+
/**
96+
* Return a randomly selected element from range(start, stop, step).
97+
*/
98+
99+
var randrange = function ( start , stop , step ) {
100+
101+
// TODO handle empty ranges
102+
103+
if ( stop === undefined ) return randint( 0 , start ) ;
104+
if ( step === undefined ) step = 1 ;
105+
106+
if ( stop >= start ) {
107+
return start + step * randint( 0 , Math.floor( ( stop - start ) / step ) ) ;
108+
}
109+
else {
110+
return start + step * randint( 0 , Math.floor( ( start - stop ) / -step ) ) ;
111+
}
112+
113+
} ;
114+
115+
exports.randrange = randrange ;
116+
117+
/* js/src/001-api/003-sample.js */
94118

95119
var sample = _fisheryates( randint ) ;
96120

97121
exports.sample = sample ;
98122

99-
/* js/src/001-api/003-shuffle.js */
123+
/* js/src/001-api/004-shuffle.js */
100124

101125
var shuffle = _shuffle( sample ) ;
102126

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.

js/src/001-api/002-randrange.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
2+
/**
3+
* Return a randomly selected element from range(start, stop, step).
4+
*/
5+
6+
var randrange = function ( start , stop , step ) {
7+
8+
// TODO handle empty ranges
9+
10+
if ( stop === undefined ) return randint( 0 , start ) ;
11+
if ( step === undefined ) step = 1 ;
12+
13+
if ( stop >= start ) {
14+
return start + step * randint( 0 , Math.floor( ( stop - start ) / step ) ) ;
15+
}
16+
else {
17+
return start + step * randint( 0 , Math.floor( ( start - stop ) / -step ) ) ;
18+
}
19+
20+
} ;
21+
22+
exports.randrange = randrange ;
File renamed without changes.
File renamed without changes.

test/js/src/randrange_only_stop.js

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

test/js/src/randrange_without_step.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( "randrange without step", 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.randrange( ri, rj );
26+
27+
check();
28+
29+
++ri;
30+
}
31+
32+
for ( i = 0 ; i < n ; ++i ) {
33+
r = random.randrange( ri, rj );
34+
35+
check();
36+
37+
--ri;
38+
--rj;
39+
}
40+
41+
for ( i = 0 ; i < n ; ++i ) {
42+
r = random.randrange( ri, rj );
43+
44+
check();
45+
46+
++rj;
47+
}
48+
49+
50+
});

0 commit comments

Comments
 (0)