docs: function Benchmark(name, fn, options) {
      var me = this;
  
      // allow instance creation without the `new` operator
      if (me == null || me.constructor != Benchmark) {
        return new Benchmark(name, fn, options);
      }
      // juggle arguments
      if (isClassOf(name, 'Object')) {
        // 1 argument (options)
        options = name;
      }
      else if (isClassOf(name, 'Function')) {
        // 2 arguments (fn, options)
        options = fn;
        fn = name;
      }
      else if (isClassOf(fn, 'Object')) {
        // 2 arguments (name, options)
        options = fn;
        fn = null;
        me.name = name;
      }
      else {
        // 3 arguments (name, fn [, options])
        me.name = name;
      }
      setOptions(me, options);
      me.id || (me.id = ++counter);
      me.fn == null && (me.fn = fn);
      me.stats = deepClone(me.stats);
      me.times = deepClone(me.times);
    }