diff options
author | aamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-23 06:41:25 +0000 |
---|---|---|
committer | aamine <aamine@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-02-23 06:41:25 +0000 |
commit | f35a641adb2d08e264a70afad27f706d2d05972e (patch) | |
tree | 4dea1a34659b6b1dc18d2cd2aa77caa641300fcd | |
parent | 583417190488ccbb668a3c149f9dd2ee2f0b837c (diff) | |
download | ruby-f35a641adb2d08e264a70afad27f706d2d05972e.tar.gz |
* test/ruby/test_primitive.rb: new test.
* yarvtest/test_bin.rb: removed (altered by test/ruby/test_{literal,primitive}.rb).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11828 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | test/ruby/test_primitive.rb | 397 | ||||
-rw-r--r-- | yarvtest/test_bin.rb | 585 |
2 files changed, 397 insertions, 585 deletions
diff --git a/test/ruby/test_primitive.rb b/test/ruby/test_primitive.rb new file mode 100644 index 0000000000..85a8be9f94 --- /dev/null +++ b/test/ruby/test_primitive.rb @@ -0,0 +1,397 @@ +require 'test/unit' + +class TestRubyPrimitive < Test::Unit::TestCase + + def test_not + assert_equal false, !true + assert_equal true, !false + assert_equal true, !nil + assert_equal false, !(1+1) + assert_equal false, !!nil + assert_equal true, !!1 + end + + def test_lvar + a = 1 + assert_equal 1, a + b = 2 + assert_equal 1, a + a = b = 3 + assert_equal 3, a + assert_equal 3, b + a = b = c = 4 + assert_equal 4, a + assert_equal 4, b + assert_equal 4, c + end + + C = 1 + class A + Const = 1 + class B + Const = 2 + class C + Const = 3 + def const + Const + end + end + end + end + (1..2).map { + A::B::C::Const + } + + def test_constant + assert_equal 1, C + assert_equal 1, C + assert_equal 1, A::Const + assert_equal 2, A::B::Const + assert_equal 3, A::B::C::Const + assert_equal 3, A::B::C.new.const + assert_equal 1, ::TestRubyPrimitive::A::Const + A::B::C.funcall(:remove_const, :Const) + assert_equal 2, A::B::C.new.const + assert_raise(TypeError) { + C::CONST + } + end + + class A2 + class B2 + class C2 + C = 7 + end + end + end + + def test_constant_cache + i = 0 + while i < 3 + r = A2::B2::C2::C + i += 1 + end + assert_equal 7, r + end + + class A3 + class B3 + C = 99 + end + end + i = 0 + while i < 3 + r = A3::B3::C # cache + class A3::B3 + remove_const :C + end + A3::B3::C = i ** i + i += 1 + end + + def test_constant_cache2 + assert_equal 4, A3::B3::C + end + + class A4 + Const = 7 + (1..3).map { + $test_ruby_primitive_constant_cache3 = self::Const + } + end + + def test_constant_cache3 + assert_equal 7, $test_ruby_primitive_constant_cache3 + end + + class A5 + Const = 8 + (1..3).map { + $test_ruby_primitive_constant_cache4 = eval('self')::Const + } + end + + def test_constatant_cache4 + assert_equal 8, $test_ruby_primitive_constant_cache4 + end + + class A6 + Const = 0 + def self.foo + self::Const + end + end + class B6 < A6 + Const = 1 + end + class C6 < B6 + Const = 2 + end + $test_ruby_primitive_constant_cache5 = [A6.foo, B6.foo, C6.foo] + + def test_constant_cache5 + assert_equal [0, 1, 2], $test_ruby_primitive_constant_cache5 + end + + def test_gvar + $test_ruby_primitive_gvar = 7 + assert_equal 7, $test_ruby_primitive_gvar + assert_equal 7, $test_ruby_primitive_gvar + $test_ruby_primitive_gvar = 88 + assert_equal 88, $test_ruby_primitive_gvar + assert_equal 88, $test_ruby_primitive_gvar + assert_equal 7, ($test_ruby_primitive_gvar = 7) + assert_equal 7, ($test_ruby_primitive_gvar = 7) + end + + class A7 + @@c = 1 + def m + @@c += 1 + end + end + + def test_cvar_from_instance_method + assert_equal 2, A7.new.m + assert_equal 3, A7.new.m + assert_equal 4, A7.new.m + end + + class A8 + @@c = 1 + class << self + def m + @@c += 1 + end + end + end + + def test_cvar_from_singleton_method + assert_equal 2, A8.m + assert_equal 3, A8.m + assert_equal 4, A8.m + end + + class A9 + @@c = 1 + def self.m + @@c += 1 + end + end + + def test_cvar_from_singleton_method2 + assert_equal 2, A9.m + assert_equal 3, A9.m + assert_equal 4, A9.m + end + + class A10 + attr_accessor :a + end + + def test_opassign + i = 0 + i += 1 + assert_equal 1, i + + @iv = 2 + @iv += 2 + assert_equal 4, @iv + + @@cv ||= 1 + assert_equal 1, @@cv + @@cv &&= 2 + assert_equal 2, @@cv + @@cv ||= 99 + assert_equal 2, @@cv + + $gv = 3 + $gv += 4 + assert_equal 7, $gv + + obj = A10.new + obj.a = 9 + obj.a &&= 7 + assert_equal 7, obj.a + + obj.a = nil + obj.a ||= 2 + assert_equal 2, obj.a + + obj.a &&= 3 + assert_equal 3, obj.a + + a = [] + a[0] ||= 3 + assert_equal 3, a[0] + a[0] &&= 7 + assert_equal 7, a[0] + a[0] ||= 3 + assert_equal 7, a[0] + end + + def test_opassign_and_or + a = 1 + a ||= 2 + assert_equal 1, a + a = nil + a ||= 2 + assert_equal 2, a + a = 1 + a &&= 3 + assert_equal 3, a + a = nil + a &&= 4 + assert_nil a + + h = {} + h[0] ||= 1 + assert_equal 1, h[0] + h = {} + h[0] &&= 1 + assert_nil h[0] + h = {0 => 7} + h[0] ||= 1 + assert_equal 7, h[0] + h = {0 => 7} + h[0] &&= 1 + assert_equal 1, h[0] + end + + def test_backref + /a(b)(c)d/ =~ 'xyzabcdefgabcdefg' + assert_equal 'b', $1 + assert_equal 'c', $2 + assert_nil $3 + assert_instance_of MatchData, $~ + assert_equal 'abcd', $& + assert_equal 'xyz', $` + assert_equal 'efgabcdefg', $' + assert_equal 'c', $+ + + /(?!)/ =~ 'xyzabcdefgabcdefg' + assert_nil $1 + assert_nil $2 + assert_nil $3 + assert_nil $~ + assert_nil $& + assert_nil $` + assert_nil $' + assert_nil $+ + end + + def test_fact + assert_equal 306057512216440636035370461297268629388588804173576999416776741259476533176716867465515291422477573349939147888701726368864263907759003154226842927906974559841225476930271954604008012215776252176854255965356903506788725264321896264299365204576448830388909753943489625436053225980776521270822437639449120128678675368305712293681943649956460498166450227716500185176546469340112226034729724066333258583506870150169794168850353752137554910289126407157154830282284937952636580145235233156936482233436799254594095276820608062232812387383880817049600000000000000000000000000000000000000000000000000000000000000000000000000, fact(300) + end + + def fact(n) + if n > 1 + n * fact(n - 1) + else + 1 + end + end + + def test_mul + assert_equal 0, 2 * 0 + assert_equal 0, 0 * 2 + assert_equal 4, 2 * 2 + end + + class MyNum + def /(a) + a * 100 + end + end + + def test_div + assert_equal 1, 3 / 2 + assert_equal 1.5, 3.0 / 2.0 + assert_equal 300, MyNum.new / 3 + end + + class MyArr + def length + 'string' + end + end + + def test_length + assert_equal 0, [].length + assert_equal 1, [1].length + assert_equal 2, [1,2].length + assert_equal 0, {}.length + assert_equal 1, {1=>1}.length + assert_equal 2, {1=>1, 2=>2}.length + assert_equal 'string', MyArr.new.length + end + + class MyNum2 + def %(a) + a * 100 + end + end + + def test_mod + assert_equal 2, 5 % 3 + assert_equal 1.0, 3.0 % 2.0 + assert_equal 300, MyNum2.new % 3 + end + + class MyObj + def [](*args) + args + end + + def []=(*args) + args + end + end + + def test_aref + a = [0,1] + assert_equal 0, a[0] + assert_equal 1, a[1] + assert_nil a[2] + h = {0=>0, 1=>1} + obj = MyObj.new + assert_equal 0, h[0] + assert_equal 1, h[1] + assert_nil h[2] + assert_equal [0], obj[0] + assert_equal [0,1], obj[0,1] + assert_equal [0,1,2], obj[0,1,2] + end + + def test_aset + obj = MyObj.new + assert_equal 7, (obj[0] = 7) + assert_equal 7, (obj[0,1] = 7) + assert_equal 7, (obj[0,1,2] = 7) + end + + class MyObj2 + def attr=(*args) + args + end + end + + def test_attr_setter + obj = MyObj2.new + assert_equal 1, (obj.attr = 1) + end + + def test_list_expand + a = [] + assert_equal [0], [0, *a] + a = [1] + assert_equal [0,1], [0, *a] + a = [1,2] + assert_equal [0,1,2], [0, *a] + a = [1,2,3] + assert_equal [0,1,2,3], [0, *a] + #a = [1,2,3] + #assert_equal [0,1,2,3,4], [0, *a, 4] + end + +end diff --git a/yarvtest/test_bin.rb b/yarvtest/test_bin.rb deleted file mode 100644 index 5f587b5a8c..0000000000 --- a/yarvtest/test_bin.rb +++ /dev/null @@ -1,585 +0,0 @@ -require 'yarvtest/yarvtest' - -# test of basic instruction -class TestBIN < YarvTestBase - - def test_literal - ae %q(true) - ae %q(false) - ae %q(nil) - ae %q(1234) - ae %q(:sym) - ae %q(123456789012345678901234567890) - ae %q(1.234) - ae %q(0x12) - ae %q(0b0101001) - ae %q(1_2_3) # 123 - end - - def test_self - ae %q(self) - end - - def test_string - ae %q('str') - end - - def test_dstring - ae %q( - "1+1 = #{1+1}" - ) - ae %q{ - i = 10 - "#{i} ** #{i} = #{i ** i}" - } - ae %q{ - s = "str" - s.__id__ == "#{s}".__id__ - } - end - - def test_dsym - ae %q{ - :"a#{1+2}c" - } - end - - def test_xstr - ae %q(`echo hoge`) - ae %q(hoge = 'huga'; `echo #{hoge}`) - end - - def test_regexp - ae %q{ - /test/ =~ 'test' - } - ae %q{ - /test/ =~ 'tes' - } - ae %q{ - r = /test/; l = 'test' - r =~ l - } - ae %q{ - r = /testx/; l = 'test' - r =~ l - } - ae %q{ - i = 10 - /test#{i}/ =~ 'test10' - } - ae %q{ - i = 10 - /test#{i}/ =~ 'test20' - } - ae %q{ - :sym =~ /sym/ - } - ae %q{ - sym = :sym - sym =~ /sym/ - } - ae %q{ - reg = /sym/ - :sym =~ reg - } - end - - def test_array - ae %q([]) - ae %q([1,2,3]) - ae %q([1+1,2+2,3+3]) - ae %q([0][0]+=3) - ae %q([0][0]-=3) - end - - def test_array_access - ae %q(ary = [1,2,3]; ary[1]) - ae %q(ary = [1,2,3]; ary[1] = 10) - ae %q(ary = Array.new(10, 100); ary[3]) - end - - def test_hash - ae %q({}) - ae %q({1 => 2}) - ae %q({"str" => "val", "str2" => "valval"}) - ae %q({1 => 2, 1=>3}) - end - - def test_range - ae %q((1..2)) - ae %q((1...2)) - ae %q(((1+1)..(2+2))) - ae %q(((1+1)...(2+2))) - end - - def test_not - ae %q(!true) - ae %q(!nil) - ae %q(!false) - ae %q(!(1+1)) - ae %q(!!nil) - ae %q(!!1) - end - - # var - def test_local - ae %q(a = 1) - ae %q(a = 1; b = 2; a) - ae %q(a = b = 3) - ae %q(a = b = 3; a) - ae %q(a = b = c = 4) - ae %q(a = b = c = 4; c) - end - - def test_constant - ae %q(C = 1; C) - ae %q(C = 1; $a = []; 2.times{$a << ::C}; $a) - ae %q( - class A - class B - class C - Const = 1 - end - end - end - (1..2).map{ - A::B::C::Const - } - ) do - remove_const :A - end - - ae %q( - class A - class B - Const = 1 - class C - (1..2).map{ - Const - } - end - end - end - ) do - remove_const :A - end - - ae %q( - class A - Const = 1 - class B - class C - (1..2).map{ - Const - } - end - end - end - ) do - remove_const :A - end - - ae %q( - Const = 1 - class A - class B - class C - (1..2).map{ - Const - } - end - end - end - ) do - remove_const :A - remove_const :Const - end - - ae %q{ - C = 1 - begin - C::D - rescue TypeError - :ok - else - :ng - end - } - end - - def test_constant2 - ae %q{ - class A - class B - C = 10 - end - end - i = 0 - while i<3 - i+=1 - r = A::B::C - end - r - } do - remove_const :A - end - - ae %q{ - class A - class B - C = 10 - end - end - i = 0 - while i<3 - i+=1 - r = A::B::C - class A::B - remove_const :C - end - A::B::C = i**i - end - r - } do - remove_const :A - end - - ae %q{ - class C - Const = 1 - (1..3).map{ - self::Const - } - end - } - ae %q{ - class C - Const = 1 - (1..3).map{ - eval('self')::Const - } - end - } - ae %q{ - class C - Const = 0 - def self.foo() - self::Const - end - end - - class D < C - Const = 1 - end - - class E < C - Const = 2 - end - - [C.foo, D.foo, E.foo] - } - end - - def test_gvar - ae %q( - $g1 = 1 - ) - - ae %q( - $g2 = 2 - $g2 - ) - end - - def test_cvar - ae %q{ - class C - @@c = 1 - def m - @@c += 1 - end - end - - C.new.m - } do - remove_const :C - end - end - - def test_cvar_from_singleton - ae %q{ - class C - @@c=1 - class << self - def m - @@c += 1 - end - end - end - C.m - } do - remove_const :C - end - end - - def test_cvar_from_singleton2 - ae %q{ - class C - @@c = 1 - def self.m - @@c += 1 - end - end - C.m - } do - remove_const :C - end - end - - def test_op_asgin2 - ae %q{ - class C - attr_accessor :a - end - r = [] - o = C.new - o.a &&= 1 - r << o.a - o.a ||= 2 - r << o.a - o.a &&= 3 - r << o.a - r - } do - remove_const :C - end - ae %q{ - @@x ||= 1 - } - ae %q{ - @@x = 0 - @@x ||= 1 - } - end - - def test_op_assgin_and_or - ae %q{ - r = [] - a = 1 ; a ||= 2; r << a - a = nil; a ||= 2; r << a - a = 1 ; a &&= 2; r << a - a = nil; a &&= 2; r << a - r - } - ae %q{ - a = {} - a[0] ||= 1 - } - ae %q{ - a = {} - a[0] &&= 1 - } - ae %q{ - a = {0 => 10} - a[0] ||= 1 - } - ae %q{ - a = {0 => 10} - a[0] &&= 1 - } - end - - def test_backref - ae %q{ - /a(b)(c)d/ =~ 'xyzabcdefgabcdefg' - [$1, $2, $3, $~.class, $&, $`, $', $+] - } - - ae %q{ - def m - /a(b)(c)d/ =~ 'xyzabcdefgabcdefg' - [$1, $2, $3, $~.class, $&, $`, $', $+] - end - m - } - end - - def test_fact - ae %q{ - def fact(n) - if(n > 1) - n * fact(n-1) - else - 1 - end - end - fact(300) - } - end - - def test_mul - ae %q{ - 2*0 - } - ae %q{ - 0*2 - } - ae %q{ - 2*2 - } - end - - def test_div - ae %q{ - 3/2 - } - ae %q{ - 3.0/2.0 - } - ae %q{ - class C - def /(a) - a * 100 - end - end - C.new/3 - } do - remove_const :C - end - end - - def test_length - ae %q{ - [].length - } - ae %q{ - [1, 2].length - } - ae %q{ - {}.length - } - ae %q{ - {:a => 1, :b => 2}.length - } - ae %q{ - class C - def length - 'hoge' - end - end - C.new.length - } do - remove_const :C - end - end - - def test_mod - ae %q{ - 3%2 - } - ae %q{ - 3.0%2.0 - } - ae %q{ - class C - def % (a) - a * 100 - end - end - C.new%3 - } do - remove_const :C - end - end - - def test_attr_set - ae %q{ - o = Object.new - def o.[]=(*args) - args - end - [o[]=:x, o[0]=:x, o[0, 1]=:x, o[0, 1, 2]=:x] - } - ae %q{ - o = Object.new - def o.foo=(*args) - args - end - o.foo = :x - } - ae %q{ - $r = [] - class C - def [](*args) - $r << [:ref, args] - args.size - end - - def []=(*args) - $r << [:set, args] - args.size - end - end - - o = C.new - ary = [:x, :y] - o[1] = 2 - o[1, 2] = 3 - o[1, 2, *ary] = 3 - o[1, 2, *ary, 3] = 4 - $r - } - end - - def test_aref_aset - ae %q{ - a = [] - a << 0 - a[1] = 1 - a[2] = 2 - a[3] = a[1] + a[2] - } - ae %q{ - a = {} - a[1] = 1 - a[2] = 2 - a[3] = a[1] + a[2] - a.sort - } - ae %q{ - class C - attr_reader :a, :b - def [](a) - @a = a - end - - def []=(a, b) - @b = [a, b] - end - end - c = C.new - c[3] - c[4] = 5 - [c.a, c.b] - } do - remove_const :C - end - end - - def test_array_concat - ae %q{ - ary = [] - [:x, *ary] - } - #ae %q{ - # ary = 1 - # [:x, *ary] - #} - ae %q{ - ary = [1, 2] - [:x, *ary] - } - end -end - |