a3b12a2003-01-19Martin Nilsson // $Id: benchmark.pike,v 1.4 2003/01/19 18:47:44 nilsson Exp $
284c2a2002-12-06Martin Nilsson 
6148162002-12-14Martin Nilsson constant description = "Runs some built in Pike benchmarks.";
284c2a2002-12-06Martin Nilsson constant help = #" Benchmarks Pike with %d built in benchmark tests. Arguments: -h, --help Shows this help text. -m<number>, --max-runs=<number> Runs a test at most <number> of times. Defaults to 25. -s<number>, --max-seconds=<number> Runs a test at most <number> of seconds, rounded up to the closest complete test. Defaults to 5.
2c52e42002-12-17Per Hedbor  -t<glob>, --tests=<glob> Only run the specified tests.
284c2a2002-12-06Martin Nilsson ";
a3b12a2003-01-19Martin Nilsson int(0..) main(int num, array(string) args)
284c2a2002-12-06Martin Nilsson { mapping(string:Tools.Shoot.Test) tests=([]); array results=({}); foreach (indices(Tools.Shoot);;string test) { program p; Tools.Shoot.Test t; if ((programp(p=Tools.Shoot[test])) && (t=p())->perform) tests[test]=t; } int seconds_per_test = 5; int maximum_runs = 25;
2c52e42002-12-17Per Hedbor  string test_glob = "*";
284c2a2002-12-06Martin Nilsson 
2c52e42002-12-17Per Hedbor  foreach(Getopt.find_all_options(args, ({ ({ "help", Getopt.NO_ARG, "-h,--help"/"," }), ({ "maxrun", Getopt.HAS_ARG, "-m,--max-runs"/"," }), ({ "maxsec", Getopt.HAS_ARG, "-s,--max-seconds"/"," }), ({ "tests", Getopt.HAS_ARG, "-t,--tests"/"," }), })), array opt)
284c2a2002-12-06Martin Nilsson  switch(opt[0]) { case "help": write(help, sizeof(tests)); return 0; case "maxrun": maximum_runs = (int)opt[1]; break; case "maxsec": seconds_per_test = (int)opt[1]; break;
2c52e42002-12-17Per Hedbor  case "tests": test_glob = opt[1];
284c2a2002-12-06Martin Nilsson  }
a3b12a2003-01-19Martin Nilsson  int ecode; ecode += Tools.Shoot.ExecTest("Overhead",Tools.Shoot.Overhead())
284c2a2002-12-06Martin Nilsson  ->run(0,1,1); // fill caches write("test total user mem (runs)\n"); /* always run overhead check first */
2c52e42002-12-17Per Hedbor  foreach (glob(test_glob,({"Overhead"})+(sort(indices(tests))-({"Overhead"})));;string id)
284c2a2002-12-06Martin Nilsson  {
a3b12a2003-01-19Martin Nilsson  ecode += Tools.Shoot.ExecTest(id,tests[id]) ->run(seconds_per_test,maximum_runs);
284c2a2002-12-06Martin Nilsson  }
a3b12a2003-01-19Martin Nilsson  return ecode;
284c2a2002-12-06Martin Nilsson }