forkandreturn 0.2.2 → 0.2.3
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.
- data/CHANGELOG +4 -0
- data/VERSION +1 -1
- data/lib/forkandreturn/forkandreturn.rb +3 -1
- data/lib/forkandreturn/version.rb +1 -1
- data/test/test.rb +52 -65
- metadata +38 -53
data/CHANGELOG
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.3
|
@@ -131,7 +131,9 @@ module ForkAndReturn
|
|
131
131
|
# This runs each "object*2" statement in a seperate process, concurrently.
|
132
132
|
|
133
133
|
def self.fork_and_return_core(*args, &block)
|
134
|
-
tempfile = Tempfile.new("fork_and_return")
|
134
|
+
tempfile = Tempfile.new("fork_and_return")
|
135
|
+
|
136
|
+
tempfile.unlink
|
135
137
|
|
136
138
|
#begin
|
137
139
|
pid =
|
data/test/test.rb
CHANGED
@@ -105,103 +105,94 @@ class ForkAndReturnEnumerableTest < Test::Unit::TestCase
|
|
105
105
|
|
106
106
|
def test_array
|
107
107
|
data = (1..10).to_a
|
108
|
-
|
109
|
-
result = data.collect(&block)
|
108
|
+
result = data.collect{|n| n**n}
|
110
109
|
|
111
|
-
assert_equal(result, data.concurrent_collect(0
|
112
|
-
assert_equal(result, data.concurrent_collect(3
|
113
|
-
assert_equal(result, data.concurrent_collect(-1
|
110
|
+
assert_equal(result, data.concurrent_collect(0){|n| n**n})
|
111
|
+
assert_equal(result, data.concurrent_collect(3){|n| n**n})
|
112
|
+
assert_equal(result, data.concurrent_collect(-1){|n| n**n})
|
114
113
|
end
|
115
114
|
|
116
115
|
def test_array_of_array
|
117
116
|
data = (1..10).zip(51..60)
|
118
|
-
|
119
|
-
result = data.collect(&block)
|
117
|
+
result = data.collect{|x, y| [x, y, x**y]}
|
120
118
|
|
121
|
-
assert_equal(result, data.concurrent_collect(0,
|
122
|
-
assert_equal(result, data.concurrent_collect(3,
|
123
|
-
assert_equal(result, data.concurrent_collect(-1,
|
119
|
+
assert_equal(result, data.concurrent_collect(0){|x, y| [x, y, x**y]})
|
120
|
+
assert_equal(result, data.concurrent_collect(3){|x, y| [x, y, x**y]})
|
121
|
+
assert_equal(result, data.concurrent_collect(-1){|x, y| [x, y, x**y]})
|
124
122
|
end
|
125
123
|
|
126
124
|
def test_hash
|
127
125
|
data = Hash[*(1..10).zip(51..60).flatten]
|
128
|
-
|
129
|
-
result = data.collect(&block)
|
126
|
+
result = data.collect{|x, y| [x, y, x**y]}
|
130
127
|
|
131
|
-
assert_equal(result, data.concurrent_collect(0,
|
132
|
-
assert_equal(result, data.concurrent_collect(3,
|
133
|
-
assert_equal(result, data.concurrent_collect(-1,
|
128
|
+
assert_equal(result, data.concurrent_collect(0){|x, y| [x, y, x**y]})
|
129
|
+
assert_equal(result, data.concurrent_collect(3){|x, y| [x, y, x**y]})
|
130
|
+
assert_equal(result, data.concurrent_collect(-1){|x, y| [x, y, x**y]})
|
134
131
|
end
|
135
132
|
|
136
133
|
def test_range
|
137
134
|
data = 1..10
|
138
|
-
|
139
|
-
result = data.collect(&block)
|
135
|
+
result = data.collect{|n| n**n}
|
140
136
|
|
141
|
-
assert_equal(result, data.concurrent_collect(0
|
142
|
-
assert_equal(result, data.concurrent_collect(3
|
143
|
-
assert_equal(result, data.concurrent_collect(-1
|
137
|
+
assert_equal(result, data.concurrent_collect(0){|n| n**n})
|
138
|
+
assert_equal(result, data.concurrent_collect(3){|n| n**n})
|
139
|
+
assert_equal(result, data.concurrent_collect(-1){|n| n**n})
|
144
140
|
end
|
145
141
|
|
146
142
|
def test_select
|
147
143
|
data = (1..10).zip(51..60)
|
148
|
-
|
149
|
-
result = data.select(&block)
|
144
|
+
result = data.select{|x, y| y%x==0}
|
150
145
|
|
151
|
-
assert_equal(result, data.concurrent_select(0,
|
152
|
-
assert_equal(result, data.concurrent_select(3,
|
153
|
-
assert_equal(result, data.concurrent_select(-1,
|
146
|
+
assert_equal(result, data.concurrent_select(0){|x, y| y%x==0})
|
147
|
+
assert_equal(result, data.concurrent_select(3){|x, y| y%x==0})
|
148
|
+
assert_equal(result, data.concurrent_select(-1){|x, y| y%x==0})
|
154
149
|
end
|
155
150
|
|
156
151
|
def test_reject
|
157
152
|
data = (1..10).zip(51..60)
|
158
|
-
|
159
|
-
result = data.reject(&block)
|
153
|
+
result = data.reject{|x, y| y%x==0}
|
160
154
|
|
161
|
-
assert_equal(result, data.concurrent_reject(0,
|
162
|
-
assert_equal(result, data.concurrent_reject(3,
|
163
|
-
assert_equal(result, data.concurrent_reject(-1,
|
155
|
+
assert_equal(result, data.concurrent_reject(0){|x, y| y%x==0})
|
156
|
+
assert_equal(result, data.concurrent_reject(3){|x, y| y%x==0})
|
157
|
+
assert_equal(result, data.concurrent_reject(-1){|x, y| y%x==0})
|
164
158
|
end
|
165
159
|
|
166
160
|
def test_each_as_well_as_scope
|
167
161
|
data = (1..10).zip(51..60)
|
168
162
|
count = nil
|
169
|
-
block = lambda{|x, y| count += x + y}
|
170
163
|
|
171
164
|
count = 0
|
172
|
-
result1 = data.each
|
165
|
+
result1 = data.each{|x, y| count += x + y}
|
173
166
|
result2 = count
|
174
167
|
|
175
168
|
count = 0
|
176
|
-
assert_equal(result1, data.concurrent_each(0,
|
169
|
+
assert_equal(result1, data.concurrent_each(0){|x, y| count += x + y})
|
177
170
|
assert_equal(result2, count)
|
178
171
|
|
179
172
|
count = 0
|
180
|
-
assert_equal(result1, data.concurrent_each(3,
|
173
|
+
assert_equal(result1, data.concurrent_each(3){|x, y| count += x + y})
|
181
174
|
assert_equal(0, count) # count isn't shared among processes!
|
182
175
|
|
183
176
|
count = 0
|
184
|
-
assert_equal(result1, data.concurrent_each(-1,
|
177
|
+
assert_equal(result1, data.concurrent_each(-1){|x, y| count += x + y})
|
185
178
|
assert_equal(0, count) # count isn't shared among processes!
|
186
179
|
end
|
187
180
|
|
188
181
|
def test_pids
|
189
182
|
data = 1..10
|
190
|
-
|
191
|
-
result = data.collect(&block)
|
183
|
+
result = data.collect{$$}
|
192
184
|
|
193
|
-
assert_equal(result, data.concurrent_collect(0
|
194
|
-
assert_not_equal(result, data.concurrent_collect(3
|
195
|
-
assert_not_equal(result, data.concurrent_collect(-1
|
185
|
+
assert_equal(result, data.concurrent_collect(0){$$})
|
186
|
+
assert_not_equal(result, data.concurrent_collect(3){$$})
|
187
|
+
assert_not_equal(result, data.concurrent_collect(-1){$$})
|
196
188
|
end
|
197
189
|
|
198
190
|
def test_exceptions
|
199
191
|
data = 1..10
|
200
|
-
block = lambda{|n| raise ForkAndReturnEnumerableTestException if n == 2}
|
201
192
|
|
202
|
-
assert_raise(ForkAndReturnEnumerableTestException){data.concurrent_collect(0
|
203
|
-
assert_raise(ForkAndReturnEnumerableTestException){data.concurrent_collect(3
|
204
|
-
assert_raise(ForkAndReturnEnumerableTestException){data.concurrent_collect(-1
|
193
|
+
assert_raise(ForkAndReturnEnumerableTestException){data.concurrent_collect(0){|n| raise ForkAndReturnEnumerableTestException if n == 2}}
|
194
|
+
assert_raise(ForkAndReturnEnumerableTestException){data.concurrent_collect(3){|n| raise ForkAndReturnEnumerableTestException if n == 2}}
|
195
|
+
assert_raise(ForkAndReturnEnumerableTestException){data.concurrent_collect(-1){|n| raise ForkAndReturnEnumerableTestException if n == 2}}
|
205
196
|
end
|
206
197
|
|
207
198
|
def test_at_exit_handler
|
@@ -229,43 +220,39 @@ class ForkAndReturnEnumerableTest < Test::Unit::TestCase
|
|
229
220
|
|
230
221
|
def test_clustered_concurrent_collect
|
231
222
|
data = 1..10
|
232
|
-
|
233
|
-
result = data.collect(&block)
|
223
|
+
result = data.collect{$$}
|
234
224
|
|
235
|
-
assert_equal(3, data.clustered_concurrent_collect(3
|
236
|
-
assert_equal(result, data.clustered_concurrent_collect(0
|
237
|
-
assert_not_equal(result, data.clustered_concurrent_collect(3
|
238
|
-
assert_not_equal(result, data.clustered_concurrent_collect(-1
|
225
|
+
assert_equal(3, data.clustered_concurrent_collect(3){$$}.sort.uniq.length)
|
226
|
+
assert_equal(result, data.clustered_concurrent_collect(0){$$})
|
227
|
+
assert_not_equal(result, data.clustered_concurrent_collect(3){$$})
|
228
|
+
assert_not_equal(result, data.clustered_concurrent_collect(-1){$$})
|
239
229
|
end
|
240
230
|
|
241
231
|
def test_clustered_select
|
242
232
|
data = (1..10).zip(51..60)
|
243
|
-
|
244
|
-
result = data.select(&block)
|
233
|
+
result = data.select{|x, y| y%x==0}
|
245
234
|
|
246
|
-
assert_equal(result, data.clustered_concurrent_select(0,
|
247
|
-
assert_equal(result, data.clustered_concurrent_select(3,
|
248
|
-
assert_equal(result, data.clustered_concurrent_select(-1,
|
235
|
+
assert_equal(result, data.clustered_concurrent_select(0){|x, y| y%x==0})
|
236
|
+
assert_equal(result, data.clustered_concurrent_select(3){|x, y| y%x==0})
|
237
|
+
assert_equal(result, data.clustered_concurrent_select(-1){|x, y| y%x==0})
|
249
238
|
end
|
250
239
|
|
251
240
|
def test_clustered_reject
|
252
241
|
data = (1..10).zip(51..60)
|
253
|
-
|
254
|
-
result = data.reject(&block)
|
242
|
+
result = data.reject{|x, y| y%x==0}
|
255
243
|
|
256
|
-
assert_equal(result, data.clustered_concurrent_reject(0,
|
257
|
-
assert_equal(result, data.clustered_concurrent_reject(3,
|
258
|
-
assert_equal(result, data.clustered_concurrent_reject(-1,
|
244
|
+
assert_equal(result, data.clustered_concurrent_reject(0){|x, y| y%x==0})
|
245
|
+
assert_equal(result, data.clustered_concurrent_reject(3){|x, y| y%x==0})
|
246
|
+
assert_equal(result, data.clustered_concurrent_reject(-1){|x, y| y%x==0})
|
259
247
|
end
|
260
248
|
|
261
249
|
def test_clustered_each
|
262
250
|
data = (1..10).zip(51..60)
|
263
|
-
|
264
|
-
result = data.each(&block)
|
251
|
+
result = data.each{|x, y| y%x==0}
|
265
252
|
|
266
|
-
assert_equal(result, data.clustered_concurrent_each(0,
|
267
|
-
assert_equal(result, data.clustered_concurrent_each(3,
|
268
|
-
assert_equal(result, data.clustered_concurrent_each(-1,
|
253
|
+
assert_equal(result, data.clustered_concurrent_each(0){|x, y| y%x==0})
|
254
|
+
assert_equal(result, data.clustered_concurrent_each(3){|x, y| y%x==0})
|
255
|
+
assert_equal(result, data.clustered_concurrent_each(-1){|x, y| y%x==0})
|
269
256
|
end
|
270
257
|
|
271
258
|
def test_multi_core
|
metadata
CHANGED
@@ -1,47 +1,39 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: forkandreturn
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.3
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 2
|
10
|
-
version: 0.2.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Erik Veenstra
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-03-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: threadlimiter
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
hash: 31
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
- 1
|
32
|
-
- 2
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
33
21
|
version: 0.1.2
|
34
22
|
type: :runtime
|
35
|
-
|
36
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.1.2
|
30
|
+
description: Runs a block of code in a seperate process and collects the result later.
|
31
|
+
Includes a lot of convenient methods on Enumerable.
|
37
32
|
email: forkandreturn@erikveen.dds.nl
|
38
33
|
executables: []
|
39
|
-
|
40
34
|
extensions: []
|
41
|
-
|
42
35
|
extra_rdoc_files: []
|
43
|
-
|
44
|
-
files:
|
36
|
+
files:
|
45
37
|
- lib/forkandreturn/forkandreturn.rb
|
46
38
|
- lib/forkandreturn/util.rb
|
47
39
|
- lib/forkandreturn/enumerable.rb
|
@@ -56,44 +48,37 @@ files:
|
|
56
48
|
- test/test.rb
|
57
49
|
homepage: http://www.erikveen.dds.nl/forkandreturn/index.html
|
58
50
|
licenses: []
|
59
|
-
|
60
51
|
post_install_message:
|
61
|
-
rdoc_options:
|
52
|
+
rdoc_options:
|
62
53
|
- README
|
63
54
|
- LICENSE
|
64
55
|
- VERSION
|
65
56
|
- CHANGELOG
|
66
57
|
- example.txt
|
67
58
|
- --title
|
68
|
-
- forkandreturn (0.2.
|
59
|
+
- forkandreturn (0.2.3)
|
69
60
|
- --main
|
70
61
|
- README
|
71
|
-
require_paths:
|
62
|
+
require_paths:
|
72
63
|
- lib
|
73
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
65
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
|
79
|
-
|
80
|
-
- 0
|
81
|
-
version: "0"
|
82
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
71
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
|
88
|
-
segments:
|
89
|
-
- 0
|
90
|
-
version: "0"
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
91
76
|
requirements: []
|
92
|
-
|
93
77
|
rubyforge_project: forkandreturn
|
94
|
-
rubygems_version: 1.8.
|
78
|
+
rubygems_version: 1.8.18
|
95
79
|
signing_key:
|
96
80
|
specification_version: 3
|
97
|
-
summary: Runs a block of code in a seperate process and collects the result later.
|
98
|
-
|
81
|
+
summary: Runs a block of code in a seperate process and collects the result later.
|
82
|
+
Includes a lot of convenient methods on Enumerable.
|
83
|
+
test_files:
|
99
84
|
- test/test.rb
|