1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/* Copyright (c) 2008, 2017, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software Foundation,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
#include <my_global.h>
#include <my_pthread.h>
#include <pfs_atomic.h>
#include <pfs_timer.h>
#include "my_sys.h"
#include <tap.h>
void test_timers()
{
ulonglong t1_a;
ulonglong t2_a;
ulonglong t3_a;
ulonglong t4_a;
ulonglong t5_a;
ulonglong t1_b;
ulonglong t2_b;
ulonglong t3_b;
ulonglong t4_b;
ulonglong t5_b;
my_timer_init(&sys_timer_info);
init_timers();
t1_a= get_timer_pico_value(TIMER_NAME_CYCLE);
/* Wait 5 seconds */
my_sleep(5000000);
t1_b= get_timer_pico_value(TIMER_NAME_CYCLE);
t2_a= get_timer_pico_value(TIMER_NAME_NANOSEC);
my_sleep(5000000);
t2_b= get_timer_pico_value(TIMER_NAME_NANOSEC);
t3_a= get_timer_pico_value(TIMER_NAME_MICROSEC);
my_sleep(5000000);
t3_b= get_timer_pico_value(TIMER_NAME_MICROSEC);
t4_a= get_timer_pico_value(TIMER_NAME_MILLISEC);
my_sleep(5000000);
t4_b= get_timer_pico_value(TIMER_NAME_MILLISEC);
t5_a= get_timer_pico_value(TIMER_NAME_TICK);
my_sleep(5000000);
t5_b= get_timer_pico_value(TIMER_NAME_TICK);
/*
Print the timer values, for manual inspection by a human.
Tests involving low level timers can not be automated.
*/
diag("cycle a: %13llu", t1_a);
diag("nano a: %13llu", t2_a);
diag("micro a: %13llu", t3_a);
diag("milli a: %13llu", t4_a);
diag("tick a: %13llu", t5_a);
diag("cycle b: %13llu", t1_b);
diag("nano b: %13llu", t2_b);
diag("micro b: %13llu", t3_b);
diag("milli b: %13llu", t4_b);
diag("tick b: %13llu", t5_b);
diag("cycle b-a: %13llu", t1_b-t1_a);
diag("nano b-a: %13llu", t2_b-t2_a);
diag("micro b-a: %13llu", t3_b-t3_a);
diag("milli b-a: %13llu", t4_b-t4_a);
diag("tick b-a: %13llu", t5_b-t5_a);
if ((t1_a == 0) && (t1_b == 0))
skip(1, "cycle timer not implemented");
else
ok(t1_b > t1_a, "cycle timer ascending");
if ((t2_a == 0) && (t2_b == 0))
skip(1, "nano timer not implemented");
else
ok(t2_b > t2_a, "nano timer ascending");
if ((t3_a == 0) && (t3_b == 0))
skip(1, "micro timer not implemented");
else
ok(t3_b > t3_a, "micro timer ascending");
if ((t4_a == 0) && (t4_b == 0))
skip(1, "milli timer not implemented");
else
ok(t4_b > t4_a, "milli timer ascending");
if ((t5_a == 0) && (t5_b == 0))
skip(1, "tick timer not implemented");
else
ok(t5_b > t5_a, "tick timer ascending");
}
void do_all_tests()
{
test_timers();
}
int main(int, char **)
{
plan(5);
MY_INIT("pfs_timer-t");
do_all_tests();
my_end(0);
return (exit_status());
}
|