UNPKG

nextgen-events

Version:

The next generation of events handling for javascript! New: abstract away the network!

454 lines (364 loc) 28.8 kB
"use strict" ; /* global benchmark, competitor */ const EventEmitter = require( 'events' ) ; const Ngev = require( '..' ) ; const LeanEvents = require( '../lib/LeanEvents.js' ) ; const EventEmitter3 = require( 'eventemitter3' ) ; benchmark( "Emitting to 1 listener, no arg" , () => { var nodeCount = 0 , nodeBus = new EventEmitter() ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; var ngevCount = 0 , ngevBus = new Ngev() ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; var leanCount = 0 , leanBus = new LeanEvents() ; leanBus.on( 'ready' , () => leanCount ++ ) ; var leanWithStateCount = 0 , leanWithStateBus = new LeanEvents() ; leanWithStateBus.defineStates( 'ready' ) ; leanWithStateBus.on( 'ready' , () => leanWithStateCount ++ ) ; var ev3Count = 0 , ev3Bus = new EventEmitter3() ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; competitor( "built-in Node.js events" , () => { nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; } ) ; competitor( "NextGen events" , () => { ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; } ) ; competitor( "Lean events" , () => { leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; } ) ; competitor( "Lean events with state event (no change between call)" , () => { leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; } ) ; competitor( "EventEmitter3 events" , () => { ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; } ) ; } ) ; benchmark( "Emitting to 1 listener, with 1 arg" , () => { var nodeCount = 0 , nodeBus = new EventEmitter() ; nodeBus.on( 'ready' , v => nodeCount += v ) ; var ngevCount = 0 , ngevBus = new Ngev() ; ngevBus.on( 'ready' , v => ngevCount += v ) ; var leanCount = 0 , leanBus = new LeanEvents() ; leanBus.on( 'ready' , v => leanCount += v ) ; var leanWithStateCount = 0 , leanWithStateBus = new LeanEvents() ; leanWithStateBus.on( 'ready' , v => leanWithStateCount += v ) ; var ev3Count = 0 , ev3Bus = new EventEmitter3() ; ev3Bus.on( 'ready' , v => ev3Count += v ) ; competitor( "built-in Node.js events" , () => { nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; nodeBus.emit( 'ready' , 2 ) ; } ) ; competitor( "NextGen events" , () => { ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; ngevBus.emit( 'ready' , 2 ) ; } ) ; competitor( "Lean events" , () => { leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; leanBus.emit( 'ready' , 2 ) ; } ) ; competitor( "Lean events with state event (no change between call)" , () => { leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; } ) ; competitor( "Lean events with state event (changing args at each call)" , () => { leanWithStateBus.emit( 'ready' , 1 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 1 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 1 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 1 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; leanWithStateBus.emit( 'ready' , 1 ) ; leanWithStateBus.emit( 'ready' , 2 ) ; } ) ; competitor( "EventEmitter3 events" , () => { ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; ev3Bus.emit( 'ready' , 2 ) ; } ) ; } ) ; benchmark( "Emitting to 3 listeners, no arg" , () => { var nodeCount = 0 , nodeBus = new EventEmitter() ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; var ngevCount = 0 , ngevBus = new Ngev() ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; var leanCount = 0 , leanBus = new LeanEvents() ; leanBus.on( 'ready' , () => leanCount ++ ) ; leanBus.on( 'ready' , () => leanCount ++ ) ; leanBus.on( 'ready' , () => leanCount ++ ) ; var leanWithStateCount = 0 , leanWithStateBus = new LeanEvents() ; leanWithStateBus.on( 'ready' , v => leanWithStateCount ++ ) ; leanWithStateBus.on( 'ready' , v => leanWithStateCount ++ ) ; leanWithStateBus.on( 'ready' , v => leanWithStateCount ++ ) ; var ev3Count = 0 , ev3Bus = new LeanEvents() ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; competitor( "built-in Node.js events" , () => { nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; nodeBus.emit( 'ready' ) ; } ) ; competitor( "NextGen events" , () => { ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; ngevBus.emit( 'ready' ) ; } ) ; competitor( "Lean events" , () => { leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; leanBus.emit( 'ready' ) ; } ) ; competitor( "Lean events with state event (no change between call)" , () => { leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; leanWithStateBus.emit( 'ready' ) ; } ) ; competitor( "EventEmitter3" , () => { ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.emit( 'ready' ) ; } ) ; } ) ; benchmark( "Emitting to 3 listeners, 3 args" , () => { var nodeCount = 0 , nodeBus = new EventEmitter() ; nodeBus.on( 'ready' , ( a , b , c ) => nodeCount += a + b + c ) ; nodeBus.on( 'ready' , ( a , b , c ) => nodeCount += a + b + c ) ; nodeBus.on( 'ready' , ( a , b , c ) => nodeCount += a + b + c ) ; var ngevCount = 0 , ngevBus = new Ngev() ; ngevBus.on( 'ready' , ( a , b , c ) => ngevCount += a + b + c ) ; ngevBus.on( 'ready' , ( a , b , c ) => ngevCount += a + b + c ) ; ngevBus.on( 'ready' , ( a , b , c ) => ngevCount += a + b + c ) ; var leanCount = 0 , leanBus = new LeanEvents() ; leanBus.on( 'ready' , ( a , b , c ) => leanCount += a + b + c ) ; leanBus.on( 'ready' , ( a , b , c ) => leanCount += a + b + c ) ; leanBus.on( 'ready' , ( a , b , c ) => leanCount += a + b + c ) ; var leanWithStateCount = 0 , leanWithStateBus = new LeanEvents() ; leanWithStateBus.on( 'ready' , ( a , b , c ) => leanWithStateCount += a + b + c ) ; leanWithStateBus.on( 'ready' , ( a , b , c ) => leanWithStateCount += a + b + c ) ; leanWithStateBus.on( 'ready' , ( a , b , c ) => leanWithStateCount += a + b + c ) ; var ev3Count = 0 , ev3Bus = new LeanEvents() ; ev3Bus.on( 'ready' , ( a , b , c ) => ev3Count += a + b + c ) ; ev3Bus.on( 'ready' , ( a , b , c ) => ev3Count += a + b + c ) ; ev3Bus.on( 'ready' , ( a , b , c ) => ev3Count += a + b + c ) ; competitor( "built-in Node.js events" , () => { nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 ) ; } ) ; competitor( "NextGen events" , () => { ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 ) ; } ) ; competitor( "Lean events" , () => { leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 ) ; } ) ; competitor( "Lean events with state event (no change between call)" , () => { leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; } ) ; competitor( "Lean events with state event (changing args at each call)" , () => { leanWithStateBus.emit( 'ready' , 10 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 20 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 30 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 10 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 30 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 ) ; } ) ; competitor( "EventEmitter3" , () => { ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 ) ; } ) ; } ) ; benchmark( "Emitting to 10 listeners, 10 args" , () => { var nodeCount = 0 , nodeBus = new EventEmitter() ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; nodeBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => nodeCount += a + b + c + d + e + f + g + h + i + j ) ; var ngevCount = 0 , ngevBus = new Ngev() ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; ngevBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ngevCount += a + b + c + d + e + f + g + h + i + j ) ; var leanCount = 0 , leanBus = new LeanEvents() ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; leanBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanCount += a + b + c + d + e + f + g + h + i + j ) ; var leanWithStateCount = 0 , leanWithStateBus = new LeanEvents() ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; leanWithStateBus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => leanWithStateCount += a + b + c + d + e + f + g + h + i + j ) ; var ev3Count = 0 , ev3Bus = new LeanEvents() ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; ev3Bus.on( 'ready' , ( a , b , c , d , e , f , g , h , i , j ) => ev3Count += a + b + c + d + e + f + g + h + i + j ) ; competitor( "built-in Node.js events" , () => { nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; nodeBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; } ) ; competitor( "NextGen events" , () => { ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ngevBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; } ) ; competitor( "Lean events" , () => { leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; } ) ; competitor( "Lean events with state event (no change between call)" , () => { leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; } ) ; competitor( "Lean events with state event (changing args at each call)" , () => { leanWithStateBus.emit( 'ready' , 10 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 30 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 50 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 70 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 90 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 20 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 40 , 5 , 6 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 60 , 7 , 8 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 80 , 9 , 10 ) ; leanWithStateBus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 100 ) ; } ) ; competitor( "EventEmitter3" , () => { ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; ev3Bus.emit( 'ready' , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ) ; } ) ; } ) ; benchmark( "Adding and removing listeners" , () => { var fn1 = () => nodeCount ++ , fn2 = () => nodeCount ++ , fn3 = () => nodeCount ++ , fn4 = () => nodeCount ++ , fn5 = () => nodeCount ++ ; var nodeCount = 0 , nodeBus = new EventEmitter() ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; var ngevCount = 0 , ngevBus = new Ngev() ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; var leanCount = 0 , leanBus = new LeanEvents() ; leanBus.on( 'ready' , () => leanCount ++ ) ; leanBus.on( 'ready' , () => leanCount ++ ) ; leanBus.on( 'ready' , () => leanCount ++ ) ; var ev3Count = 0 , ev3Bus = new LeanEvents() ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; competitor( "built-in Node.js events" , () => { nodeBus.on( 'ready' , fn1 ) ; nodeBus.on( 'ready' , fn2 ) ; nodeBus.on( 'ready' , fn3 ) ; nodeBus.on( 'ready' , fn4 ) ; nodeBus.on( 'ready' , fn5 ) ; nodeBus.off( 'ready' , fn1 ) ; nodeBus.off( 'ready' , fn2 ) ; nodeBus.off( 'ready' , fn3 ) ; nodeBus.off( 'ready' , fn4 ) ; nodeBus.off( 'ready' , fn5 ) ; } ) ; competitor( "NextGen events" , () => { ngevBus.on( 'ready' , fn1 ) ; ngevBus.on( 'ready' , fn2 ) ; ngevBus.on( 'ready' , fn3 ) ; ngevBus.on( 'ready' , fn4 ) ; ngevBus.on( 'ready' , fn5 ) ; ngevBus.off( 'ready' , fn1 ) ; ngevBus.off( 'ready' , fn2 ) ; ngevBus.off( 'ready' , fn3 ) ; ngevBus.off( 'ready' , fn4 ) ; ngevBus.off( 'ready' , fn5 ) ; } ) ; competitor( "Lean events" , () => { leanBus.on( 'ready' , fn1 ) ; leanBus.on( 'ready' , fn2 ) ; leanBus.on( 'ready' , fn3 ) ; leanBus.on( 'ready' , fn4 ) ; leanBus.on( 'ready' , fn5 ) ; leanBus.off( 'ready' , fn1 ) ; leanBus.off( 'ready' , fn2 ) ; leanBus.off( 'ready' , fn3 ) ; leanBus.off( 'ready' , fn4 ) ; leanBus.off( 'ready' , fn5 ) ; } ) ; competitor( "EventEmitter3" , () => { ev3Bus.on( 'ready' , fn1 ) ; ev3Bus.on( 'ready' , fn2 ) ; ev3Bus.on( 'ready' , fn3 ) ; ev3Bus.on( 'ready' , fn4 ) ; ev3Bus.on( 'ready' , fn5 ) ; ev3Bus.off( 'ready' , fn1 ) ; ev3Bus.off( 'ready' , fn2 ) ; ev3Bus.off( 'ready' , fn3 ) ; ev3Bus.off( 'ready' , fn4 ) ; ev3Bus.off( 'ready' , fn5 ) ; } ) ; } ) ; benchmark( "Adding 5 one-time listeners per emit" , () => { var fn1 = () => nodeCount ++ , fn2 = () => nodeCount ++ , fn3 = () => nodeCount ++ , fn4 = () => nodeCount ++ , fn5 = () => nodeCount ++ ; var nodeCount = 0 , nodeBus = new EventEmitter() ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; nodeBus.on( 'ready' , () => nodeCount ++ ) ; var ngevCount = 0 , ngevBus = new Ngev() ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; ngevBus.on( 'ready' , () => ngevCount ++ ) ; var leanCount = 0 , leanBus = new LeanEvents() ; leanBus.on( 'ready' , () => leanCount ++ ) ; leanBus.on( 'ready' , () => leanCount ++ ) ; leanBus.on( 'ready' , () => leanCount ++ ) ; var ev3Count = 0 , ev3Bus = new LeanEvents() ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; ev3Bus.on( 'ready' , () => ev3Count ++ ) ; competitor( "built-in Node.js events" , () => { nodeBus.once( 'ready' , fn1 ) ; nodeBus.once( 'ready' , fn2 ) ; nodeBus.once( 'ready' , fn3 ) ; nodeBus.once( 'ready' , fn4 ) ; nodeBus.once( 'ready' , fn5 ) ; nodeBus.emit( 'ready' ) ; nodeBus.once( 'ready' , fn1 ) ; nodeBus.once( 'ready' , fn2 ) ; nodeBus.once( 'ready' , fn3 ) ; nodeBus.once( 'ready' , fn4 ) ; nodeBus.once( 'ready' , fn5 ) ; nodeBus.emit( 'ready' ) ; } ) ; competitor( "NextGen events" , () => { ngevBus.once( 'ready' , fn1 ) ; ngevBus.once( 'ready' , fn2 ) ; ngevBus.once( 'ready' , fn3 ) ; ngevBus.once( 'ready' , fn4 ) ; ngevBus.once( 'ready' , fn5 ) ; ngevBus.emit( 'ready' ) ; ngevBus.once( 'ready' , fn1 ) ; ngevBus.once( 'ready' , fn2 ) ; ngevBus.once( 'ready' , fn3 ) ; ngevBus.once( 'ready' , fn4 ) ; ngevBus.once( 'ready' , fn5 ) ; ngevBus.emit( 'ready' ) ; } ) ; competitor( "Lean events" , () => { leanBus.once( 'ready' , fn1 ) ; leanBus.once( 'ready' , fn2 ) ; leanBus.once( 'ready' , fn3 ) ; leanBus.once( 'ready' , fn4 ) ; leanBus.once( 'ready' , fn5 ) ; leanBus.emit( 'ready' ) ; leanBus.once( 'ready' , fn1 ) ; leanBus.once( 'ready' , fn2 ) ; leanBus.once( 'ready' , fn3 ) ; leanBus.once( 'ready' , fn4 ) ; leanBus.once( 'ready' , fn5 ) ; leanBus.emit( 'ready' ) ; } ) ; competitor( "EventEmitter3" , () => { ev3Bus.once( 'ready' , fn1 ) ; ev3Bus.once( 'ready' , fn2 ) ; ev3Bus.once( 'ready' , fn3 ) ; ev3Bus.once( 'ready' , fn4 ) ; ev3Bus.once( 'ready' , fn5 ) ; ev3Bus.emit( 'ready' ) ; ev3Bus.once( 'ready' , fn1 ) ; ev3Bus.once( 'ready' , fn2 ) ; ev3Bus.once( 'ready' , fn3 ) ; ev3Bus.once( 'ready' , fn4 ) ; ev3Bus.once( 'ready' , fn5 ) ; ev3Bus.emit( 'ready' ) ; } ) ; } ) ;