forked from romilly/quick2wire-python-api
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_timerfd.py
More file actions
119 lines (86 loc) · 2.67 KB
/
test_timerfd.py
File metadata and controls
119 lines (86 loc) · 2.67 KB
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
from time import time, sleep
from quick2wire.timerfd import Timer, timespec, itimerspec
import pytest
@pytest.mark.loopback
@pytest.mark.timer
def test_timespec_can_be_created_from_seconds():
t = timespec.from_seconds(4.125)
assert t.sec == 4
assert t.nsec == 125000000
@pytest.mark.loopback
@pytest.mark.timer
def test_itimerspec_can_be_created_from_seconds():
t = itimerspec.from_seconds(offset=4.125, interval=1.25)
assert t.value.sec == 4
assert t.value.nsec == 125000000
assert t.interval.sec == 1
assert t.interval.nsec == 250000000
@pytest.mark.loopback
@pytest.mark.timer
def test_timer_waits_for_time_to_pass():
with Timer(offset=0.125) as timer:
start = time()
timer.start()
timer.wait()
duration = time() - start
assert duration >= 0.125
@pytest.mark.loopback
@pytest.mark.timer
def test_timer_can_repeat_with_interval():
with Timer(interval=0.125) as timer:
start = time()
timer.start()
timer.wait()
timer.wait()
duration = time() - start
assert duration >= 0.25
@pytest.mark.loopback
@pytest.mark.timer
def test_timer_can_repeat_with_interval_after_offset():
with Timer(offset=0.25, interval=0.125) as timer:
start = time()
timer.start()
timer.wait()
timer.wait()
timer.wait()
duration = time() - start
assert duration >= 0.5
@pytest.mark.loopback
@pytest.mark.timer
def test_can_change_offset_while_timer_is_running():
with Timer(offset=1.0) as timer:
start = time()
timer.start()
timer.offset = 0.125
timer.wait()
duration = time() - start
assert duration < 1
@pytest.mark.loopback
@pytest.mark.timer
def test_can_change_interval_while_timer_is_running():
with Timer(offset=0.125, interval=1.0) as timer:
start = time()
timer.start()
timer.wait()
timer.interval = 0.125
timer.wait()
duration = time() - start
assert duration < 1
@pytest.mark.loopback
@pytest.mark.timer
def test_timer_cannot_be_started_if_offset_and_interval_are_both_zero():
with Timer() as timer:
try:
timer.start()
assert False, "should have thrown ValueError"
except ValueError:
# expected
pass
@pytest.mark.loopback
@pytest.mark.timer
def test_timer_reports_how_many_times_it_triggered_since_last_wait():
with Timer(interval=0.0125) as timer:
timer.start()
sleep(0.5)
n = timer.wait()
assert n >= 4