def test_threaded_refs
    threads = []
    inc = Proc.new {|v| v + 1 }

    4.times do |i|
      threads << Thread.new do
        Ref.dosync do
          @ref.alter(inc)
        end
      end
    end

    threads.each { |t| t.join }
    assert_equal 5, @ref.deref
  end
# Produces
# test_threaded_refs(TestRef):
# NativeException: clojure.lang.LockingTransaction$RetryEx: null
#     clojure/lang/LockingTransaction.java:105:in `<init>'
#     clojure/lang/LockingTransaction.java:226:in `runInTransaction'
#     /home/phil/src/clojure-gem/lib/clojure/ref.rb:15:in `alter'
#     ./test/test_ref.rb:45:in `test_threaded_refs'
#     /home/phil/src/clojure-gem/lib/clojure/ref.rb:31:in `call'
#     /home/phil/src/clojure-gem/lib/clojure/ref.rb:31:in `dosync'
#     ./test/test_ref.rb:44:in `test_threaded_refs'
#     ./test/test_ref.rb:43:in `initialize'
#     ./test/test_ref.rb:43:in `new'
#     ./test/test_ref.rb:43:in `test_threaded_refs'
#     ./test/test_ref.rb:42:in `times'
#     ./test/test_ref.rb:42:in `test_threaded_refs'

Generated by Phil Hagelberg using scpaste at Sun Nov 22 11:30:27 2009. PST. (raw)