summaryrefslogtreecommitdiff
path: root/test/ruby/test_weakmap.rb
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-09 07:13:38 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-09 07:13:38 +0000
commitb73a30644187018b099ef148778b914a670d94f6 (patch)
tree95730504060561256c8d778dac2fb84963188e83 /test/ruby/test_weakmap.rb
parent28fd53d2de233593f77d8f19f2ec694fba84b2a2 (diff)
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
Diffstat (limited to 'test/ruby/test_weakmap.rb')
-rw-r--r--test/ruby/test_weakmap.rb96
1 files changed, 96 insertions, 0 deletions
diff --git a/test/ruby/test_weakmap.rb b/test/ruby/test_weakmap.rb
new file mode 100644
index 0000000000..383b5e1f31
--- /dev/null
+++ b/test/ruby/test_weakmap.rb
@@ -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