forkandreturn 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|