00001
00002
00003 #include <cppscript>
00004
00005 var tests();
00006
00007 var test(var test_description, var test_fn)
00008 {
00009 return object("test").extend
00010 ("description", test_description)
00011 ("fn", test_fn);
00012 }
00013
00014 void run_test(var name, var test)
00015 {
00016 var t0 = timer();
00017 var check = test["fn"]();
00018 var t1 = timer();
00019
00020 writeln(
00021 pad(name,20) +
00022 pad("" + (t1-t0), 15) +
00023 check
00024 );
00025 }
00026
00027 var script_main(var tests_to_run)
00028 {
00029 var t = tests();
00030
00031 if(!tests_to_run)
00032 {
00033 writeln("Usage: bench [test_name...]\nPossible tests are:\n");
00034 writeln(pad("Test name", 20) + "Description");
00035 foreach( test, t )
00036 {
00037 writeln(pad(test, 20) + t[test]["description"]);
00038 }
00039 writeln(pad("all",20) + "Run all tests");
00040 return 1;
00041 }
00042
00043 var t0 = timer();
00044
00045 writeln( pad("Test name",20) + pad("Time (s)",15) + "Result");
00046 foreach(test, tests_to_run)
00047 {
00048 if(test == "all")
00049 {
00050 foreach(test, t) run_test(test, t[test]);
00051 }
00052 else if(t.contains(test))
00053 run_test(test, t[test]);
00054 else
00055 writeln("No such test: " + test);
00056 }
00057
00058 var t1 = timer();
00059 writeln( pad("Total time",20) + (t1-t0) );
00060
00061 return 0;
00062 }