On Monday, 30 March 2015 at 23:29:40 UTC, Jonathan wrote:
I have no idea if this has been discussed yet, but I was thinking it would be neat to have benchmark blocks that only run when specified, like how unittest works.

Code:

benchmarks
{
 import std.conv : to;
 int a;
 void f() {auto b = to!string(a);}
 auto r = benchmark!(f)(10_000);
 auto f0Result = to!Duration(r[0]);
 writeln(f0Result)
}

Example:
rdmd -benchmarks -main myapp.d

Alternatively, the writeln could be replaced with some kind of standard benchmark output utility (similar to the idea of assert when used for unit tests).

Thoughts?

Would this do what you're after?

version(benchmark) {
unittest {
  import std.conv : to;
  int a;
  void f() {auto b = to!string(a);}
  auto r = benchmark!(f)(10_000);
  auto f0Result = to!Duration(r[0]);
  writeln(f0Result)
 }
}

rdmd -main -- -version=benchmark -unittest myapp.d


Or something along those lines.

This will run all the normal unit tests as well as the benchmark tests, which I'd argue is a good thing anyway.

bye,
lobo

Reply via email to