| import { BigInt } from '../utils/globals.js'; |
| import { BigIntArbitrary } from './_internals/BigIntArbitrary.js'; |
| function buildCompleteBigIntConstraints(constraints) { |
| const DefaultPow = 256; |
| const DefaultMin = BigInt(-1) << BigInt(DefaultPow - 1); |
| const DefaultMax = (BigInt(1) << BigInt(DefaultPow - 1)) - BigInt(1); |
| const min = constraints.min; |
| const max = constraints.max; |
| return { |
| min: min !== undefined ? min : DefaultMin - (max !== undefined && max < BigInt(0) ? max * max : BigInt(0)), |
| max: max !== undefined ? max : DefaultMax + (min !== undefined && min > BigInt(0) ? min * min : BigInt(0)), |
| }; |
| } |
| function extractBigIntConstraints(args) { |
| if (args[0] === undefined) { |
| return {}; |
| } |
| if (args[1] === undefined) { |
| const constraints = args[0]; |
| return constraints; |
| } |
| return { min: args[0], max: args[1] }; |
| } |
| function bigInt(...args) { |
| const constraints = buildCompleteBigIntConstraints(extractBigIntConstraints(args)); |
| if (constraints.min > constraints.max) { |
| throw new Error('fc.bigInt expects max to be greater than or equal to min'); |
| } |
| return new BigIntArbitrary(constraints.min, constraints.max); |
| } |
| export { bigInt }; |
|
|