{"ScriptPreparationCode":"var makeSequence = function(n, changeProb, seed) {\r\n if (seed === undefined) seed = 42 \u003E\u003E\u003E 0;\r\n var s = seed \u003E\u003E\u003E 0;\r\n var rand = function() {\r\n s = (1664525 * s \u002B 1013904223) \u003E\u003E\u003E 0;\r\n return s / 4294967296;\r\n };\r\n var seq = [];\r\n var last = [rand() \u003C 0.5, rand() \u003C 0.5, rand() \u003C 0.5];\r\n for (var i = 0; i \u003C n; i\u002B\u002B) {\r\n last = last.map(function(v){ return (rand() \u003C changeProb) ? !v : v; });\r\n seq.push([last[0], last[1], last[2]]);\r\n }\r\n return seq;\r\n};\r\n\r\n// Parameters you can tweak:\r\nvar N_RENDERS = 5000; // how many renders per test run\r\nvar CHANGE_PROB = 0.10; // probability each dep flips per render (0..1)\r\n\r\n// One shared, immutable sequence for both test cases:\r\nvar SEQ = makeSequence(N_RENDERS, CHANGE_PROB, 123);\r\n\r\n// Component under test: with useMemo\r\nvar WithMemo = function(props) {\r\n var t = props.triplet; // [isClose, isLimit, isEnabled]\r\n var shouldShow = React.useMemo(function() {\r\n return !t[0] || (!t[1] \u0026\u0026 t[2]);\r\n }, t); // note: passing array is fine here because we rebuild it from SEQ\r\n return null;\r\n};\r\n\r\n// Component under test: without useMemo\r\nvar WithoutMemo = function(props) {\r\n var t = props.triplet;\r\n var shouldShow = !t[0] || (!t[1] \u0026\u0026 t[2]);\r\n return null;\r\n};\r\n\r\n// Minimal runner: mounts once, then synchronously re-renders N times\r\n// with the precomputed triplets. Uses legacy ReactDOM.render for sync commits.\r\nvar run = function(Component, seq) {\r\n var container = document.createElement(\u0027div\u0027);\r\n document.body.appendChild(container);\r\n\r\n // initial mount\r\n ReactDOM.render(React.createElement(Component, { triplet: seq[0] }), container);\r\n\r\n // drive N-1 updates; ReactDOM.render is synchronous in legacy mode\r\n for (var i = 1; i \u003C seq.length; i\u002B\u002B) {\r\n ReactDOM.render(React.createElement(Component, { triplet: seq[i] }), container);\r\n }\r\n\r\n // cleanup\r\n ReactDOM.unmountComponentAtNode(container);\r\n document.body.removeChild(container);\r\n};","TestCases":[{"Name":"memoized hook","Code":"run(WithMemo, SEQ);","IsDeferred":false},{"Name":"raw hook","Code":"run(WithoutMemo, SEQ);","IsDeferred":false}]}