You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
2.0 KiB

if (typeof Test === 'undefined') require('../tester');
Test('random', function () {
var dp, i, msg, r;
BigNumber.config({ CRYPTO: false });
for ( i = 0; i < 4994; i++ ) {
if ( i & 1 ) {
dp = Math.random() * 100 + 1 | 0;
BigNumber.config({ DECIMAL_PLACES: dp });
r = BigNumber.random();
} else {
dp = Math.random() * 100 | 0;
r = BigNumber.random(dp);
}
//Test.write('\n dp: ' + dp + ' r: ' + r.toString());
// Check that the random number r has a maximum of dp decimal places.
if ( r.dp() > dp ) {
msg = 'r.dp() > dp';
// Check 0 <= r < 1
} else if ( r.lt(0) || r.gte(1) ) {
msg = 'r.lt(0) || r.gte(1)';
// Check that the attributes of r are formed correctly.
} else if ( !r.eq( new BigNumber(r) ) || !r.eq( new BigNumber( r.toString() ) ) ) {
msg = '!r.eq( new BigNumber(r) ) || !r.eq( new BigNumber( r.toString() ) )';
}
Test.isTrue( msg === undefined );
if ( msg !== undefined ) {
Test.write('\n Random number r failed integrity test: ' + msg);
Test.write('\n r: ' + r);
Test.write('\n r.c: ' + r.c);
Test.write('\n r.e: ' + r.e);
Test.write('\n r.s: ' + r.s);
Test.write('\n r.dp: ' + r.dp());
Test.write('\n dp: ' + dp);
msg = undefined;
}
}
BigNumber.random(undefined);
BigNumber.random(null);
BigNumber.random(3);
BigNumber.random(0);
Test.isException(function () { BigNumber.random(Infinity) }, 'Infinity');
Test.isException(function () { BigNumber.random('-Infinity') }, "'-Infinity'");
Test.isException(function () { BigNumber.random(NaN) }, 'NaN');
Test.isException(function () { BigNumber.random('ugh') }, "'ugh'");
Test.isException(function () { BigNumber.random(-1) }, "-1");
Test.isException(function () { BigNumber.random({}) }, "{}");
});