зеркало из https://github.com/github/ruby.git
test_weakmap.rb: add
* test/ruby/test_weakmap.rb: test for ObjectSpace::WeakMap. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44092 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
28fd53d2de
Коммит
b73a306441
|
@ -0,0 +1,96 @@
|
|||
require 'test/unit'
|
||||
require_relative 'envutil'
|
||||
|
||||
class TestWeakMap < Test::Unit::TestCase
|
||||
def setup
|
||||
@wm = ObjectSpace::WeakMap.new
|
||||
end
|
||||
|
||||
def test_map
|
||||
x = Object.new
|
||||
k = "foo"
|
||||
@wm[k] = x
|
||||
assert_same(x, @wm[k])
|
||||
assert_not_same(x, @wm["FOO".downcase])
|
||||
end
|
||||
|
||||
def test_include?
|
||||
m = __callee__[/test_(.*)/, 1]
|
||||
x = Object.new
|
||||
k = "foo"
|
||||
@wm[k] = x
|
||||
assert_send([@wm, m, k])
|
||||
assert_not_send([@wm, m, "FOO".downcase])
|
||||
x = nil
|
||||
GC.start
|
||||
assert_not_send([@wm, m, k])
|
||||
end
|
||||
alias test_member? test_include?
|
||||
alias test_key? test_include?
|
||||
|
||||
def test_each
|
||||
m = __callee__[/test_(.*)/, 1]
|
||||
x1 = Object.new
|
||||
k1 = "foo"
|
||||
@wm[k1] = x1
|
||||
x2 = Object.new
|
||||
k2 = "bar"
|
||||
@wm[k2] = x2
|
||||
n = 0
|
||||
@wm.__send__(m) do |k, v|
|
||||
assert_match(/\A(?:foo|bar)\z/, k)
|
||||
case k
|
||||
when /foo/
|
||||
assert_same(k1, k)
|
||||
assert_same(x1, v)
|
||||
when /bar/
|
||||
assert_same(k2, k)
|
||||
assert_same(x2, v)
|
||||
end
|
||||
n += 1
|
||||
end
|
||||
assert_equal(2, n)
|
||||
end
|
||||
|
||||
def test_each_key
|
||||
x1 = Object.new
|
||||
k1 = "foo"
|
||||
@wm[k1] = x1
|
||||
x2 = Object.new
|
||||
k2 = "bar"
|
||||
@wm[k2] = x2
|
||||
n = 0
|
||||
@wm.each_key do |k|
|
||||
assert_match(/\A(?:foo|bar)\z/, k)
|
||||
case k
|
||||
when /foo/
|
||||
assert_same(k1, k)
|
||||
when /bar/
|
||||
assert_same(k2, k)
|
||||
end
|
||||
n += 1
|
||||
end
|
||||
assert_equal(2, n)
|
||||
end
|
||||
|
||||
def test_each_value
|
||||
x1 = "foo"
|
||||
k1 = Object.new
|
||||
@wm[k1] = x1
|
||||
x2 = "bar"
|
||||
k2 = Object.new
|
||||
@wm[k2] = x2
|
||||
n = 0
|
||||
@wm.each_value do |v|
|
||||
assert_match(/\A(?:foo|bar)\z/, v)
|
||||
case v
|
||||
when /foo/
|
||||
assert_same(x1, v)
|
||||
when /bar/
|
||||
assert_same(x2, v)
|
||||
end
|
||||
n += 1
|
||||
end
|
||||
assert_equal(2, n)
|
||||
end
|
||||
end
|
Загрузка…
Ссылка в новой задаче