polyphony 0.16 → 0.17

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.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +11 -11
  5. data/TODO.md +14 -5
  6. data/examples/core/channel_echo.rb +3 -3
  7. data/examples/core/enumerator.rb +1 -1
  8. data/examples/core/fork.rb +1 -1
  9. data/examples/core/genserver.rb +1 -1
  10. data/examples/core/lock.rb +3 -3
  11. data/examples/core/multiple_spawn.rb +2 -2
  12. data/examples/core/nested_async.rb +1 -1
  13. data/examples/core/nested_multiple_spawn.rb +3 -3
  14. data/examples/core/resource.rb +1 -1
  15. data/examples/core/resource_cancel.rb +1 -1
  16. data/examples/core/resource_delegate.rb +1 -1
  17. data/examples/core/sleep_spawn.rb +2 -2
  18. data/examples/core/spawn.rb +1 -1
  19. data/examples/core/spawn_cancel.rb +1 -1
  20. data/examples/core/spawn_error.rb +5 -5
  21. data/examples/core/supervisor.rb +4 -4
  22. data/examples/core/supervisor_with_cancel_scope.rb +3 -3
  23. data/examples/core/supervisor_with_error.rb +4 -4
  24. data/examples/core/supervisor_with_manual_move_on.rb +4 -4
  25. data/examples/core/thread.rb +2 -2
  26. data/examples/core/thread_cancel.rb +2 -2
  27. data/examples/core/thread_pool.rb +2 -2
  28. data/examples/core/throttle.rb +3 -3
  29. data/examples/fs/read.rb +1 -1
  30. data/examples/http/happy_eyeballs.rb +1 -1
  31. data/examples/http/http_client.rb +1 -1
  32. data/examples/http/http_server.rb +1 -1
  33. data/examples/http/http_server_throttled.rb +1 -1
  34. data/examples/http/http_ws_server.rb +2 -2
  35. data/examples/http/https_wss_server.rb +1 -1
  36. data/examples/interfaces/pg_client.rb +1 -1
  37. data/examples/interfaces/pg_pool.rb +1 -1
  38. data/examples/interfaces/redis_channels.rb +5 -5
  39. data/examples/interfaces/redis_pubsub.rb +2 -2
  40. data/examples/interfaces/redis_pubsub_perf.rb +3 -3
  41. data/examples/io/cat.rb +13 -0
  42. data/examples/io/echo_client.rb +2 -2
  43. data/examples/io/echo_server.rb +1 -1
  44. data/examples/io/echo_server_with_timeout.rb +1 -1
  45. data/examples/io/echo_stdin.rb +1 -1
  46. data/examples/io/io_read.rb +9 -0
  47. data/examples/io/system.rb +11 -0
  48. data/examples/performance/perf_multi_snooze.rb +2 -2
  49. data/examples/performance/perf_snooze.rb +2 -2
  50. data/examples/performance/thread-vs-fiber/polyphony_server.rb +2 -2
  51. data/ext/ev/io.c +53 -4
  52. data/lib/polyphony/core/coprocess.rb +1 -0
  53. data/lib/polyphony/core/supervisor.rb +1 -1
  54. data/lib/polyphony/extensions/io.rb +97 -17
  55. data/lib/polyphony/extensions/kernel.rb +47 -27
  56. data/lib/polyphony/http/server.rb +1 -1
  57. data/lib/polyphony/postgres.rb +0 -4
  58. data/lib/polyphony/version.rb +1 -1
  59. data/test/test_coprocess.rb +13 -13
  60. data/test/test_core.rb +12 -12
  61. data/test/test_io.rb +95 -3
  62. data/test/test_kernel.rb +26 -0
  63. metadata +6 -2
data/test/test_io.rb CHANGED
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'minitest/autorun'
2
4
  require 'bundler/setup'
3
5
  require 'polyphony'
6
+ require 'fileutils'
4
7
 
5
8
  class IOTest < MiniTest::Test
6
9
  def setup
@@ -12,19 +15,19 @@ class IOTest < MiniTest::Test
12
15
  count = 0
13
16
  msg = nil
14
17
  [
15
- spawn {
18
+ coproc {
16
19
  @o.write("hello")
17
20
  @o.close
18
21
  },
19
22
 
20
- spawn {
23
+ coproc {
21
24
  while count < 5
22
25
  sleep 0.01
23
26
  count += 1
24
27
  end
25
28
  },
26
29
 
27
- spawn {
30
+ coproc {
28
31
  msg = @i.read
29
32
  }
30
33
  ].each(&:await)
@@ -39,4 +42,93 @@ class IOTest < MiniTest::Test
39
42
  @o.close
40
43
  assert_equal('foobarbaz', @i.read)
41
44
  end
45
+ end
46
+
47
+ class IOClassMethodsTest < MiniTest::Test
48
+ def setup
49
+ EV.rerun
50
+ end
51
+
52
+ def test_binread
53
+ s = IO.binread(__FILE__)
54
+ assert_kind_of(String, s)
55
+ assert(!s.empty?)
56
+ assert_equal(IO.orig_binread(__FILE__), s)
57
+
58
+ s = IO.binread(__FILE__, 100)
59
+ assert_equal(100, s.bytesize)
60
+ assert_equal(IO.orig_binread(__FILE__, 100), s)
61
+
62
+ s = IO.binread(__FILE__, 100, 2)
63
+ assert_equal(100, s.bytesize)
64
+ assert_equal('frozen', s[0..5])
65
+ end
66
+
67
+ BIN_DATA = "\x00\x01\x02\x03"
68
+
69
+ def test_binwrite
70
+ fn = '/tmp/test_binwrite'
71
+ FileUtils.rm(fn) rescue nil
72
+
73
+ len = IO.binwrite(fn, BIN_DATA)
74
+ assert_equal(4, len)
75
+ s = IO.binread(fn)
76
+ assert_equal(BIN_DATA, s)
77
+ end
78
+
79
+ def test_foreach
80
+ lines = []
81
+ IO.foreach(__FILE__) { |l| lines << l }
82
+ assert_equal("# frozen_string_literal: true\n", lines[0])
83
+ assert_equal("end", lines[-1])
84
+ end
85
+
86
+ def test_read
87
+ s = IO.read(__FILE__)
88
+ assert_kind_of(String, s)
89
+ assert(!s.empty?)
90
+ assert_equal(IO.orig_read(__FILE__), s)
91
+
92
+ s = IO.read(__FILE__, 100)
93
+ assert_equal(100, s.bytesize)
94
+ assert_equal(IO.orig_read(__FILE__, 100), s)
95
+
96
+ s = IO.read(__FILE__, 100, 2)
97
+ assert_equal(100, s.bytesize)
98
+ assert_equal('frozen', s[0..5])
99
+ end
100
+
101
+ def test_readlines
102
+ lines = IO.readlines(__FILE__)
103
+ assert_equal("# frozen_string_literal: true\n", lines[0])
104
+ assert_equal("end", lines[-1])
105
+ end
106
+
107
+ WRITE_DATA = "foo\nbar קוקו"
108
+
109
+ def test_write
110
+ fn = '/tmp/test_write'
111
+ FileUtils.rm(fn) rescue nil
112
+
113
+ len = IO.write(fn, WRITE_DATA)
114
+ assert_equal(WRITE_DATA.bytesize, len)
115
+ s = IO.read(fn)
116
+ assert_equal(WRITE_DATA, s)
117
+ end
118
+
119
+ def test_popen
120
+ counter = 0
121
+ timer = coproc {
122
+ throttled_loop(200) { counter += 1 }
123
+ }
124
+
125
+ IO.popen('sleep 0.01') { |io| io.read }
126
+ assert(counter >= 2)
127
+
128
+ result = nil
129
+ IO.popen('echo "foo"') { |io| result = io.read }
130
+ assert_equal("foo\n", result)
131
+ ensure
132
+ timer&.stop
133
+ end
42
134
  end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'minitest/autorun'
4
+ require 'bundler/setup'
5
+ require 'polyphony'
6
+
7
+ class KernelTest < MiniTest::Test
8
+ def setup
9
+ EV.rerun
10
+ end
11
+
12
+ def test_system_method
13
+ counter = 0
14
+ timer = coproc {
15
+ throttled_loop(200) { counter += 1 }
16
+ }
17
+
18
+ system('sleep 0.01')
19
+ assert(counter >= 2)
20
+
21
+ result = system('echo "hello"')
22
+ assert_equal("hello\n", result)
23
+ ensure
24
+ timer&.stop
25
+ end
26
+ 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.16'
4
+ version: '0.17'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-22 00:00:00.000000000 Z
11
+ date: 2019-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: modulation
@@ -229,10 +229,13 @@ files:
229
229
  - examples/interfaces/redis_client.rb
230
230
  - examples/interfaces/redis_pubsub.rb
231
231
  - examples/interfaces/redis_pubsub_perf.rb
232
+ - examples/io/cat.rb
232
233
  - examples/io/echo_client.rb
233
234
  - examples/io/echo_server.rb
234
235
  - examples/io/echo_server_with_timeout.rb
235
236
  - examples/io/echo_stdin.rb
237
+ - examples/io/io_read.rb
238
+ - examples/io/system.rb
236
239
  - examples/performance/perf_multi_snooze.rb
237
240
  - examples/performance/perf_snooze.rb
238
241
  - examples/performance/thread-vs-fiber/polyphony_server.rb
@@ -298,6 +301,7 @@ files:
298
301
  - test/test_core.rb
299
302
  - test/test_ev.rb
300
303
  - test/test_io.rb
304
+ - test/test_kernel.rb
301
305
  homepage: http://github.com/digital-fabric/polyphony
302
306
  licenses:
303
307
  - MIT