{"ScriptPreparationCode":"\tfunction ProxyHandler(array, take, add) {\r\n\t\tconst self = this;\r\n\t\tthis.take = () =\u003E take.call(this);\r\n\t\tthis.add = value =\u003E add.call(this, value);\r\n\t\tthis.array = array;\r\n\t\tthis.length = array.length;\r\n\t\tthis.index0 = 0;\r\n\t}\r\n\tProxyHandler.prototype.get = function (array, accessor, proxy) {\r\n\t\tswitch (accessor) {\r\n\t\t\tcase \u0022take\u0022:\r\n\t\t\t\treturn this.take;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \u0022add\u0022:\r\n\t\t\t\treturn this.add;\r\n\t\t\t\tbreak;\r\n\t\t\tcase \u0022length\u0022:\r\n\t\t\t\treturn this.length;\r\n\t\t\tdefault:\r\n\t\t\t\treturn array[this.index0 \u002B Number(accessor)];\r\n\t\t}\r\n\t};\r\n\tProxyHandler.prototype.set = function (array, index, value, proxy) {\r\n\t\tconst newIndex = this.index0 \u002B Number(index);\r\n\t\tif (newIndex \u003E= this.length) {\r\n\t\t\tthis.length = newIndex \u002B 1;\r\n\t\t}\r\n\t\tarray[newIndex] = value;\r\n\t\treturn true;\r\n\t};\r\n\tfunction takeQueue() {\r\n\t\tif (this.length \u003E 0) {\r\n\t\t\tthis.length--;\r\n\t\t\tthis.index0\u002B\u002B;\r\n\t\t\treturn this.array[this.index0 - 1];\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\tfunction takeStack() {\r\n\t\tif (this.length \u003E 0) {\r\n\t\t\tthis.length--;\r\n\t\t\treturn this.array[this.index0 \u002B this.length];\r\n\t\t}\r\n\t\treturn undefined;\r\n\t}\r\n\tfunction add(value) {\r\n\t\tthis.array[this.index0 \u002B this.length] = value;\r\n\t\tthis.length\u002B\u002B;\r\n\t}\r\n\tfunction createStack(iterable = null) {\r\n\t\tif (iterable !== null) {\r\n\t\t\tvar array = Array.from(iterable);\r\n\t\t} else {\r\n\t\t\tvar array = [];\r\n\t\t}\r\n\t\treturn new Proxy(array, new ProxyHandler(array, takeStack, add));\r\n\t}\r\n\tfunction createQueue(iterable = null) {\r\n\t\tif (iterable !== null) {\r\n\t\t\tvar array = Array.from(iterable);\r\n\t\t} else {\r\n\t\t\tvar array = [];\r\n\t\t}\r\n\t\treturn new Proxy(array, new ProxyHandler(array, takeQueue, add));\r\n\t}\r\nvar a1 = new Array(50000000);\r\nvar a2 = new Array(50000000);\r\nvar q = createQueue(new Array(50000000));\r\nvar s = createStack(new Array(50000000));","TestCases":[{"Name":"Array Shift","Code":"a1.shift();\r\na1.shift();\r\na1.shift();","IsDeferred":false},{"Name":"Array Pop","Code":"a2.pop();\r\na2.pop();\r\na2.pop();","IsDeferred":false},{"Name":"Custom Shift","Code":"q.take();\r\nq.take();\r\nq.take();","IsDeferred":false},{"Name":"Custom Pop","Code":"s.take();\r\ns.take();\r\ns.take();","IsDeferred":false}]}