Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.9 KiB
64 lines
1.9 KiB
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::Internal::OBJECT_CACHE |
|
if Google::Protobuf::Internal::SIZEOF_LONG >= Google::Protobuf::Internal::SIZEOF_VALUE and not defined? JRUBY_VERSION |
|
assert_instance_of Google::Protobuf::Internal::ObjectCache, Google::Protobuf::Internal::OBJECT_CACHE |
|
else |
|
assert_instance_of Google::Protobuf::Internal::LegacyObjectCache, Google::Protobuf::Internal::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::Internal::OBJECT_CACHE |
|
Google::Protobuf::Internal::ObjectCache.new |
|
end |
|
|
|
include ObjectCacheTestModule |
|
end |
|
|
|
class LegacyObjectCacheTest < Test::Unit::TestCase |
|
def create |
|
omit('OBJECT_CACHE not defined') unless defined? Google::Protobuf::Internal::OBJECT_CACHE |
|
Google::Protobuf::Internal::LegacyObjectCache.new |
|
end |
|
|
|
include ObjectCacheTestModule |
|
end
|
|
|