1
0
Fork 0
mirror of https://github.com/puma/puma.git synced 2022-11-09 13:48:40 -05:00
puma--puma/projects/fastthread/test/test_mutex.rb
mental a114bc38d1 Always require 'thread' in tests
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@511 19e92222-5c0b-0410-8929-a290d50e31e9
2007-01-26 01:06:49 +00:00

74 lines
1.9 KiB
Ruby

require 'test/unit'
require 'thread'
if RUBY_PLATFORM != "java"
$:.unshift File.expand_path( File.join( File.dirname( __FILE__ ), "../ext/fastthread" ) )
require 'fastthread'
end
class TestMutex < Test::Unit::TestCase
def self.mutex_test( name, &body )
define_method( "test_#{ name }" ) do
body.call( self, Mutex.new, "" )
end
# at one time we also tested Mutex_m here, but it's no longer
# part of fastthread
end
mutex_test( :locked_p ) do |test, m, prefix|
test.instance_eval do
assert_equal false, m.send( "#{ prefix }locked?" )
m.send "#{ prefix }lock"
assert_equal true, m.send( "#{ prefix }locked?" )
m.send "#{ prefix }unlock"
assert_equal false, m.send( "#{ prefix }locked?" )
end
end
mutex_test( :synchronize ) do |test, m, prefix|
test.instance_eval do
assert !m.send( "#{ prefix }locked?" )
m.send "#{ prefix }synchronize" do
assert m.send( "#{ prefix }locked?" )
end
assert !m.send( "#{ prefix }locked?" )
end
end
mutex_test( :synchronize_exception ) do |test, m, prefix|
test.instance_eval do
assert !m.send( "#{ prefix }locked?" )
assert_raise ArgumentError do
m.send "#{ prefix }synchronize" do
assert m.send( "#{ prefix }locked?" )
raise ArgumentError
end
end
assert !m.send( "#{ prefix }locked?" )
end
end
mutex_test( :mutual_exclusion ) do |test, m, prefix|
test.instance_eval do
s = ""
("a".."c").map do |c|
Thread.new do
Thread.pass
5.times do
m.send "#{ prefix }synchronize" do
s << c
Thread.pass
s << c
end
end
end
end.each do |thread|
thread.join
end
assert_equal 30, s.length
assert s.match( /^(aa|bb|cc)+$/ )
end
end
end