=== threejs-0001: WebGLUniformsGroups.allocateBindingPointIndex() uses Array.indexOf() ===
N=100   k=100  : defective=0.081ms  fixed=0.003ms  speedup=24.8x
N=500   k=500  : defective=2.041ms  fixed=0.020ms  speedup=103.6x
N=1000  k=1000 : defective=8.716ms  fixed=0.043ms  speedup=202.4x
N=2000  k=2000 : defective=35.161ms  fixed=0.093ms  speedup=378.8x

=== threejs-0002: StackNode build() uses nodes.indexOf() inside filter callback — ===
N=100   k=100  : defective=0.081ms  fixed=0.003ms  speedup=24.9x
N=500   k=500  : defective=2.034ms  fixed=0.020ms  speedup=101.6x
N=1000  k=1000 : defective=8.360ms  fixed=0.044ms  speedup=189.0x
N=2000  k=2000 : defective=33.892ms  fixed=0.094ms  speedup=362.2x

=== threejs-0003: getBindingGroups() triple-nested loop (line 683-700) ===
N=100   k=100  : defective=0.081ms  fixed=0.015ms  speedup=5.4x
N=500   k=500  : defective=2.039ms  fixed=0.020ms  speedup=102.5x
N=1000  k=1000 : defective=8.345ms  fixed=0.045ms  speedup=187.1x
N=2000  k=2000 : defective=35.596ms  fixed=0.093ms  speedup=383.7x

=== threejs-0006: EventDispatcher.addEventListener() O(N²) via indexOf dedup on every add ===
N=100   k=100  : defective=0.081ms  fixed=0.003ms  speedup=25.2x
N=500   k=500  : defective=2.068ms  fixed=0.020ms  speedup=103.3x
N=1000  k=1000 : defective=8.361ms  fixed=0.065ms  speedup=128.2x
N=2000  k=2000 : defective=33.475ms  fixed=0.092ms  speedup=364.3x

=== threejs-0007: CWE-407: list-scan inside loop in threejs-0007 (generic model) ===
N=100   k=100  : defective=0.081ms  fixed=0.003ms  speedup=24.8x
N=500   k=500  : defective=2.036ms  fixed=0.020ms  speedup=102.8x
N=1000  k=1000 : defective=8.382ms  fixed=0.043ms  speedup=194.2x
N=2000  k=2000 : defective=34.237ms  fixed=0.095ms  speedup=360.8x

