old_contents: // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  // Add and remove a lot of different events to an EventEmitter, then check
  // that we didn't leak the event names.
  var assert = require('assert');
  var events = require('../fastemitter.js');
  
  var e = new events.EventEmitter();
  
  for (var i = 0; i < 60; ++i) {
    var name = 'a-pretty-long-event-name-' + i;
    e.on(name, assert.fail);
    e.removeListener(name, assert.fail);
  }
  
  
  assert(e._eventLength > 0 );
  assert(e._eventLength < 60 );
  
new_contents: // Copyright Joyent, Inc. and other Node contributors.
  //
  // Permission is hereby granted, free of charge, to any person obtaining a
  // copy of this software and associated documentation files (the
  // "Software"), to deal in the Software without restriction, including
  // without limitation the rights to use, copy, modify, merge, publish,
  // distribute, sublicense, and/or sell copies of the Software, and to permit
  // persons to whom the Software is furnished to do so, subject to the
  // following conditions:
  //
  // The above copyright notice and this permission notice shall be included
  // in all copies or substantial portions of the Software.
  //
  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
  // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
  // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
  // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
  // USE OR OTHER DEALINGS IN THE SOFTWARE.
  
  // Add and remove a lot of different events to an EventEmitter, then check
  // that we didn't leak the event names.
  var assert = require('assert');
  var events = require('../fastemitter.js');
  assert.equal(typeof gc, 'function', 'Run this test with --expose-gc');
  gc();
  
  var e = new events.EventEmitter();
  var before = process.memoryUsage().heapUsed;
  
  for (var i = 0; i < 2.5e5; ++i) {
    var name = 'a-pretty-long-event-name-' + i;
    e.on(name, assert.fail);
    e.removeListener(name, assert.fail);
  }
  gc();
  var after = process.memoryUsage().heapUsed;
  assert(after - before < 1024*1024, 'EventEmitter leaks event names.');
  
subject: Improve performance of readding listener on different slot by Infinity.