[ { "name": "a half rounds away from zero under half-up", "args": ["7", "2", "half-up"], "expect": "4" }, { "name": "a negative half rounds away from zero too, as math.round-div does", "args": ["-7", "2", "half-up"], "expect": "-4" }, { "name": "half-even rounds 2.5 down to the even 2", "args": ["5", "2", "half-even"], "expect": "2" }, { "name": "half-even rounds 3.5 up to the even 4", "args": ["7", "2", "half-even"], "expect": "4" }, { "name": "2^53 + 1 halved, down: a JavaScript number would already have lost the 1", "args": ["9007199254740993", "2", "down"], "expect": "4503599627370496" }, { "name": "2^53 + 1 halved, half-up", "args": ["9007199254740993", "2", "half-up"], "expect": "4503599627370497" }, { "name": "thirty digits divided by a thousand, half-up", "args": ["123456789012345678901234567890", "1000", "half-up"], "expect": "123456789012345678901234568" }, { "name": "thirty negative digits divided by a thousand, down is towards zero", "args": ["-123456789012345678901234567890", "1000", "down"], "expect": "-123456789012345678901234567" }, { "name": "up rounds any remainder away from zero", "args": ["1", "3", "up"], "expect": "1" }, { "name": "up on a negative is away from zero as well", "args": ["-1", "3", "up"], "expect": "-1" }, { "name": "a small negative that rounds to zero is 0, never -0", "args": ["-1", "3", "half-up"], "expect": "0" }, { "name": "a negative denominator makes the quotient negative", "args": ["10", "-4", "half-up"], "expect": "-3" }, { "name": "zero divided by anything is zero", "args": ["0", "5", "up"], "expect": "0" }, { "name": "an exact tie beyond 64 bits goes to even under half-even", "args": ["25000000000000000000", "10000000000000000000", "half-even"], "expect": "2" }, { "name": "the next tie beyond 64 bits goes up to even", "args": ["35000000000000000000", "10000000000000000000", "half-even"], "expect": "4" }, { "name": "exact division has nothing to round", "args": ["100000000000000000000", "4", "up"], "expect": "25000000000000000000" }, { "name": "a zero denominator is an error", "args": ["1", "0", "half-up"], "expectError": "denominator must not be zero" }, { "name": "a decimal point is not a whole number", "args": ["1.5", "2", "half-up"], "expectError": "not a whole number in decimal" }, { "name": "a leading zero is refused", "args": ["07", "2", "half-up"], "expectError": "not a whole number in decimal" }, { "name": "a number instead of a string is refused", "args": [7, "2", "half-up"], "expectError": "not a whole number in decimal" }, { "name": "an unknown mode is an error", "args": ["7", "2", "sideways"], "expectError": "unknown rounding mode" } ]