2 using System.Reflection;
3 using System.Collections.Generic;
5 public class CategoryAttribute : Attribute
7 public CategoryAttribute (string category) {
11 public string Category {
16 public class TestDriver {
18 static public int RunTests (Type type, string[] args) {
19 int failed = 0, ran = 0;
20 int result, expected, elen;
24 bool do_timings = false;
27 DateTime start, end = DateTime.Now;
31 var exclude = new Dictionary<string, string> ();
32 List<string> new_args = new List<string> ();
33 if (args != null && args.Length > 0) {
34 for (j = 0; j < args.Length; j++) {
35 if (args [j] == "--time") {
38 } else if (args [j] == "--iter") {
39 iterations = Int32.Parse (args [j + 1]);
41 } else if ((args [j] == "-v") || (args [j] == "--verbose")) {
43 } else if (args [j] == "--exclude") {
44 exclude [args [j + 1]] = args [j + 1];
47 new_args.Add (args [j]);
52 methods = type.GetMethods (BindingFlags.Public|BindingFlags.NonPublic|BindingFlags.Static);
53 for (int iter = 0; iter < iterations; ++iter) {
54 for (i = 0; i < methods.Length; ++i) {
55 name = methods [i].Name;
56 if (!name.StartsWith ("test_"))
58 if (new_args.Count > 0) {
60 for (j = 0; j < new_args.Count; j++) {
61 if (name.EndsWith (new_args [j])) {
69 if (exclude.Count > 0) {
70 var attrs = methods [i].GetCustomAttributes (typeof (CategoryAttribute), false);
72 foreach (CategoryAttribute attr in attrs) {
73 if (exclude.ContainsKey (attr.Category))
78 Console.WriteLine ("Skipping '{0}'.", name);
83 for (j = 5; j < name.Length; ++j)
84 if (!Char.IsDigit (name [j]))
87 Console.WriteLine ("Running '{0}' ...", name);
88 expected = Int32.Parse (name.Substring (5, j - 5));
90 result = (int)methods [i].Invoke (null, null);
93 long tdiff = end.Ticks - start.Ticks;
94 int mdiff = (int)tdiff/10000;
96 Console.WriteLine ("{0} took {1} ms", name, mdiff);
99 if (result != expected) {
101 Console.WriteLine ("{0} failed: got {1}, expected {2}", name, result, expected);
106 Console.WriteLine ("Total ms: {0}", tms);
109 Console.WriteLine ("Regression tests: {0} ran, {1} skipped, {2} failed in {3}", ran, nskipped, failed, type);
111 Console.WriteLine ("Regression tests: {0} ran, {1} failed in {2}", ran, failed, type);
114 //Console.WriteLine ("Regression tests: {0} ran, {1} failed in [{2}]{3}", ran, failed, type.Assembly.GetName().Name, type);
117 static public int RunTests (Type type) {
118 return RunTests (type, null);