diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-02-15 21:31:16 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2012-02-15 21:31:16 +0000 |
commit | a4debd6ae274ffe9bf1c4f75f6d7fa4281eafba5 (patch) | |
tree | 3747bf26e961bb3d62a2637f56fec5cb88cf89b9 /test | |
parent | 4dc3d30ab560dcc906e5db63ef99f8787165ea14 (diff) |
merge revision(s) 34626,34627:
* ext/fiddle/closure.c (callback): same as r34506.
* ext/fiddle/closure.c (callback): deal with unsinged integers.
[ruby-core:42458][Bug #5991][Bug #6022]
* ext/fiddle/conversions.c (value_to_generic, generic_to_value):
ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'test')
-rw-r--r-- | test/fiddle/test_closure.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/test/fiddle/test_closure.rb b/test/fiddle/test_closure.rb index 5878e72a70..381b3f96c1 100644 --- a/test/fiddle/test_closure.rb +++ b/test/fiddle/test_closure.rb @@ -55,5 +55,30 @@ module Fiddle n = 10000 assert_equal(n, n.times {ObjectSpace.memsize_of(Closure.allocate)}, bug) end + + %w[INT SHORT CHAR LONG LONG_LONG].each do |name| + type = DL.const_get("TYPE_#{name}") rescue next + size = DL.const_get("SIZEOF_#{name}") + [[type, size-1, name], [-type, size, "unsigned_"+name]].each do |t, s, n| + define_method("test_conversion_#{n.downcase}") do + arg = nil + + clos = Class.new(Closure) do + define_method(:call) {|x| arg = x} + end.new(t, [t]) + + v = ~(~0 << (8*s)) + + arg = nil + assert_equal(v, clos.call(v)) + assert_equal(arg, v, n) + + arg = nil + func = Function.new(clos, [t], t) + assert_equal(v, func.call(v)) + assert_equal(arg, v, n) + end + end + end end end if defined?(Fiddle) |