polyphony 0.38 → 0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/Gemfile.lock +1 -1
- data/ext/gyro/timer.c +14 -12
- data/lib/polyphony/version.rb +1 -1
- data/test/helper.rb +9 -0
- data/test/test_global_api.rb +9 -9
- data/test/test_io.rb +7 -0
- data/test/test_thread.rb +1 -1
- data/test/test_thread_pool.rb +2 -2
- data/test/test_throttler.rb +3 -5
- data/test/test_timer.rb +0 -24
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e3be3a6ec277c0c06e1d4b071f7fcee1229bbdde20d6b78b5b585ca9ac5624cd
|
4
|
+
data.tar.gz: 27f3e920372dc8ab8e40f07b72444ba08813533e2912c8400fe28ad50ed756c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6d4267e177eda276b2d643e0262d1475c9f9f0ebaed2dd8573c245127b618dab11b00c05e0ef58ba2f5b8fd88b127feb1cc0f94390e27c66ae8857d0a5eb1a65
|
7
|
+
data.tar.gz: 1006b8aa742a9c38bd39512c7f9bfbe3c33b0f07ee1b2e262d8f5f140114066599b9444726c3e9c8cb998326a779da8d14d159ebcf5df226f02eedaa78530f98
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
data/ext/gyro/timer.c
CHANGED
@@ -66,26 +66,28 @@ inline void timer_activate(struct Gyro_Timer *timer) {
|
|
66
66
|
ev_timer_start(timer->ev_loop, &timer->ev_timer);
|
67
67
|
}
|
68
68
|
|
69
|
-
inline void timer_deactivate(struct Gyro_Timer *timer, int
|
69
|
+
inline void timer_deactivate(struct Gyro_Timer *timer, int force_deactivate) {
|
70
70
|
if (!timer->active) return;
|
71
71
|
|
72
|
-
if (!timer->repeat || !non_recurring_only) {
|
73
|
-
ev_timer_stop(timer->ev_loop, &timer->ev_timer);
|
74
|
-
if (RTEST(timer->selector)) {
|
75
|
-
Gyro_Selector_remove_active_watcher(timer->selector, timer->self);
|
76
|
-
timer->selector = Qnil;
|
77
|
-
}
|
78
|
-
timer->ev_loop = 0;
|
79
|
-
timer->active = 0;
|
80
|
-
}
|
81
|
-
|
82
72
|
timer->fiber = Qnil;
|
73
|
+
|
74
|
+
// timer should not be deactivated if
|
75
|
+
if (timer->repeat && !force_deactivate) return;
|
76
|
+
|
77
|
+
ev_timer_stop(timer->ev_loop, &timer->ev_timer);
|
78
|
+
if (RTEST(timer->selector)) {
|
79
|
+
Gyro_Selector_remove_active_watcher(timer->selector, timer->self);
|
80
|
+
timer->selector = Qnil;
|
81
|
+
}
|
82
|
+
timer->ev_loop = 0;
|
83
|
+
timer->active = 0;
|
83
84
|
}
|
84
85
|
|
85
86
|
void Gyro_Timer_callback(struct ev_loop *ev_loop, struct ev_timer *ev_timer, int revents) {
|
86
87
|
struct Gyro_Timer *timer = (struct Gyro_Timer*)ev_timer;
|
87
88
|
|
88
|
-
|
89
|
+
if (timer->fiber != Qnil)
|
90
|
+
Fiber_make_runnable(timer->fiber, DBL2NUM(timer->after));
|
89
91
|
timer_deactivate(timer, 1);
|
90
92
|
}
|
91
93
|
|
data/lib/polyphony/version.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -18,6 +18,15 @@ Minitest::Reporters.use! [
|
|
18
18
|
Minitest::Reporters::SpecReporter.new
|
19
19
|
]
|
20
20
|
|
21
|
+
module MiniTest::Assertions
|
22
|
+
def assert_in_range(range, act)
|
23
|
+
msg = message(msg) {
|
24
|
+
"Expected #{act.inspect} to be in range #{range.inspect}"
|
25
|
+
}
|
26
|
+
assert range.include?(act), msg
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
21
30
|
class MiniTest::Test
|
22
31
|
def setup
|
23
32
|
if Fiber.current.children.size > 0
|
data/test/test_global_api.rb
CHANGED
@@ -106,7 +106,7 @@ class MoveOnAfterTest < MiniTest::Test
|
|
106
106
|
end
|
107
107
|
t1 = Time.now
|
108
108
|
|
109
|
-
|
109
|
+
assert_in_range 0..0.03, t1 - t0
|
110
110
|
assert_nil v
|
111
111
|
end
|
112
112
|
|
@@ -118,7 +118,7 @@ class MoveOnAfterTest < MiniTest::Test
|
|
118
118
|
end
|
119
119
|
t1 = Time.now
|
120
120
|
|
121
|
-
|
121
|
+
assert_in_range 0..0.02, t1 - t0
|
122
122
|
assert_equal :bar, v
|
123
123
|
end
|
124
124
|
|
@@ -129,7 +129,7 @@ class MoveOnAfterTest < MiniTest::Test
|
|
129
129
|
assert_equal Fiber.current, f.parent
|
130
130
|
v = sleep 1
|
131
131
|
t1 = Time.now
|
132
|
-
|
132
|
+
assert_in_range 0..0.02, t1 - t0
|
133
133
|
assert_equal 'foo', v
|
134
134
|
end
|
135
135
|
end
|
@@ -145,7 +145,7 @@ class CancelAfterTest < MiniTest::Test
|
|
145
145
|
end
|
146
146
|
end
|
147
147
|
t1 = Time.now
|
148
|
-
|
148
|
+
assert_in_range 0..0.02, t1 - t0
|
149
149
|
end
|
150
150
|
|
151
151
|
def test_cancel_after_without_block
|
@@ -157,7 +157,7 @@ class CancelAfterTest < MiniTest::Test
|
|
157
157
|
sleep 1
|
158
158
|
end
|
159
159
|
t1 = Time.now
|
160
|
-
|
160
|
+
assert_in_range 0..0.02, t1 - t0
|
161
161
|
end
|
162
162
|
end
|
163
163
|
|
@@ -204,7 +204,7 @@ class SpinLoopTest < MiniTest::Test
|
|
204
204
|
f = spin_loop(rate: 50) { buffer << (counter += 1) }
|
205
205
|
sleep 0.1
|
206
206
|
f.stop
|
207
|
-
|
207
|
+
assert_in_range 5..6, counter
|
208
208
|
end
|
209
209
|
end
|
210
210
|
|
@@ -217,7 +217,7 @@ class ThrottledLoopTest < MiniTest::Test
|
|
217
217
|
end
|
218
218
|
sleep 0.1
|
219
219
|
f.stop
|
220
|
-
|
220
|
+
assert_in_range 5..6, counter
|
221
221
|
end
|
222
222
|
|
223
223
|
def test_throttled_loop_with_count
|
@@ -248,14 +248,14 @@ class GlobalAPIEtcTest < MiniTest::Test
|
|
248
248
|
end
|
249
249
|
sleep 0.05
|
250
250
|
f.stop
|
251
|
-
|
251
|
+
assert_in_range 4..5, buffer.size
|
252
252
|
end
|
253
253
|
|
254
254
|
def test_sleep
|
255
255
|
t0 = Time.now
|
256
256
|
sleep 0.05
|
257
257
|
elapsed = Time.now - t0
|
258
|
-
|
258
|
+
assert_in_range 0.045..0.08, elapsed
|
259
259
|
|
260
260
|
f = spin { sleep }
|
261
261
|
snooze
|
data/test/test_io.rb
CHANGED
@@ -61,6 +61,13 @@ class IOTest < MiniTest::Test
|
|
61
61
|
@o.close
|
62
62
|
assert_equal 'foobarbaz', @i.read
|
63
63
|
end
|
64
|
+
|
65
|
+
def test_big_write
|
66
|
+
chunk = '*' * 60000
|
67
|
+
@o << chunk
|
68
|
+
@o.close
|
69
|
+
assert_equal chunk, @i.read
|
70
|
+
end
|
64
71
|
end
|
65
72
|
|
66
73
|
class IOClassMethodsTest < MiniTest::Test
|
data/test/test_thread.rb
CHANGED
data/test/test_thread_pool.rb
CHANGED
@@ -65,8 +65,8 @@ class ThreadPoolTest < MiniTest::Test
|
|
65
65
|
end
|
66
66
|
elapsed = Time.now - t0
|
67
67
|
|
68
|
-
|
69
|
-
|
68
|
+
assert_in_range 0..0.007, elapsed
|
69
|
+
assert_in_range 0..1, buffer.size
|
70
70
|
|
71
71
|
sleep 0.1 # allow time for threads to spawn
|
72
72
|
assert_equal @pool.size, threads.uniq.size
|
data/test/test_throttler.rb
CHANGED
@@ -10,8 +10,7 @@ class ThrottlerTest < MiniTest::Test
|
|
10
10
|
sleep 0.02
|
11
11
|
f.stop
|
12
12
|
snooze
|
13
|
-
|
14
|
-
assert buffer.size <= 3
|
13
|
+
assert_in_range 2..3, buffer.size
|
15
14
|
ensure
|
16
15
|
t.stop
|
17
16
|
end
|
@@ -24,7 +23,7 @@ class ThrottlerTest < MiniTest::Test
|
|
24
23
|
end
|
25
24
|
sleep 0.25
|
26
25
|
f.stop
|
27
|
-
|
26
|
+
assert_in_range 2..6, buffer.size
|
28
27
|
ensure
|
29
28
|
t.stop
|
30
29
|
end
|
@@ -35,8 +34,7 @@ class ThrottlerTest < MiniTest::Test
|
|
35
34
|
f = spin { loop { t.process { buffer << 1 } } }
|
36
35
|
sleep 0.02
|
37
36
|
f.stop
|
38
|
-
|
39
|
-
assert buffer.size <= 3
|
37
|
+
assert_in_range 2..3, buffer.size
|
40
38
|
ensure
|
41
39
|
t.stop
|
42
40
|
end
|
data/test/test_timer.rb
CHANGED
@@ -29,28 +29,4 @@ class TimerTest < MiniTest::Test
|
|
29
29
|
ensure
|
30
30
|
t.stop
|
31
31
|
end
|
32
|
-
|
33
|
-
def test_that_repeating_timer_compensates_for_drift
|
34
|
-
count = 0
|
35
|
-
t = Gyro::Timer.new(0.1, 0.1)
|
36
|
-
deltas = []
|
37
|
-
last = nil
|
38
|
-
spin {
|
39
|
-
last = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
40
|
-
loop {
|
41
|
-
t.await
|
42
|
-
now = ::Process.clock_gettime(::Process::CLOCK_MONOTONIC)
|
43
|
-
elapsed = (now - last)
|
44
|
-
deltas << elapsed
|
45
|
-
last = now
|
46
|
-
count += 1
|
47
|
-
sleep 0.05
|
48
|
-
break if count >= 3
|
49
|
-
}
|
50
|
-
}
|
51
|
-
suspend
|
52
|
-
assert_equal 0, deltas[1..-1].filter { |d| (d - 0.1).abs >= 0.05 }.size
|
53
|
-
ensure
|
54
|
-
t.stop
|
55
|
-
end
|
56
32
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: polyphony
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.39'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sharon Rosner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-04-
|
11
|
+
date: 2020-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|