Teh first one
[mldemos:kalians-mldemos.git] / _AlgorithmsPlugins / KernelMethods / dlib / test / tester.cpp
1 // Copyright (C) 2006  Davis E. King (davis@dlib.net)\r
2 // License: Boost Software License   See LICENSE.txt for the full license.\r
3 \r
4 #include <string>\r
5 #include "tester.h"\r
6 #include <cstdlib>\r
7 #include <dlib/threads.h>\r
8 \r
9 namespace test\r
10 {\r
11 // -----------------------------------------------------------------------------\r
12 \r
13     bool be_verbose = true;\r
14 \r
15 // -----------------------------------------------------------------------------\r
16 \r
17     static dlib::mutex spinner_mutex;\r
18 \r
19 // -----------------------------------------------------------------------------\r
20 \r
21     void check_test (\r
22         bool _exp,\r
23         long line,\r
24         const char* file,\r
25         const char* _exp_str\r
26     )\r
27     {\r
28         if ( !(_exp) )                                                         \r
29         {                                                                       \r
30             std::ostringstream dlib__out;                                       \r
31                 dlib__out << "\n\nError occurred at line " << line << ".\n";    \r
32                 dlib__out << "Error occurred in file " << file << ".\n";      \r
33                 dlib__out << "Failing expression was " << _exp_str << ".\n";           \r
34                 throw dlib::error(dlib__out.str());      \r
35         }\r
36     }                                                                      \r
37 \r
38 // -----------------------------------------------------------------------------\r
39 \r
40     map_of_testers& testers (\r
41     )\r
42     {\r
43         static map_of_testers t;\r
44         return t;\r
45     }\r
46 \r
47 // -----------------------------------------------------------------------------\r
48 \r
49     tester::\r
50     tester (\r
51         const std::string& switch_name_,\r
52         const std::string& description__,\r
53         unsigned long num_of_args__\r
54     ) :\r
55         switch_name(switch_name_),\r
56         description_(description__),\r
57         num_of_args_(num_of_args__)\r
58     {\r
59         using namespace std;\r
60         if (testers().is_in_domain(switch_name))\r
61         {\r
62             cerr << "ERROR: More than one tester has been defined with the switch '" << switch_name << "'." << endl;\r
63             exit(1);\r
64         }\r
65 \r
66         string temp(switch_name);\r
67         tester* t = this;\r
68         testers().add(temp,t);\r
69     }\r
70 \r
71 // -----------------------------------------------------------------------------\r
72 \r
73     const std::string& tester::\r
74     cmd_line_switch (\r
75     ) const\r
76     {\r
77         return switch_name;\r
78     }\r
79 \r
80 // -----------------------------------------------------------------------------\r
81 \r
82     const std::string& tester::\r
83     description (\r
84     ) const\r
85     {\r
86         return description_;\r
87     }\r
88 \r
89 // -----------------------------------------------------------------------------\r
90 \r
91     unsigned long tester::\r
92     num_of_args (\r
93     ) const\r
94     {\r
95         return num_of_args_;\r
96     }\r
97 \r
98 // -----------------------------------------------------------------------------\r
99 \r
100     void tester::\r
101     perform_test (\r
102     )\r
103     {\r
104     }\r
105 \r
106 // -----------------------------------------------------------------------------\r
107 \r
108     void tester::\r
109     perform_test (\r
110         const std::string&  \r
111     )\r
112     {\r
113     }\r
114 \r
115 // -----------------------------------------------------------------------------\r
116 \r
117     void tester::\r
118     perform_test (\r
119         const std::string&, \r
120         const std::string& \r
121     )\r
122     {\r
123     }\r
124 \r
125 // -----------------------------------------------------------------------------\r
126 \r
127     void print_spinner (\r
128     )\r
129     {\r
130         if (be_verbose)\r
131         {\r
132             using namespace std;\r
133             dlib::auto_mutex M(spinner_mutex);\r
134             static int i = 0;\r
135             cout << "\b\b";\r
136             switch (i)\r
137             {\r
138                 case 0: cout << '|'; break;\r
139                 case 1: cout << '/'; break;\r
140                 case 2: cout << '-'; break;\r
141                 case 3: cout << '\\'; break;\r
142             }\r
143             cout << " " << flush;\r
144             i = (i+1)%4;\r
145         }\r
146     }\r
147 \r
148 // -----------------------------------------------------------------------------\r
149 \r
150 }\r
151 \r
152 \r
153 \r