function shouldBe(actual, expected) { if (actual !== expected) throw new Error(`bad value: expected:(${expected}),actual:(${actual})`); } function toString(value, radix) { return fiatInt52(value).toString(radix); } noInline(toString); function toString10(value) { return `${fiatInt52(value)}`; } noInline(toString10); function expected(num, radix) { let characters = "0123456789abcdefghijklmnopqrstuvwxyz"; let result = ""; let negative = false; if (num < 0) { negative = true; num = -num; } do { const index = num % radix; result = characters[index] + result; num = (num - index) / radix; } while (num); if (negative) return '-' + result; return result; } for (var i = 0; i < 1e4; ++i) { toString(i, 10); toString(i, 36); toString10(i); } for (var radix = 2; radix < 37; ++radix) { for (var lessThanRadix = -2000; lessThanRadix < radix; ++lessThanRadix) shouldBe(toString(lessThanRadix, radix), expected(lessThanRadix, radix)); for (var greaterThanRadix = radix; greaterThanRadix < 2000; ++greaterThanRadix) shouldBe(toString(greaterThanRadix, radix), expected(greaterThanRadix, radix)); } { var radix = 10; for (var lessThanRadix = -2000; lessThanRadix < radix; ++lessThanRadix) shouldBe(toString10(lessThanRadix), expected(lessThanRadix, radix)); for (var greaterThanRadix = radix; greaterThanRadix < 2000; ++greaterThanRadix) shouldBe(toString10(greaterThanRadix), expected(greaterThanRadix, radix)); }