comparison dynamin/core/benchmark.d @ 0:aa4efef0f0b1

Initial commit of code.
author Jordan Miner <jminer7@gmail.com>
date Mon, 15 Jun 2009 22:10:48 -0500
parents
children 73060bc3f004
comparison
equal deleted inserted replaced
-1:000000000000 0:aa4efef0f0b1
1 // Written in the D programming language
2 // www.digitalmars.com/d/
3
4 /*
5 * The contents of this file are subject to the Mozilla Public License Version
6 * 1.1 (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 * http://www.mozilla.org/MPL/
9 *
10 * Software distributed under the License is distributed on an "AS IS" basis,
11 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
12 * for the specific language governing rights and limitations under the
13 * License.
14 *
15 * The Original Code is the Dynamin library.
16 *
17 * The Initial Developer of the Original Code is Jordan Miner.
18 * Portions created by the Initial Developer are Copyright (C) 2006-2009
19 * the Initial Developer. All Rights Reserved.
20 *
21 * Contributor(s):
22 * Jordan Miner <jminer7@gmail.com>
23 *
24 */
25
26 module dynamin.core.benchmark;
27
28 import dynamin.all_core;
29 import dynamin.core.string;
30 import tango.io.Stdout;
31
32 /**
33 * Returns: The average number of milliseconds one call of the specified
34 * delegate took.
35 */
36 real benchmark(int repetitions, void delegate() dg) { // use static opCall()?
37 long time = Environment.runningTime;
38 for(int i = 0; i < repetitions; ++i)
39 dg();
40 return (Environment.runningTime-time)/cast(real)repetitions;
41 }
42 real benchmark(void delegate() dg) {
43 return benchmark(1, dg);
44 }
45 /**
46 * name can be null
47 */
48 real benchmarkAndWrite(string name, int repetitions, void delegate() dg) {
49 real time = benchmark(repetitions, dg);
50 Stdout.format("{} took {:.2}ms.", name, time).newline; // TODO: verify :.2
51 return time;
52 }
53 real benchmarkAndWrite(string name, void delegate() dg) {
54 return benchmarkAndWrite(name, 1, dg);
55 }
56
57 /**
58 * As the constructor calls the Start() method, the only time one would need
59 * to is when reusing a Benchmark object.
60 */
61 class Benchmark {
62 long _startTime;
63 this() {
64 start();
65 }
66 void start() {
67 _startTime = Environment.runningTime;
68 }
69 long time() {
70 return _startTime-Environment.runningTime;
71 }
72 void writeTime(string opName) {
73 if(opName is null)
74 opName = "Benchmark";
75 Stdout.format("{} took {}ms.", opName, time).newline;
76 }
77
78 /**
79 * calls the specified delegate the specified number of times and
80 * returns the average time one call took
81 */
82 static long measure(int times, void delegate() d) {
83 long time = Environment.runningTime;
84 for(int i = 0; i < times; ++i)
85 d();
86 return (Environment.runningTime-time)/times;
87 }
88 }