31 while (!done && (retry++ < 3)) {
39 std::cout <<
"Once in a blue moon this test fails -- I don't know why."
41 std::cout <<
"t.duration() = " << t.
duration() << std::endl;
42 std::cout <<
"t.duration() should be 00:05.0" << std::endl;
58 while ((d1 != 5.0) && (retry++ < 10)) {
67 std::cout <<
"Once in a blue moon this test fails -- I don't know why."
69 std::cout <<
"d1 = " << d1 << std::endl;
70 std::cout <<
"d1 should be 5.0" << std::endl;
101 timer t(base_value, base_value+5);
113 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
114 assert(t.
stopped_at() ==
"2003 Oct 28 15:49:35");
117 t.
assign(base_value, base_value+(5*60));
128 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
129 assert(t.
stopped_at() ==
"2003 Oct 28 15:54:30");
132 t.
assign(base_value, base_value+(5*60*60));
142 assert(t.
stop_value() == base_value+(5*60*60));
143 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
144 assert(t.
stopped_at() ==
"2003 Oct 28 20:49:30");
145 assert(t.
duration() ==
"05:00:00.0");
147 t.
assign(base_value, base_value+(3*60*60*24));
157 assert(t.
stop_value() == base_value+(3*60*60*24));
158 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
159 assert(t.
stopped_at() ==
"2003 Oct 31 15:49:30");
160 assert(t.
duration() ==
"3d 00:00:00.0");
162 t.
assign(base_value, base_value+(5*60*60*24));
172 assert(t.
stop_value() == base_value+(5*60*60*24));
173 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
174 assert(t.
stopped_at() ==
"2003 Nov 2 15:49:30");
175 assert(t.
duration() ==
"5d 00:00:00.0");
177 t.
assign(base_value, base_value+(64*60*60*24));
187 assert(t.
stop_value() == base_value+(64*60*60*24));
188 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
189 assert(t.
stopped_at() ==
"2003 Dec 31 15:49:30");
190 assert(t.
duration() ==
"64d 00:00:00.0");
192 t.
assign(base_value, base_value+(65*60*60*24));
202 assert(t.
stop_value() == base_value+(65*60*60*24));
203 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
204 assert(t.
stopped_at() ==
"2004 Jan 1 15:49:30");
205 assert(t.
duration() ==
"65d 00:00:00.0");
207 start_value = base_value;
208 stop_value = base_value +5;
209 t.
assign(start_value, stop_value);
250 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
251 assert(t.
stopped_at() ==
"2003 Oct 28 15:49:35");
253 assert(t.
eta(0) ==
"??:??.?");
254 assert(t.
eta(1) ==
"08:15.0");
255 assert(t.
eta(10) ==
"00:45.0");
256 assert(t.
eta(50) ==
"00:05.0");
257 assert(t.
eta(75) ==
"00:01.6");
258 assert(t.
eta(93) ==
"00:00.3");
259 assert(t.
eta(99) ==
"00:00.0");
260 assert(t.
eta(100) ==
"00:00.0");
261 assert(t.
eta(101) ==
"-00:00.0");
262 assert(t.
eta(107) ==
"-00:00.3");
263 assert(t.
eta(125) ==
"-00:01.0");
264 assert(t.
eta(150) ==
"-00:01.6");
265 assert(t.
eta(190) ==
"-00:02.3");
266 assert(t.
eta(199) ==
"-00:02.4");
267 assert(t.
eta(200) ==
"-00:02.5");
268 assert(t.
eta(0,100) ==
"??:??.?");
269 assert(t.
eta(1,100) ==
"08:15.0");
270 assert(t.
eta(10,100) ==
"00:45.0");
271 assert(t.
eta(50,100) ==
"00:05.0");
272 assert(t.
eta(75,100) ==
"00:01.6");
273 assert(t.
eta(93,100) ==
"00:00.3");
274 assert(t.
eta(99,100) ==
"00:00.0");
275 assert(t.
eta(100,100) ==
"00:00.0");
276 assert(t.
eta(101,100) ==
"-00:00.0");
277 assert(t.
eta(107,100) ==
"-00:00.3");
278 assert(t.
eta(125,100) ==
"-00:01.0");
279 assert(t.
eta(150,100) ==
"-00:01.6");
280 assert(t.
eta(190,100) ==
"-00:02.3");
281 assert(t.
eta(199,100) ==
"-00:02.4");
282 assert(t.
eta(200,100) ==
"-00:02.5");
284 start_value = base_value;
285 stop_value = base_value +5*60*60*24*365 +6*60*60*24 +7*60*60 +8*60 +9;
286 t.
assign(start_value, stop_value);
327 assert(t.
started_at() ==
"2003 Oct 28 15:49:30");
328 assert(t.
stopped_at() ==
"2008 Nov 1 22:57:39");
329 assert(t.
duration() ==
"5y 6d 07:08:09.0");
330 assert(t.
eta(0) ==
"??:??.?");
331 assert(t.
eta(1) ==
"496y 258d 10:26:51.0");
332 assert(t.
eta(10) ==
"45y 56d 16:13:21.0");
333 assert(t.
eta(50) ==
"5y 6d 07:08:09.0");
334 assert(t.
eta(75) ==
"1y 245d 10:22:43.0");
335 assert(t.
eta(93) ==
"137d 20:09:00.0");
336 assert(t.
eta(99) ==
"18d 11:57:03.1");
337 assert(t.
eta(100) ==
"00:00.0");
338 assert(t.
eta(101) ==
"-18d 03:09:35.1");
339 assert(t.
eta(107) ==
"-119d 19:18:28.6");
341 (t.
eta(125) ==
"-1y 1d 06:13:37.8")
342 || (t.
eta(125) ==
"-1y 1d 06:13:37.7")
344 assert(t.
eta(150) ==
"-1y 245d 10:22:43.0");
345 assert(t.
eta(190) ==
"-2y 137d 10:57:32.6");
346 assert(t.
eta(199) ==
"-2y 181d 01:08:16.5");
347 assert(t.
eta(200) ==
"-2y 185d 15:34:04.5");
348 assert(t.
eta(0,100) ==
"??:??.?");
349 assert(t.
eta(1,100) ==
"496y 258d 10:26:51.0");
350 assert(t.
eta(10,100) ==
"45y 56d 16:13:21.0");
351 assert(t.
eta(50,100) ==
"5y 6d 07:08:09.0");
352 assert(t.
eta(75,100) ==
"1y 245d 10:22:43.0");
353 assert(t.
eta(93,100) ==
"137d 20:09:00.0");
354 assert(t.
eta(99,100) ==
"18d 11:57:03.1");
355 assert(t.
eta(100,100) ==
"00:00.0");
356 assert(t.
eta(101,100) ==
"-18d 03:09:35.1");
357 assert(t.
eta(107,100) ==
"-119d 19:18:28.6");
359 (t.
eta(125,100) ==
"-1y 1d 06:13:37.8")
360 || (t.
eta(125,100) ==
"-1y 1d 06:13:37.7")
362 assert(t.
eta(150,100) ==
"-1y 245d 10:22:43.0");
363 assert(t.
eta(190,100) ==
"-2y 137d 10:57:32.6");
364 assert(t.
eta(199,100) ==
"-2y 181d 01:08:16.5");
365 assert(t.
eta(200,100) ==
"-2y 185d 15:34:04.5");
368 int main(
int argc,
char const * argv[])
const duration_type duration_secs(void) const
Reutrn the duration in seconds.
int main(int argc, char const *argv[])
const duration_type duration_hours(void) const
Return the duration in hours.
void use_localtime(const bool a_switch)
Set whether to use localtime or GMT when constructing strings.
void assign(const timer &a_timer)
Assign timer values from another timer instance.
void start(void)
Start (or restart) the timer.
const std::string stopped_at(void) const
Generate a stopped-at string.
const value_type start_value(void) const
Return the timer start value.
const std::string started_at(void) const
Generate a started-at string.
const duration_type duration_years(void) const
Return the duration in years.
const value_type stop_value(void) const
Return the timer stop value.
const std::string duration(void) const
Generate a duration string.
const std::string eta(unsigned int a_percent_complete) const
Given a percent-complete for some unknown task, estimate a time to completion.
const duration_type duration_days(void) const
Return the duration in days.
const duration_type duration_mins(void) const
Return the duration in minutes.
void stop(void)
Stop the timer.