{"ScriptPreparationCode":"class CustomTarget {\r\n constructor() {\r\n this.listeners = {}; \r\n }\r\n \r\n on(eventName, listener) {\r\n if (!(eventName in this.listeners)) {\r\n this.listeners[eventName] = new Set(); \r\n }\r\n \r\n this.listeners[eventName].add(listener);\r\n }\r\n \r\n off(eventName, listener) {\r\n this.listeners[eventName]?.delete(listener); \r\n }\r\n \r\n send(eventName, ...data) {\r\n if (!this.listeners[eventName]) {\r\n return 0; \r\n }\r\n \r\n for (let fn of this.listeners[eventName]) {\r\n\t\t\tfn(...data);\r\n }\r\n \r\n return this.listeners[eventName].count;\r\n }\r\n}\r\n \r\nconst listeners = 10;\r\nconst events = 1000;\r\n \r\nconst setupCustom = () =\u003E {\r\n const target = new CustomTarget();\r\n \r\n let total = 0;\r\n for (let i = 0; i \u003C listeners; i\u002B\u002B) {\r\n target.on(\u0027foo\u0027, (inc) =\u003E { total = total \u002B inc });\r\n }\r\n \r\n return () =\u003E {\r\n for (let i = 0; i \u003C events; i\u002B\u002B) {\r\n target.send(\u0027foo\u0027, 5);\r\n }\r\n }\r\n}\r\n \r\nconst setupNative = () =\u003E {\r\n const target = new EventTarget();\r\n let total = 0;\r\n for (let i = 0; i \u003C listeners; i\u002B\u002B) {\r\n target.addEventListener(\u0027foo\u0027, (e) =\u003E { total = total \u002B e.detail });\r\n }\r\n \r\n return () =\u003E {\r\n for (let i = 0; i \u003C events; i\u002B\u002B) {\r\n\t\tconst customEvent = new CustomEvent(\u0027foo\u0027, { detail: 5 });\r\n\t\ttarget.dispatchEvent(customEvent);\r\n }\r\n }\r\n}\r\n \r\nconst runCustomInt = setupCustom();\r\nconst runNative = setupNative();\r\n \r\nfunction runCustom() {\r\n runCustomInt(); \r\n}","TestCases":[{"Name":"custom","Code":"runCustom();","IsDeferred":false},{"Name":"native","Code":"runNative();","IsDeferred":false}]}