{"ScriptPreparationCode":"const ta16 = new Uint16Array(1);\r\nconst ta32 = new Uint32Array(1);\r\nconst bound = 13000;","TestCases":[{"Name":"Classic 16","Code":"if ((bound \u0026 -bound) === bound) {\r\n window.crypto.getRandomValues(ta16);\r\n return bound * ta16[0] \u003E\u003E\u003E 16;\r\n}\r\nconst limit = 65536 - 65536 % bound;\r\ndo {\r\n window.crypto.getRandomValues(ta16);\r\n} while (ta16[0] \u003E= limit);\r\nreturn ta16[0] % bound;","IsDeferred":false},{"Name":"Mul shf 16","Code":"if ((bound \u0026 -bound) === bound) {\r\n window.crypto.getRandomValues(ta16);\r\n return bound * ta16[0] \u003E\u003E\u003E 16;\r\n}\r\nconst limit = (-bound \u003E\u003E\u003E 0) % bound;\r\nlet value;\r\ndo {\r\n window.crypto.getRandomValues(ta16);\r\n value = ta16[0] * bound;\r\n} while ((value \u0026 65535) \u003C limit);\r\nreturn value \u003E\u003E\u003E 16;","IsDeferred":false},{"Name":"Imul shf 16","Code":"if ((bound \u0026 -bound) === bound) {\r\n window.crypto.getRandomValues(ta16);\r\n return bound * ta16[0] \u003E\u003E\u003E 16;\r\n}\r\nconst limit = (-bound \u003E\u003E\u003E 0) % bound;\r\nlet value;\r\ndo {\r\n window.crypto.getRandomValues(ta16);\r\n value = Math.imul(ta16[0], bound);\r\n} while ((value \u0026 65535) \u003C limit);\r\nreturn value \u003E\u003E\u003E 16;","IsDeferred":false},{"Name":"Classic int","Code":"if ((bound \u0026 -bound) === bound) {\r\n window.crypto.getRandomValues(ta32);\r\n return ta32[0] * bound / 4294967296 \u003E\u003E\u003E 0;\r\n}\r\nconst limit = 4294967296 - 4294967296 % bound;\r\ndo {\r\n window.crypto.getRandomValues(ta32);\r\n} while (ta32[0] \u003E= limit);\r\nreturn ta32[0] % bound;","IsDeferred":false},{"Name":"Mul shf bigint","Code":"if ((bound \u0026 -bound) === bound) {\r\n window.crypto.getRandomValues(ta32);\r\n return ta32[0] * bound / 4294967296 \u003E\u003E\u003E 0;\r\n}\r\nconst limit = (-bound \u003E\u003E\u003E 0) % bound;\r\nlet bits, mLow;\r\n let mHigh;\r\n do {\r\n window.crypto.getRandomValues(ta32);\r\n bits = ta32[0] \u003E\u003E\u003E 1;\r\n const m = BigInt(bits) * BigInt(bound);\r\n mLow = Number(m \u0026 2147483647n);\r\n mHigh = Number(m \u003E\u003E 31n);\r\n } while (mLow \u003C limit);\r\nreturn mHigh;","IsDeferred":false},{"Name":"Mul shf 32","Code":"if ((bound \u0026 -bound) === bound) {\r\n window.crypto.getRandomValues(ta32);\r\n return ta32[0] * bound / 4294967296 \u003E\u003E\u003E 0;\r\n}\r\nconst limit = (-bound \u003E\u003E\u003E 0) % bound;\r\nlet value;\r\ndo {\r\n window.crypto.getRandomValues(ta32);\r\n value = ta32[0] * bound;\r\n} while ((value \u0026 4294967295) % bound \u003C limit);\r\nreturn value / 4294967296 \u003E\u003E\u003E 0;","IsDeferred":false},{"Name":"java nextInt16(bound)","Code":"if ((bound \u0026 -bound) === bound) {\r\n crypto.getRandomValues(ta16);\r\n return bound * ta16[0] \u003E\u003E\u003E 16;\r\n}\r\nlet value;\r\ndo {\r\n crypto.getRandomValues(ta16);\r\n value = ta16[0] % bound;\r\n} while (ta16[0] - value \u002B (bound - 1) \u003C 0);\r\nreturn value;","IsDeferred":false},{"Name":"java nextInt32(bound)","Code":"if ((bound \u0026 -bound) === bound) {\r\n window.crypto.getRandomValues(ta32);\r\n return ta32[0] * bound / 4294967296 \u003E\u003E\u003E 0;\r\n}\r\nlet bits, value;\r\ndo {\r\n window.crypto.getRandomValues(ta32);\r\n bits = ta32[0] \u003E\u003E\u003E 1;\r\n value = bits % bound;\r\n} while (bits - value \u002B (bound - 1) \u003C 0);\r\nreturn value;","IsDeferred":false}]}