 
   run: (options) ->
 
-    original = options.original
+    old    = options.old
     repeat = options.repeat ? 1
     report = options.report is true
     store  = options.store is true

    string[0 ... index]

  reportHeader: ->
    h1 = chalk.blue pad(12, 'old rate')
    h2 = ' |' + chalk.blue pad 12, 'new rate'
    h3 = ' |' + pad 10, 'change'
    h4 = ' |' + chalk.magenta pad 12, 'old secs'
    h5 = ' |' + chalk.magenta pad 12, 'new secs'
    h6 = ' |' + chalk.bold ' label'
    console.log h1 + h2 + h3 + h4 + h5 + h6
    console.log '--------------------------------------------------------------------'

  reportResult: ({benchmark, repeat, elapsed, original}) ->

    originalSecs = original.seconds + (original.nanos / 1e9)
    newSecs      = elapsed[0] + (elapsed[1] / 1e9)

    originalRate = original.repeat / originalSecs
    newRate      = repeat / newSecs

    secs0 = chalk.magenta @format 12, originalSecs
    rate0 = chalk.blue @format 12, originalRate

    secs1 = chalk.magenta @format 12, newSecs
    rate1 = chalk.blue @format 12, newRate

    change = Math.round(((newRate - originalRate) / originalRate) * 100)
    color =
      if change > 0.01 then chalk.green
      else if change < -0.01 then chalk.red
      else chalk.black
    change = color(@format 9, change.toFixed 0) + '%'

    label = chalk.bold benchmark.label


    line = rate0 + ' |' + rate1 + ' |' + change + ' |' + secs0 + ' |' + secs1 + ' |  ' + label
    console.log line


  storeResult: ({benchmark, repeat, elapsed}) ->

      benchmark.setup()

      # pre-run for optimization
      prerun = if repeat is 1 then 1 else Math.max 100, Math.floor repeat * 0.25
      benchmark.run prerun # TODO: support asynchronous ...

      start = process.hrtime()

