/** * @import { Radix } from "./num.js" */ import { Num, add, sub } from "./index.js" /** * @param { number } number * @param { number } radix * @param { string } prefix */ function stringify(number, radix, prefix) { return (Math.sign(number) === -1 ? "-" : "") + prefix + Math.abs(number).toString(radix).toUpperCase(); } for (const [radix, prefix] of /**@type { [radix: Radix, prefix: string][]}*/([[2, "0b"], [8, "0o"], [16, "0x"], [10, ""]])) { for (let i = 0; i < 0xFFF; i++) { for (let j = 0; j < 0xFFF; j++) { const a1 = Num.parse(`${prefix}${i.toString(radix)}`); const a2 = a1.copy(); const b = Num.parse(`${prefix}${j.toString(radix)}`); add(a1, b); sub(a2, b); console.assert(a1.toString() === stringify(i + j, radix, prefix), i, j, stringify(i + j, radix, prefix), a1.toString()); console.assert(a2.toString() === stringify(i - j, radix, prefix), i, j, stringify(i - j, radix, prefix), a2.toString()); } } }