Viiite 0.2.0 Released

viiite version 0.2.0 has been released!

An alternative to Benchmark

Viiite brings tools to benchmark and analyze the complexity of your
algorithms.
It has been designed as an alternative to Benchmark that let your
benchmarks
evolve smoothly from simple measures to more complex infrastructures.

It has changed a lot since the last release, so try it and give us
some feedback!

Changes:

0.2.0

Awesome new features

  • Viiite is now able to work on complete benchmark suites (located in
    ‘./benchmarks’ and looking for ‘**/*.rb’ files by default).
    Subcommands
    automatically resolve benchmark names passed as arguments. For
    example:

    ./benchmarks/
    bench_iteration.rb → viiite run bench_iteration
    Array/
    bench_sort.rb → viiite run Array/bench_sort

  • Default behavior remains compatible with 0.1.0:

    • ‘run’, ‘plot’ and ‘report’ accept a benchmark file as first argument
      and
      bypass the benchmark suite in this case.
    • when invoked without any argument, ‘plot’ and ‘report’ assume a
      .rash stream
      on standard input
  • For each benchmark, the results of the last run are saved in a cache.
    ‘plot’
    and ‘report’ will use data in the cache if available or automatically
    run the
    benchmark.

  • The default behavior may be controlled through the following main
    options:
    –suite=[FOLDER], --pattern=[GLOB], --[no-]cache=[FOLDER], --append,
    –write. Example:

    Run all benchmarks on all rubies, 10 times each, appending all

results
# in cache
rvm exec viiite --append run --runs=10

Enhancements to individual commands

  • ‘viiite run’

    • Added a --runs=NB option to run the same benchmark NB times. This
      allows
      keeping benchmarks clean; no NB.times{ … } or range_over(1…NB,
      :run)
      for obtaining a representative sample are needed in the benchmark
      itself.
    • The previous option comes hand-in-hand with --run-key=KEY that
      allows
      specifying the attribute name for the run number (defaults to :run)
    • Without argument, runs all the benchmarks of the suite
  • ‘viiite plot’

    • Added --highcharts options; outputs a json array containing one hash
      for
      each chart, to be used as options Highcharts.Chart(…) (cfr.
      highcharts.js)
    • Added -d option, to debug; outputs the query result that would be
      used by
      the concrete --xxx formatter.
  • ‘viiite report’

    • output has been improved: user, system, total and real time are
      explicitely
      shown (different attributes/columns instead of one tms measure).
    • added a ‘–ff=FORMAT’ option for float format of the different
      measures
      (defaults to %.6f)
    • added a ‘–stddev=[MEASURE]’ option for displaying standard
      deviation over
      all regrouped runs (on a specific measure defaulting to tms.total)

Other improvements

  • The garbage collector is started before running report{ … } blocks
  • Viiite does not depend on benchmark (stdlib) anymore
  • Improved Viiite.which_ruby; it should always output something like
    ‘#{rubyname} #{version}#{patchlevel}’ from now on

Bug fixes

  • Fixed a bug when using ‘viiite report --regroup=x,y,z --hierarchy’
    with more
    than 2 regrouping attributes.

eregon & blambeau