summaryrefslogtreecommitdiff
path: root/test/ruby/test_queue.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-16 01:10:44 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-10-16 01:10:44 +0000
commitac0b7f38fe41d9e90faa8651dcee32d2c9fe1690 (patch)
treef36d997a553c3e73724057eaef4b3af23e045783 /test/ruby/test_queue.rb
parentd2c1ab806d521cb024089f5558dc82e134db68aa (diff)
* test/ruby/test_{queue,thread}.rb: backported from trunk.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@25361 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test/ruby/test_queue.rb')
-rw-r--r--test/ruby/test_queue.rb38
1 files changed, 38 insertions, 0 deletions
diff --git a/test/ruby/test_queue.rb b/test/ruby/test_queue.rb
new file mode 100644
index 0000000000..16e7548d1a
--- /dev/null
+++ b/test/ruby/test_queue.rb
@@ -0,0 +1,38 @@
+require 'test/unit'
+require 'thread'
+
+class TestQueue < Test::Unit::TestCase
+ def test_queue
+ grind(5, 10_000, 15, Queue)
+ end
+
+ def test_sized_queue
+ grind(5, 10_000, 15, SizedQueue, 10_000)
+ end
+
+ def grind(num_threads, num_objects, num_iterations, klass, *args)
+ from_workers = klass.new(*args)
+ to_workers = klass.new(*args)
+
+ workers = (1..num_threads).map {
+ Thread.new {
+ while object = to_workers.pop
+ from_workers.push object
+ end
+ }
+ }
+
+ Thread.new {
+ num_iterations.times {
+ num_objects.times { to_workers.push 99 }
+ num_objects.times { from_workers.pop }
+ }
+ }.join
+
+ num_threads.times { to_workers.push nil }
+ workers.each { |t| t.join }
+
+ assert 0, from_workers.size
+ assert 0, to_workers.size
+ end
+end