diff options
| author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-16 01:10:44 +0000 |
|---|---|---|
| committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-10-16 01:10:44 +0000 |
| commit | ac0b7f38fe41d9e90faa8651dcee32d2c9fe1690 (patch) | |
| tree | f36d997a553c3e73724057eaef4b3af23e045783 /test/ruby/test_queue.rb | |
| parent | d2c1ab806d521cb024089f5558dc82e134db68aa (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.rb | 38 |
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 |
