1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
require 'google/protobuf'
require 'test/unit'
class PlatformTest < Test::Unit::TestCase
def test_correct_implementation_for_platform
omit('OBJECT_CACHE not defined') unless defined? Google::Protobuf::OBJECT_CACHE
if Google::Protobuf::SIZEOF_LONG >= Google::Protobuf::SIZEOF_VALUE and not defined? JRUBY_VERSION
assert_instance_of Google::Protobuf::ObjectCache, Google::Protobuf::OBJECT_CACHE
else
assert_instance_of Google::Protobuf::LegacyObjectCache, Google::Protobuf::OBJECT_CACHE
end
end
end
module ObjectCacheTestModule
def test_try_add_returns_existing_value
cache = self.create
keys = %w[k1 k2]
vals = %w[v1 v2]
2.times do |i|
assert_same vals[i], cache.try_add(keys[i], vals[i])
assert_same vals[i], cache.get(keys[i])
assert_same vals[i], cache.try_add(keys[i], vals[(i+1)%2])
assert_same vals[i], cache.get(keys[i])
end
end
def test_multithreaded_access
cache = self.create
keys = %w[k0 k1 k2 k3 k4 k5 k6 k7]
threads = []
100.times do |i|
threads[i] = Thread.new {
Thread.current["result"] = cache.try_add(keys[i % keys.size], i.to_s)
}
end
results = {}
threads.each_with_index {|t, i| t.join; results[i] = t["result"] }
assert_equal 100, results.size
assert_equal 8, results.values.uniq.size
end
end
class ObjectCacheTest < Test::Unit::TestCase
def create
omit('OBJECT_CACHE not defined') unless defined? Google::Protobuf::OBJECT_CACHE
Google::Protobuf::ObjectCache.new
end
include ObjectCacheTestModule
end
class LegacyObjectCacheTest < Test::Unit::TestCase
def create
omit('OBJECT_CACHE not defined') unless defined? Google::Protobuf::OBJECT_CACHE
Google::Protobuf::LegacyObjectCache.new
end
include ObjectCacheTestModule
end
|