{"ScriptPreparationCode":"function branchingClamp(min, max, x) {\r\n if (x \u003C min) return min;\r\n if (x \u003E max) return max;\r\n return x;\r\n}\r\n\r\nfunction lodashClamp(number, lower, upper) {\r\n number = \u002Bnumber\r\n lower = \u002Blower\r\n upper = \u002Bupper\r\n lower = lower === lower ? lower : 0\r\n upper = upper === upper ? upper : 0\r\n if (number === number) {\r\n number = number \u003C= upper ? number : upper\r\n number = number \u003E= lower ? number : lower\r\n }\r\n return number\r\n}\r\n\r\nfunction branchlessMulClamp(min, max, x) {\r\n const isLow = \u002B(x \u003C min);\r\n const isHigh = \u002B(x \u003E max);\r\n return (\r\n (isLow * min) |\r\n (isHigh * max) |\r\n (\u002B!(isLow ^ isHigh) * x)\r\n );\r\n}\r\n\r\nfunction ternaryClamp(min, max, x) {\r\n return x \u003C min ? min : x \u003E max ? max : x;\r\n}\r\n\r\nfunction minmaxClamp(min, max, x) {\r\n return Math.min(max, Math.max(min, x));\r\n}","TestCases":[{"Name":"branching if","Code":"for (let i = 0; i \u003C= 100; i\u002B\u002B) {\r\n\tbranchingClamp(0, 100, i);\r\n}","IsDeferred":false},{"Name":"lodash","Code":"for (let i = 0; i \u003C= 100; i\u002B\u002B) {\r\n\tlodashClamp(0, 100, i);\r\n}","IsDeferred":false},{"Name":"Branchless multiply","Code":"for (let i = 0; i \u003C= 100; i\u002B\u002B) {\r\n\tbranchlessMulClamp(0, 100, i);\r\n}","IsDeferred":false},{"Name":"Ternary clamp","Code":"for (let i = 0; i \u003C= 100; i\u002B\u002B) {\r\n\tternaryClamp(0, 100, i);\r\n}","IsDeferred":false},{"Name":"min max clamp","Code":"for (let i = 0; i \u003C= 100; i\u002B\u002B) {\r\n\tminmaxClamp(0, 100, i);\r\n}","IsDeferred":false}]}