Sha256: 8442efc62a00622af6e8b8f47ad239741852ab0f995d2fd87f3af78094edb16b
Contents?: true
Size: 1.87 KB
Versions: 3
Compression:
Stored size: 1.87 KB
Contents
require 'test/unit' if RUBY_PLATFORM == "java" require 'thread' else $:.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
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
fastthread-0.6.2 | test/test_mutex.rb |
fastthread-0.6.1 | test/test_mutex.rb |
fastthread-0.6 | test/test_mutex.rb |