32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
import * as crypto from 'crypto';
|
|
import * as ethUtil from 'ethereumjs-util';
|
|
import { BigNumber } from '@0x/utils';
|
|
|
|
/**
|
|
* Generate a random integer between `min` and `max`, inclusive.
|
|
*/
|
|
export function getRandomInteger(min: BigNumber | string | number, max: BigNumber | string | number): BigNumber {
|
|
const range = new BigNumber(max).minus(min);
|
|
return getRandomPortion(range).plus(min);
|
|
}
|
|
|
|
/**
|
|
* Generate a random integer between `0` and `total`, inclusive.
|
|
*/
|
|
function getRandomPortion(total: BigNumber | string | number): BigNumber {
|
|
return new BigNumber(total).times(getRandomFloat(0, 1)).integerValue(BigNumber.ROUND_HALF_UP);
|
|
}
|
|
|
|
export function randomAddress(): string {
|
|
return ethUtil.bufferToHex(crypto.randomBytes(20));
|
|
}
|
|
|
|
/**
|
|
* Generate a random, high-precision decimal between `min` and `max`, inclusive.
|
|
*/
|
|
export function getRandomFloat(min: BigNumber | string | number, max: BigNumber | string | number): BigNumber {
|
|
// Generate a really high precision number between [0, 1]
|
|
const r = new BigNumber(crypto.randomBytes(32).toString('hex'), 16).dividedBy(new BigNumber(2).pow(256).minus(1));
|
|
return new BigNumber(max).minus(min).times(r).plus(min);
|
|
}
|