internal void RunTests() { resultHandler.HandleStartRun(options); var types = typeof(Program).Assembly .GetTypes() .OrderBy(type => type.FullName) .Where(type => type.GetMethods(AllInstance) .Any(IsBenchmark)); foreach (Type type in types) { if (options.TypeFilter != null && type.Name != options.TypeFilter) { continue; } var ctor = type.GetConstructor(Type.EmptyTypes); if (ctor == null) { resultHandler.HandleWarning(string.Format("Ignoring {0}: no public parameterless constructor", type.Name)); continue; } resultHandler.HandleStartType(type); object instance = ctor.Invoke(null); foreach (var method in type.GetMethods(AllInstance).Where(IsBenchmark)) { if (options.MethodFilter != null && method.Name != options.MethodFilter) { continue; } if (method.GetParameters().Length != 0) { resultHandler.HandleWarning(string.Format("Ignoring {0}: method has parameters", method.Name)); continue; } BenchmarkResult result = RunBenchmark(method, instance, options); if (result.Duration == Duration.Zero) { resultHandler.HandleWarning(string.Format("Test {0} had zero duration; no useful result.", result.Method.Name)); } resultHandler.HandleResult(result); } resultHandler.HandleEndType(); } resultHandler.HandleEndRun(); }
internal override void HandleResult(BenchmarkResult result) { Console.WriteLine(formatString, result.Method.Name, result.CallsPerSecond, result.Iterations, result.Duration.Ticks, result.NanosecondsPerCall); }
/// <summary> /// Called once for each test. /// </summary> /// <param name="result"></param> internal virtual void HandleResult(BenchmarkResult result) { }