ruby--ruby/yarvtest/test_opts.rb

119 lines
2.1 KiB
Ruby

require 'yarvtest/yarvtest'
class TestOpt < YarvTestBase
def test_plus
ae %q{
a, b = 1, 2
a+b
}
ae %q{
class Fixnum
def +(*o)
o
end
def -(*o)
o
end
end
[10+11, 100-101]
}
ae %q{
class Float
def +(o)
self * o
end
end
a, b = 1, 2
a+b
}
end
def test_opt_methdos
klasses = [[Fixnum, 2, 3], [Float, 1.1, 2.2],
[String, "abc", "def"], [Array, [1,2,3], [4, 5]],
[Hash, {:a=>1, :b=>2}, {:x=>"foo", :y=>"bar"}]]
bin_methods = [:+, :-, :*, :/, :%, ]
one_methods = [:length, :succ, ]
ary = []
bin_methods.each{|m|
klasses.each{|klass, obj, arg|
str = %{
ary = []
if (#{obj.inspect}).respond_to? #{m.inspect}
begin
ary << (#{obj.inspect}).#{m.to_s}(#{arg.inspect})
rescue Exception => e
ary << :error
end
end
class #{klass}
def #{m}(o)
[#{m.inspect}, :bin, #{klass}].inspect
end
end
ary << (#{obj.inspect}).#{m.to_s}(#{arg.inspect})
ary
}
ae str
}
}
one_methods.each{|m|
klasses.each{|klass, obj|
str = %{
ary = []
if (#{obj.inspect}).respond_to? #{m.inspect}
ary << (#{obj.inspect}).#{m.to_s}()
end
class #{klass}
def #{m}()
[#{m.inspect}, self, #{klass}].inspect
end
end
ary << (#{obj.inspect}).#{m.to_s}()
ary
}
ae str
}
}
end
def test_opt_plus
ae %q{
temp = 2**30 - 5
(1..5).map do
temp += 1
[temp, temp.class]
end
}
ae %q{
temp = -(2**30 - 5)
(1..10).map do
temp += 1
[temp, temp.class]
end
}
end
def test_eq
ae %q{
class Foo
def ==(other)
true
end
end
foo = Foo.new
[1.0 == foo,
1 == foo,
"abc" == foo,
]
}
end
end