[Archipelago-submits] [82] trunk/archipelago: fixed more tests for Current::ThreadedCollection and cleaned it up a lot
nobody at rubyforge.org
nobody at rubyforge.org
Wed Nov 29 00:37:04 EST 2006
Revision: 82
Author: zond
Date: 2006-11-29 00:37:03 -0500 (Wed, 29 Nov 2006)
Log Message:
-----------
fixed more tests for Current::ThreadedCollection and cleaned it up a lot
Modified Paths:
--------------
trunk/archipelago/lib/archipelago/current.rb
trunk/archipelago/tests/current_test.rb
Modified: trunk/archipelago/lib/archipelago/current.rb
===================================================================
--- trunk/archipelago/lib/archipelago/current.rb 2006-11-29 03:05:49 UTC (rev 81)
+++ trunk/archipelago/lib/archipelago/current.rb 2006-11-29 05:37:03 UTC (rev 82)
@@ -52,11 +52,7 @@
self.each do |args|
threads << Thread.new do
- if callable
- callable.call(*args)
- else
- yield(args)
- end
+ call_helper(callable, args, &block)
end
end
@@ -74,12 +70,9 @@
result = []
result.extend(Synchronized)
self.t_each do |args|
+ new_value = call_helper(callable, args, &block)
result.synchronize do
- if callable
- result << callable.call(*args)
- else
- result << yield(args)
- end
+ result << new_value
end
end
return result
@@ -94,11 +87,7 @@
result = []
result.extend(Synchronized)
self.t_each do |args|
- if callable
- matches = callable.call(*args)
- else
- matches = yield(args)
- end
+ matches = call_helper(callable, args, &block)
result.synchronize do
result << args
end if matches
@@ -115,11 +104,7 @@
result = []
result.extend(Synchronized)
self.t_each do |args|
- if callable
- matches = callable.call(*args)
- else
- matches = yield(args)
- end
+ matches = call_helper(callable, args, &block)
result.synchronize do
result << args
end unless matches
@@ -127,6 +112,20 @@
return result
end
+ private
+
+ def call_helper(o = nil, args = nil, &block)
+ if o
+ if Array === args
+ return o.call(*args)
+ else
+ return o.call(args)
+ end
+ else
+ return yield(args)
+ end
+ end
+
end
Modified: trunk/archipelago/tests/current_test.rb
===================================================================
--- trunk/archipelago/tests/current_test.rb 2006-11-29 03:05:49 UTC (rev 81)
+++ trunk/archipelago/tests/current_test.rb 2006-11-29 05:37:03 UTC (rev 82)
@@ -1,6 +1,22 @@
require File.join(File.dirname(__FILE__), 'test_helper')
+class HashCollector
+ attr_accessor :epa
+ def call(k,v)
+ @epa ||= {}
+ @epa[k] = v
+ end
+end
+
+class ArrayCollector
+ attr_accessor :epa
+ def call(e)
+ @epa ||= []
+ @epa << e
+ end
+end
+
class CurrentTest < Test::Unit::TestCase
def test_synchronized
@@ -24,6 +40,24 @@
end
end
+ def test_lock_on
+ t = true
+
+ a = "hej"
+ a.extend(Archipelago::Current::Synchronized)
+ a.lock_on("epa")
+ Thread.new do
+ a.lock_on("epa")
+ t = false
+ end
+ Thread.pass
+ assert(t)
+ a.unlock_on("epa")
+ assert_within(0.5) do
+ !t
+ end
+ end
+
def test_threaded_collection
a = Array(10)
a.extend(Archipelago::Current::ThreadedCollection)
@@ -51,6 +85,16 @@
b = {}
a.t_each do |k,v| b[k] = v end
assert_equal(b,a)
+
+ c = HashCollector.new
+ a.t_each(c)
+ assert_equal(a, c.epa)
+
+ a = [1,2,3,4,5,6,7]
+ a.extend(Archipelago::Current::ThreadedCollection)
+ c = ArrayCollector.new
+ a.t_each(c)
+ assert_equal(a.sort, c.epa.sort)
end
end
More information about the Archipelago-submits
mailing list