{"ScriptPreparationCode":"var PAIRS = [];\r\nfor (let i = 0; i \u003C 1000; \u002B\u002Bi) {\r\n PAIRS.push([\r\n Math.round(Math.random() * 65535),\r\n Math.round(Math.random() * 65535),\r\n ]);\r\n}","TestCases":[{"Name":"BigInt","Code":"const serdeBigint = {\r\n read(value) {\r\n const value_u32 = BigInt(value);\r\n let minor = Number(value_u32) \u0026 ~0xFFFF_0000;\r\n const major = Number((value_u32 \u0026 ~BigInt(0x0000_FFFF)) \u003E\u003E BigInt(16));\r\n\r\n while (minor \u003E= 1)\r\n minor /= 10;\r\n\r\n return Math.round((major \u002B minor) * 1e5) / 1e5;\r\n },\r\n write(value) {\r\n let minor = Math.round((value % 1) * 1e5);\r\n const major = Math.round(value - (minor / 1e5));\r\n\r\n while (minor \u0026\u0026 !(minor % 10))\r\n minor /= 10;\r\n\r\n return \u00600x${\r\n ((BigInt(major) \u003C\u003C BigInt(16)) \u002B BigInt(minor))\r\n .toString(16)\r\n .padStart(8, \u00220\u0022)\r\n .toUpperCase()\r\n \t}\u0060;\r\n },\r\n}\r\n\r\nfor (const [major, minor] of PAIRS) {\r\n const version = parseFloat(\u0060${major}.${minor}\u0060);\r\n const written = serdeBigint.write(version);\r\n const read = serdeBigint.read(written);\r\n \r\n if (read !== version) {\r\n throw new Error();\r\n }\r\n}","IsDeferred":false},{"Name":"regex \u002B parseInt","Code":"const serde = {\r\n read(value) {\r\n let [major, minor] = value\r\n .match(/0x([0-9a-f]{4})([0-9a-f]{4})/i)\r\n .slice(1)\r\n .map(v =\u003E parseInt(v, 16));\r\n \r\n while (minor \u003E= 1)\r\n minor /= 10;\r\n\r\n return Math.round((major \u002B minor) * 1e5) / 1e5;\r\n },\r\n write(value) {\r\n let minor = Math.round((value % 1) * 1e5);\r\n const major = Math.round(value - (minor / 1e5));\r\n\r\n while (minor \u0026\u0026 !(minor % 10))\r\n minor /= 10;\r\n\r\n const hexify = n =\u003E n\r\n .toString(16)\r\n .padStart(4, \u00220\u0022)\r\n .toUpperCase();\r\n\r\n return \u00600x${hexify(major)}${hexify(minor)}\u0060;\r\n },\r\n}\r\n\r\nfor (let [major, minor] of PAIRS) {\r\n const version = parseFloat(\u0060${major}.${minor}\u0060);\r\n const written = serde.write(version);\r\n const read = serde.read(written);\r\n \r\n if (read !== version) {\r\n throw new Error();\r\n }\r\n}","IsDeferred":false},{"Name":"regex \u002B parseInt with parseFloat(template)","Code":"const serde = {\r\n read(value) {\r\n const [major, minor] = value\r\n .match(/0x([0-9a-f]{4})([0-9a-f]{4})/i)\r\n .slice(1)\r\n .map(v =\u003E parseInt(v, 16));\r\n\r\n return parseFloat(\u0060${major}.${minor}\u0060);\r\n },\r\n write(value) {\r\n let minor = Math.round((value % 1) * 1e5);\r\n const major = Math.round(value - (minor / 1e5));\r\n\r\n while (minor \u0026\u0026 !(minor % 10))\r\n minor /= 10;\r\n\r\n const hexify = n =\u003E n\r\n .toString(16)\r\n .padStart(4, \u00220\u0022)\r\n .toUpperCase();\r\n\r\n return \u00600x${hexify(major)}${hexify(minor)}\u0060;\r\n },\r\n}\r\n\r\nfor (let [major, minor] of PAIRS) {\r\n const version = parseFloat(\u0060${major}.${minor}\u0060);\r\n const written = serde.write(version);\r\n const read = serde.read(written);\r\n \r\n if (read !== version) {\r\n throw new Error();\r\n }\r\n}","IsDeferred":false}]}