2012-11-29 12:35:29 -05:00
# -*- coding: us-ascii -*-
2015-12-16 00:07:31 -05:00
# frozen_string_literal: false
2007-02-23 00:23:33 -05:00
require 'test/unit'
class TestRubyLiteral < Test :: Unit :: TestCase
def test_special_const
assert_equal 'true' , true . inspect
assert_instance_of TrueClass , true
assert_equal 'false' , false . inspect
assert_instance_of FalseClass , false
assert_equal 'nil' , nil . inspect
assert_instance_of NilClass , nil
assert_equal ':sym' , :sym . inspect
assert_instance_of Symbol , :sym
assert_equal '1234' , 1234 . inspect
Use Integer instead of Fixnum and Bignum.
* object.c, numeric.c, enum.c, ext/-test-/bignum/mul.c,
lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rexml/xpath_parser.rb,
lib/rubygems/specification.rb, lib/uri/generic.rb,
bootstraptest/test_eval.rb, basictest/test.rb,
test/-ext-/bignum/test_big2str.rb, test/-ext-/bignum/test_div.rb,
test/-ext-/bignum/test_mul.rb, test/-ext-/bignum/test_str2big.rb,
test/csv/test_data_converters.rb, test/date/test_date.rb,
test/json/test_json_generate.rb, test/minitest/test_minitest_mock.rb,
test/openssl/test_cipher.rb, test/rexml/test_jaxen.rb,
test/ruby/test_array.rb, test/ruby/test_basicinstructions.rb,
test/ruby/test_bignum.rb, test/ruby/test_case.rb,
test/ruby/test_class.rb, test/ruby/test_complex.rb,
test/ruby/test_enum.rb, test/ruby/test_eval.rb,
test/ruby/test_iseq.rb, test/ruby/test_literal.rb,
test/ruby/test_math.rb, test/ruby/test_module.rb,
test/ruby/test_numeric.rb, test/ruby/test_range.rb,
test/ruby/test_rational.rb, test/ruby/test_refinement.rb,
test/ruby/test_rubyvm.rb, test/ruby/test_struct.rb,
test/ruby/test_variable.rb, test/rubygems/test_gem_specification.rb,
test/thread/test_queue.rb: Use Integer instead of Fixnum and Bignum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-17 09:15:57 -04:00
assert_instance_of Integer , 1234
2007-02-23 00:23:33 -05:00
assert_equal '1234' , 1_2_3_4 . inspect
Use Integer instead of Fixnum and Bignum.
* object.c, numeric.c, enum.c, ext/-test-/bignum/mul.c,
lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rexml/xpath_parser.rb,
lib/rubygems/specification.rb, lib/uri/generic.rb,
bootstraptest/test_eval.rb, basictest/test.rb,
test/-ext-/bignum/test_big2str.rb, test/-ext-/bignum/test_div.rb,
test/-ext-/bignum/test_mul.rb, test/-ext-/bignum/test_str2big.rb,
test/csv/test_data_converters.rb, test/date/test_date.rb,
test/json/test_json_generate.rb, test/minitest/test_minitest_mock.rb,
test/openssl/test_cipher.rb, test/rexml/test_jaxen.rb,
test/ruby/test_array.rb, test/ruby/test_basicinstructions.rb,
test/ruby/test_bignum.rb, test/ruby/test_case.rb,
test/ruby/test_class.rb, test/ruby/test_complex.rb,
test/ruby/test_enum.rb, test/ruby/test_eval.rb,
test/ruby/test_iseq.rb, test/ruby/test_literal.rb,
test/ruby/test_math.rb, test/ruby/test_module.rb,
test/ruby/test_numeric.rb, test/ruby/test_range.rb,
test/ruby/test_rational.rb, test/ruby/test_refinement.rb,
test/ruby/test_rubyvm.rb, test/ruby/test_struct.rb,
test/ruby/test_variable.rb, test/rubygems/test_gem_specification.rb,
test/thread/test_queue.rb: Use Integer instead of Fixnum and Bignum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-17 09:15:57 -04:00
assert_instance_of Integer , 1_2_3_4
2007-02-23 00:23:33 -05:00
assert_equal '18' , 0x12 . inspect
Use Integer instead of Fixnum and Bignum.
* object.c, numeric.c, enum.c, ext/-test-/bignum/mul.c,
lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rexml/xpath_parser.rb,
lib/rubygems/specification.rb, lib/uri/generic.rb,
bootstraptest/test_eval.rb, basictest/test.rb,
test/-ext-/bignum/test_big2str.rb, test/-ext-/bignum/test_div.rb,
test/-ext-/bignum/test_mul.rb, test/-ext-/bignum/test_str2big.rb,
test/csv/test_data_converters.rb, test/date/test_date.rb,
test/json/test_json_generate.rb, test/minitest/test_minitest_mock.rb,
test/openssl/test_cipher.rb, test/rexml/test_jaxen.rb,
test/ruby/test_array.rb, test/ruby/test_basicinstructions.rb,
test/ruby/test_bignum.rb, test/ruby/test_case.rb,
test/ruby/test_class.rb, test/ruby/test_complex.rb,
test/ruby/test_enum.rb, test/ruby/test_eval.rb,
test/ruby/test_iseq.rb, test/ruby/test_literal.rb,
test/ruby/test_math.rb, test/ruby/test_module.rb,
test/ruby/test_numeric.rb, test/ruby/test_range.rb,
test/ruby/test_rational.rb, test/ruby/test_refinement.rb,
test/ruby/test_rubyvm.rb, test/ruby/test_struct.rb,
test/ruby/test_variable.rb, test/rubygems/test_gem_specification.rb,
test/thread/test_queue.rb: Use Integer instead of Fixnum and Bignum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-17 09:15:57 -04:00
assert_instance_of Integer , 0x12
2008-03-01 10:51:04 -05:00
assert_raise ( SyntaxError ) { eval ( " 0x " ) }
2007-02-23 00:23:33 -05:00
assert_equal '15' , 0 o17 . inspect
Use Integer instead of Fixnum and Bignum.
* object.c, numeric.c, enum.c, ext/-test-/bignum/mul.c,
lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rexml/xpath_parser.rb,
lib/rubygems/specification.rb, lib/uri/generic.rb,
bootstraptest/test_eval.rb, basictest/test.rb,
test/-ext-/bignum/test_big2str.rb, test/-ext-/bignum/test_div.rb,
test/-ext-/bignum/test_mul.rb, test/-ext-/bignum/test_str2big.rb,
test/csv/test_data_converters.rb, test/date/test_date.rb,
test/json/test_json_generate.rb, test/minitest/test_minitest_mock.rb,
test/openssl/test_cipher.rb, test/rexml/test_jaxen.rb,
test/ruby/test_array.rb, test/ruby/test_basicinstructions.rb,
test/ruby/test_bignum.rb, test/ruby/test_case.rb,
test/ruby/test_class.rb, test/ruby/test_complex.rb,
test/ruby/test_enum.rb, test/ruby/test_eval.rb,
test/ruby/test_iseq.rb, test/ruby/test_literal.rb,
test/ruby/test_math.rb, test/ruby/test_module.rb,
test/ruby/test_numeric.rb, test/ruby/test_range.rb,
test/ruby/test_rational.rb, test/ruby/test_refinement.rb,
test/ruby/test_rubyvm.rb, test/ruby/test_struct.rb,
test/ruby/test_variable.rb, test/rubygems/test_gem_specification.rb,
test/thread/test_queue.rb: Use Integer instead of Fixnum and Bignum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-17 09:15:57 -04:00
assert_instance_of Integer , 0 o17
2008-03-01 10:51:04 -05:00
assert_raise ( SyntaxError ) { eval ( " 0o " ) }
2007-02-23 00:23:33 -05:00
assert_equal '5' , 0b101 . inspect
Use Integer instead of Fixnum and Bignum.
* object.c, numeric.c, enum.c, ext/-test-/bignum/mul.c,
lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rexml/xpath_parser.rb,
lib/rubygems/specification.rb, lib/uri/generic.rb,
bootstraptest/test_eval.rb, basictest/test.rb,
test/-ext-/bignum/test_big2str.rb, test/-ext-/bignum/test_div.rb,
test/-ext-/bignum/test_mul.rb, test/-ext-/bignum/test_str2big.rb,
test/csv/test_data_converters.rb, test/date/test_date.rb,
test/json/test_json_generate.rb, test/minitest/test_minitest_mock.rb,
test/openssl/test_cipher.rb, test/rexml/test_jaxen.rb,
test/ruby/test_array.rb, test/ruby/test_basicinstructions.rb,
test/ruby/test_bignum.rb, test/ruby/test_case.rb,
test/ruby/test_class.rb, test/ruby/test_complex.rb,
test/ruby/test_enum.rb, test/ruby/test_eval.rb,
test/ruby/test_iseq.rb, test/ruby/test_literal.rb,
test/ruby/test_math.rb, test/ruby/test_module.rb,
test/ruby/test_numeric.rb, test/ruby/test_range.rb,
test/ruby/test_rational.rb, test/ruby/test_refinement.rb,
test/ruby/test_rubyvm.rb, test/ruby/test_struct.rb,
test/ruby/test_variable.rb, test/rubygems/test_gem_specification.rb,
test/thread/test_queue.rb: Use Integer instead of Fixnum and Bignum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-17 09:15:57 -04:00
assert_instance_of Integer , 0b101
2008-03-01 10:51:04 -05:00
assert_raise ( SyntaxError ) { eval ( " 0b " ) }
2007-02-23 00:23:33 -05:00
assert_equal '123456789012345678901234567890' , 123456789012345678901234567890 . inspect
Use Integer instead of Fixnum and Bignum.
* object.c, numeric.c, enum.c, ext/-test-/bignum/mul.c,
lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rexml/xpath_parser.rb,
lib/rubygems/specification.rb, lib/uri/generic.rb,
bootstraptest/test_eval.rb, basictest/test.rb,
test/-ext-/bignum/test_big2str.rb, test/-ext-/bignum/test_div.rb,
test/-ext-/bignum/test_mul.rb, test/-ext-/bignum/test_str2big.rb,
test/csv/test_data_converters.rb, test/date/test_date.rb,
test/json/test_json_generate.rb, test/minitest/test_minitest_mock.rb,
test/openssl/test_cipher.rb, test/rexml/test_jaxen.rb,
test/ruby/test_array.rb, test/ruby/test_basicinstructions.rb,
test/ruby/test_bignum.rb, test/ruby/test_case.rb,
test/ruby/test_class.rb, test/ruby/test_complex.rb,
test/ruby/test_enum.rb, test/ruby/test_eval.rb,
test/ruby/test_iseq.rb, test/ruby/test_literal.rb,
test/ruby/test_math.rb, test/ruby/test_module.rb,
test/ruby/test_numeric.rb, test/ruby/test_range.rb,
test/ruby/test_rational.rb, test/ruby/test_refinement.rb,
test/ruby/test_rubyvm.rb, test/ruby/test_struct.rb,
test/ruby/test_variable.rb, test/rubygems/test_gem_specification.rb,
test/thread/test_queue.rb: Use Integer instead of Fixnum and Bignum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-17 09:15:57 -04:00
assert_instance_of Integer , 123456789012345678901234567890
2007-02-23 00:23:33 -05:00
assert_instance_of Float , 1 . 3
2012-02-24 03:58:24 -05:00
assert_equal '2' , eval ( " 0x00+2 " ) . inspect
2007-02-23 00:23:33 -05:00
end
def test_self
assert_equal self , self
assert_instance_of TestRubyLiteral , self
assert_respond_to self , :test_self
end
def test_string
assert_instance_of String , ?a
assert_equal " a " , ?a
assert_instance_of String , ?A
assert_equal " A " , ?A
assert_instance_of String , ?\n
assert_equal " \n " , ?\n
assert_equal " " , ?\ # space
assert_equal '' , ''
assert_equal 'string' , 'string'
assert_equal 'string string' , 'string string'
assert_equal ' ' , ' '
assert_equal ' ' , " "
assert_equal " \0 " , " \0 "
assert_equal " \1 " , " \1 "
assert_equal " 3 " , " \x33 "
assert_equal " \n " , " \n "
2010-04-26 21:54:23 -04:00
bug2500 = '[ruby-core:27228]'
2011-09-01 20:58:10 -04:00
bug5262 = '[ruby-core:39222]'
2010-04-26 21:54:23 -04:00
%w[ c C- M- ] . each do | pre |
2010-05-16 08:54:37 -04:00
[ " u " , %w[ u{ } ] ] . each do | open , close |
2011-09-01 20:58:10 -04:00
[ " ? " , [ '"' , '"' ] ] . each do | qopen , qclose |
str = " #{ qopen } \\ #{ pre } \\ #{ open } 5555 #{ close } #{ qclose } "
assert_raise ( SyntaxError , " #{ bug2500 } eval( #{ str } ) " ) { eval ( str ) }
str = " #{ qopen } \\ #{ pre } \\ #{ open } \ u201c #{ close } #{ qclose } "
assert_raise ( SyntaxError , " #{ bug5262 } eval( #{ str } ) " ) { eval ( str ) }
str = " #{ qopen } \\ #{ pre } \\ #{ open } \ u201c #{ close } #{ qclose } " . encode ( " euc-jp " )
assert_raise ( SyntaxError , " #{ bug5262 } eval( #{ str } ) " ) { eval ( str ) }
str = " #{ qopen } \\ #{ pre } \\ #{ open } \ u201c #{ close } #{ qclose } " . encode ( " iso-8859-13 " )
assert_raise ( SyntaxError , " #{ bug5262 } eval( #{ str } ) " ) { eval ( str ) }
str = " #{ qopen } \\ #{ pre } \\ #{ open } \xe2 \x7f #{ close } #{ qclose } " . force_encoding ( " utf-8 " )
assert_raise ( SyntaxError , " #{ bug5262 } eval( #{ str } ) " ) { eval ( str ) }
end
2010-04-26 21:54:23 -04:00
end
end
2012-02-23 18:52:12 -05:00
bug6069 = '[ruby-dev:45278]'
2010-05-16 08:54:37 -04:00
assert_equal " \x13 " , " \ c \x33 "
assert_equal " \x13 " , " \ C- \x33 "
assert_equal " \xB3 " , " \ M- \x33 "
2012-02-24 17:54:00 -05:00
assert_equal " \ u201c " , eval ( %[ " \\ \ u{201c}" ] ) , bug5262
assert_equal " \ u201c " . encode ( " euc-jp " ) , eval ( %[ " \\ \ u{201c}" ] . encode ( " euc-jp " ) ) , bug5262
assert_equal " \ u201c " . encode ( " iso-8859-13 " ) , eval ( %[ " \\ \ u{201c}" ] . encode ( " iso-8859-13 " ) ) , bug5262
assert_equal " \\ \ u201c " , eval ( %[ ' \\ \ u{201c}' ] ) , bug6069
assert_equal " \\ \ u201c " . encode ( " euc-jp " ) , eval ( %[ ' \\ \ u{201c}' ] . encode ( " euc-jp " ) ) , bug6069
assert_equal " \\ \ u201c " . encode ( " iso-8859-13 " ) , eval ( %[ ' \\ \ u{201c}' ] . encode ( " iso-8859-13 " ) ) , bug6069
assert_equal " \ u201c " , eval ( %[ ? \\ \ u{201c} ] ) , bug6069
assert_equal " \ u201c " . encode ( " euc-jp " ) , eval ( %[ ? \\ \ u{201c} ] . encode ( " euc-jp " ) ) , bug6069
assert_equal " \ u201c " . encode ( " iso-8859-13 " ) , eval ( %[ ? \\ \ u{201c} ] . encode ( " iso-8859-13 " ) ) , bug6069
2016-11-21 17:45:26 -05:00
assert_equal " ab " , eval ( " ?a 'b' " )
assert_equal " a \n b " , eval ( " <<A 'b' \n a \n A " )
2007-02-23 00:23:33 -05:00
end
def test_dstring
assert_equal '2' , " #{ 1 + 1 } "
assert_equal '16' , " #{ 2 ** 4 } "
s = " string "
assert_equal s , " #{ s } "
2009-07-20 06:01:05 -04:00
a = 'Foo'
b = " #{ a } " << 'Bar'
assert_equal ( 'Foo' , a , 'r3842' )
assert_equal ( 'FooBar' , b , 'r3842' )
2007-02-23 00:23:33 -05:00
end
2015-09-10 09:48:51 -04:00
def test_dstring_encoding
bug11519 = '[ruby-core:70703] [Bug #11519]'
[ '"foo#{}"' , '"#{}foo"' , '"#{}"' ] . each do | code |
a = eval ( " # -*- coding: utf-8 -*- \n #{ code } " )
assert_equal ( Encoding :: UTF_8 , a . encoding ,
proc { " #{ bug11519 } : #{ code } .encoding " } )
end
end
2007-02-23 00:23:33 -05:00
def test_dsymbol
assert_equal :a3c , :" a #{ 1 + 2 } c "
end
2017-09-17 05:28:58 -04:00
def test_dsymbol_redefined_intern
assert_separately ( [ ] , " #{ << - " begin; " } \n #{ << - 'end;' } " )
begin ;
class String
alias _intern intern
def intern
" < #{ upcase } > "
end
end
mesg = " literal symbol should not be affected by method redefinition "
str = " foo "
assert_equal ( :foo , :" #{ str } " , mesg )
end ;
end
2007-02-23 00:23:33 -05:00
def test_xstring
assert_equal " foo \n " , ` echo foo `
s = 'foo'
assert_equal " foo \n " , ` echo #{ s } `
end
2015-09-27 02:44:02 -04:00
def test_frozen_string
all_assertions do | a |
2015-10-21 05:34:09 -04:00
a . for ( " false with indicator " ) do
2015-09-27 02:44:02 -04:00
str = eval ( " # -*- frozen-string-literal: false -*- \n " " 'foo' " )
assert_not_predicate ( str , :frozen? )
end
2015-10-21 05:34:09 -04:00
a . for ( " true with indicator " ) do
2015-09-27 02:44:02 -04:00
str = eval ( " # -*- frozen-string-literal: true -*- \n " " 'foo' " )
assert_predicate ( str , :frozen? )
end
2015-10-21 05:34:09 -04:00
a . for ( " false without indicator " ) do
str = eval ( " # frozen-string-literal: false \n " " 'foo' " )
assert_not_predicate ( str , :frozen? )
end
a . for ( " true without indicator " ) do
str = eval ( " # frozen-string-literal: true \n " " 'foo' " )
assert_predicate ( str , :frozen? )
end
a . for ( " false with preceding garbage " ) do
str = eval ( " # x frozen-string-literal: false \n " " 'foo' " )
assert_not_predicate ( str , :frozen? )
end
a . for ( " true with preceding garbage " ) do
str = eval ( " # x frozen-string-literal: true \n " " 'foo' " )
assert_not_predicate ( str , :frozen? )
end
a . for ( " false with succeeding garbage " ) do
str = eval ( " # frozen-string-literal: false x \n " " 'foo' " )
assert_not_predicate ( str , :frozen? )
end
a . for ( " true with succeeding garbage " ) do
str = eval ( " # frozen-string-literal: true x \n " " 'foo' " )
assert_not_predicate ( str , :frozen? )
end
2015-09-27 02:44:02 -04:00
end
end
Collapse putobject, putobject, newarray
This collapses:
```
== disasm: #<ISeq:bar@bench.rb:3 (3,0)-(5,3)> (catch: FALSE)
0000 putobject "a" ( 4)[LiCa]
0002 putobject "b"
0004 putobject "c"
0006 putobject "d"
0008 putobject "e"
0010 putobject "f"
0012 putobject "g"
0014 putobject "h"
0016 putobject "i"
0018 putobject "j"
0020 putobject "k"
0022 newarray 11
0024 leave ( 5)[Re]
```
In to this:
```
== disasm: #<ISeq:bar@bench.rb:3 (3,0)-(5,3)> (catch: FALSE)
0000 duparray ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]( 4)[LiCa]
0002 leave ( 5)[Re]
```
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66174 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-03 18:53:11 -05:00
def test_frozen_string_in_array_literal
list = eval ( " # frozen-string-literal: true \n " " ['foo', 'bar'] " )
assert_equal 2 , list . length
list . each { | str | assert_predicate str , :frozen? }
end
2017-11-13 18:53:00 -05:00
if defined? ( RubyVM :: InstructionSequence . compile_option ) and
RubyVM :: InstructionSequence . compile_option . key? ( :debug_frozen_string_literal )
def test_debug_frozen_string
src = 'n = 1; "foo#{n ? "-#{n}" : ""}"' ; f = " test.rb " ; n = 1
opt = { frozen_string_literal : true , debug_frozen_string_literal : true }
str = RubyVM :: InstructionSequence . compile ( src , f , f , n , opt ) . eval
assert_equal ( " foo-1 " , str )
assert_predicate ( str , :frozen? )
2017-12-11 19:46:34 -05:00
assert_raise_with_message ( FrozenError , / created at #{ Regexp . quote ( f ) } : #{ n } / ) {
2017-11-13 18:53:00 -05:00
str << " x "
}
end
Collapse putobject, putobject, newarray
This collapses:
```
== disasm: #<ISeq:bar@bench.rb:3 (3,0)-(5,3)> (catch: FALSE)
0000 putobject "a" ( 4)[LiCa]
0002 putobject "b"
0004 putobject "c"
0006 putobject "d"
0008 putobject "e"
0010 putobject "f"
0012 putobject "g"
0014 putobject "h"
0016 putobject "i"
0018 putobject "j"
0020 putobject "k"
0022 newarray 11
0024 leave ( 5)[Re]
```
In to this:
```
== disasm: #<ISeq:bar@bench.rb:3 (3,0)-(5,3)> (catch: FALSE)
0000 duparray ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]( 4)[LiCa]
0002 leave ( 5)[Re]
```
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66174 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-03 18:53:11 -05:00
def test_debug_frozen_string_in_array_literal
src = '["foo"]' ; f = " test.rb " ; n = 1
opt = { frozen_string_literal : true , debug_frozen_string_literal : true }
ary = RubyVM :: InstructionSequence . compile ( src , f , f , n , opt ) . eval
assert_equal ( " foo " , ary . first )
assert_predicate ( ary . first , :frozen? )
assert_raise_with_message ( FrozenError , / created at #{ Regexp . quote ( f ) } : #{ n } / ) {
ary . first << " x "
2018-12-12 12:16:02 -05:00
} unless ENV [ 'RUBY_ISEQ_DUMP_DEBUG' ]
Collapse putobject, putobject, newarray
This collapses:
```
== disasm: #<ISeq:bar@bench.rb:3 (3,0)-(5,3)> (catch: FALSE)
0000 putobject "a" ( 4)[LiCa]
0002 putobject "b"
0004 putobject "c"
0006 putobject "d"
0008 putobject "e"
0010 putobject "f"
0012 putobject "g"
0014 putobject "h"
0016 putobject "i"
0018 putobject "j"
0020 putobject "k"
0022 newarray 11
0024 leave ( 5)[Re]
```
In to this:
```
== disasm: #<ISeq:bar@bench.rb:3 (3,0)-(5,3)> (catch: FALSE)
0000 duparray ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"]( 4)[LiCa]
0002 leave ( 5)[Re]
```
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66174 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-03 18:53:11 -05:00
end
2017-11-13 18:53:00 -05:00
end
2007-02-23 00:23:33 -05:00
def test_regexp
assert_instance_of Regexp , / /
2010-01-25 18:12:50 -05:00
assert_match ( / / , 'a' )
assert_match ( / / , '' )
2007-02-23 00:23:33 -05:00
assert_instance_of Regexp , / a /
2010-01-25 18:12:50 -05:00
assert_match ( / a / , 'a' )
assert_no_match ( / test / , 'tes' )
2007-02-23 00:23:33 -05:00
re = / test /
assert_match re , 'test'
str = 'test'
assert_match re , str
2010-01-25 18:12:50 -05:00
assert_match ( / test / , str )
2007-02-23 00:23:33 -05:00
assert_equal 0 , ( / test / =~ 'test' )
assert_equal 0 , ( re =~ 'test' )
assert_equal 0 , ( / test / =~ str )
assert_equal 0 , ( re =~ str )
assert_equal 0 , ( 'test' =~ / test / )
assert_equal 0 , ( 'test' =~ re )
assert_equal 0 , ( str =~ / test / )
assert_equal 0 , ( str =~ re )
end
def test_dregexp
assert_instance_of Regexp , / re #{ 'ge' } xp /
assert_equal ( / regexp / , / re #{ 'ge' } xp / )
2010-10-03 23:43:50 -04:00
bug3903 = '[ruby-core:32682]'
assert_raise ( SyntaxError , bug3903 ) { eval ( '/[#{"\x80"}]/' ) }
2007-02-23 00:23:33 -05:00
end
def test_array
assert_instance_of Array , [ ]
assert_equal [ ] , [ ]
assert_equal 0 , [ ] . size
assert_instance_of Array , [ 0 ]
assert_equal [ 3 ] , [ 3 ]
assert_equal 1 , [ 3 ] . size
a = [ 3 ]
assert_equal 3 , a [ 0 ]
assert_instance_of Array , [ 1 , 2 ]
assert_equal [ 1 , 2 ] , [ 1 , 2 ]
assert_instance_of Array , [ 1 , 2 , 3 , 4 , 5 ]
assert_equal [ 1 , 2 , 3 , 4 , 5 ] , [ 1 , 2 , 3 , 4 , 5 ]
assert_equal 5 , [ 1 , 2 , 3 , 4 , 5 ] . size
a = [ 1 , 2 ]
assert_equal 1 , a [ 0 ]
assert_equal 2 , a [ 1 ]
a = [ 1 + 2 , 3 + 4 , 5 + 6 ]
assert_instance_of Array , a
assert_equal [ 3 , 7 , 11 ] , a
assert_equal 7 , a [ 1 ]
assert_equal 1 , ( [ 0 ] [ 0 ] += 1 )
assert_equal 1 , ( [ 2 ] [ 0 ] -= 1 )
a = [ obj = Object . new ]
assert_instance_of Array , a
assert_equal 1 , a . size
assert_equal obj , a [ 0 ]
a = [ 1 , 2 , 3 ]
a [ 1 ] = 5
assert_equal 5 , a [ 1 ]
end
def test_hash
assert_instance_of Hash , { }
assert_equal ( { } , { } )
assert_instance_of Hash , { 1 = > 2 }
assert_equal ( { 1 = > 2 } , { 1 = > 2 } )
h = { 1 = > 2 }
assert_equal 2 , h [ 1 ]
h = { " string " = > " literal " , " goto " = > " hell " }
assert_equal h , h
assert_equal 2 , h . size
assert_equal h , h
assert_equal " literal " , h [ " string " ]
end
2018-12-20 01:44:50 -05:00
def test_hash_literal_frozen
2018-12-20 01:59:27 -05:00
assert_separately ( [ ] , " #{ << ~ " begin; " } \n #{ << ~ 'end;' } " )
begin ;
def frozen_hash_literal_arg
{ 0 = > 1 , 1 = > 4 , 2 = > 17 }
end
2018-12-20 02:17:55 -05:00
ObjectSpace . each_object ( Hash ) do | a |
2018-12-25 02:21:45 -05:00
if a . class == Hash and ! a . default_proc and a . size == 3 &&
a [ 0 ] == 1 && a [ 1 ] == 4 && a [ 2 ] == 17
2018-12-20 02:17:55 -05:00
# should not be found.
raise
2018-12-20 01:44:50 -05:00
end
end
2018-12-20 01:59:27 -05:00
assert_not_include frozen_hash_literal_arg , 3
end ;
2018-12-20 01:44:50 -05:00
end
2012-04-11 21:33:34 -04:00
def test_big_array_and_hash_literal
2012-04-17 23:31:11 -04:00
assert_normal_exit %q{ GC.disable=true; x = nil; raise if eval("[ # { (1..1_000_000).map { 'x' } .join(", ") } ]").size != 1_000_000 } , " " , timeout : 300 , child_env : %[ --disable-gems ]
assert_normal_exit %q{ GC.disable=true; x = nil; raise if eval("[ # { (1..1_000_000).to_a.join(", ") } ]").size != 1_000_000 } , " " , timeout : 300 , child_env : %[ --disable-gems ]
assert_normal_exit %q{ GC.disable=true; x = nil; raise if eval(" { # { (1..1_000_000).map { |n| " # { n } => x" } .join(', ') } } ").size != 1_000_000 } , " " , timeout : 300 , child_env : %[ --disable-gems ]
assert_normal_exit %q{ GC.disable=true; x = nil; raise if eval(" { # { (1..1_000_000).map { |n| " # { n } => # { n } " } .join(', ') } } ").size != 1_000_000 } , " " , timeout : 300 , child_env : %[ --disable-gems ]
2015-07-16 01:18:40 -04:00
end
2012-11-29 12:35:29 -05:00
2015-07-16 01:18:40 -04:00
def test_big_hash_literal
2012-11-29 12:35:29 -05:00
bug7466 = '[ruby-dev:46658]'
h = {
0xFE042 = > 0xE5CD ,
0xFE043 = > 0xE5CD ,
0xFE045 = > 0xEA94 ,
0xFE046 = > 0xE4E3 ,
0xFE047 = > 0xE4E2 ,
0xFE048 = > 0xEA96 ,
0xFE049 = > 0x3013 ,
0xFE04A = > 0xEB36 ,
0xFE04B = > 0xEB37 ,
0xFE04C = > 0xEB38 ,
0xFE04D = > 0xEB49 ,
0xFE04E = > 0xEB82 ,
0xFE04F = > 0xE4D2 ,
0xFE050 = > 0xEB35 ,
0xFE051 = > 0xEAB9 ,
0xFE052 = > 0xEABA ,
0xFE053 = > 0xE4D4 ,
0xFE054 = > 0xE4CD ,
0xFE055 = > 0xEABB ,
0xFE056 = > 0xEABC ,
0xFE057 = > 0xEB32 ,
0xFE058 = > 0xEB33 ,
0xFE059 = > 0xEB34 ,
0xFE05A = > 0xEB39 ,
0xFE05B = > 0xEB5A ,
0xFE190 = > 0xE5A4 ,
0xFE191 = > 0xE5A5 ,
0xFE192 = > 0xEAD0 ,
0xFE193 = > 0xEAD1 ,
0xFE194 = > 0xEB47 ,
0xFE195 = > 0xE509 ,
0xFE196 = > 0xEAA0 ,
0xFE197 = > 0xE50B ,
0xFE198 = > 0xEAA1 ,
0xFE199 = > 0xEAA2 ,
0xFE19A = > 0x3013 ,
0xFE19B = > 0xE4FC ,
0xFE19C = > 0xE4FA ,
0xFE19D = > 0xE4FC ,
0xFE19E = > 0xE4FA ,
0xFE19F = > 0xE501 ,
0xFE1A0 = > 0x3013 ,
0xFE1A1 = > 0xE5DD ,
0xFE1A2 = > 0xEADB ,
0xFE1A3 = > 0xEAE9 ,
0xFE1A4 = > 0xEB13 ,
0xFE1A5 = > 0xEB14 ,
0xFE1A6 = > 0xEB15 ,
0xFE1A7 = > 0xEB16 ,
0xFE1A8 = > 0xEB17 ,
0xFE1A9 = > 0xEB18 ,
0xFE1AA = > 0xEB19 ,
0xFE1AB = > 0xEB1A ,
0xFE1AC = > 0xEB44 ,
0xFE1AD = > 0xEB45 ,
0xFE1AE = > 0xE4CB ,
0xFE1AF = > 0xE5BF ,
0xFE1B0 = > 0xE50E ,
0xFE1B1 = > 0xE4EC ,
0xFE1B2 = > 0xE4EF ,
0xFE1B3 = > 0xE4F8 ,
0xFE1B4 = > 0x3013 ,
0xFE1B5 = > 0x3013 ,
0xFE1B6 = > 0xEB1C ,
0xFE1B9 = > 0xEB7E ,
0xFE1D3 = > 0xEB22 ,
0xFE7DC = > 0xE4D8 ,
0xFE1D4 = > 0xEB23 ,
0xFE1D5 = > 0xEB24 ,
0xFE1D6 = > 0xEB25 ,
0xFE1CC = > 0xEB1F ,
0xFE1CD = > 0xEB20 ,
0xFE1CE = > 0xE4D9 ,
0xFE1CF = > 0xE48F ,
0xFE1C5 = > 0xE5C7 ,
0xFE1C6 = > 0xEAEC ,
0xFE1CB = > 0xEB1E ,
0xFE1DA = > 0xE4DD ,
0xFE1E1 = > 0xEB57 ,
0xFE1E2 = > 0xEB58 ,
0xFE1E3 = > 0xE492 ,
0xFE1C9 = > 0xEB1D ,
0xFE1D9 = > 0xE4D3 ,
0xFE1DC = > 0xE5D4 ,
0xFE1BA = > 0xE4E0 ,
0xFE1BB = > 0xEB76 ,
0xFE1C8 = > 0xE4E0 ,
0xFE1DD = > 0xE5DB ,
0xFE1BC = > 0xE4DC ,
0xFE1D8 = > 0xE4DF ,
0xFE1BD = > 0xE49A ,
0xFE1C7 = > 0xEB1B ,
0xFE1C2 = > 0xE5C2 ,
0xFE1C0 = > 0xE5C0 ,
0xFE1B8 = > 0xE4DB ,
0xFE1C3 = > 0xE470 ,
0xFE1BE = > 0xE4D8 ,
0xFE1C4 = > 0xE4D9 ,
0xFE1B7 = > 0xE4E1 ,
0xFE1BF = > 0xE4DE ,
0xFE1C1 = > 0xE5C1 ,
0xFE1CA = > 0x3013 ,
0xFE1D0 = > 0xE4E1 ,
0xFE1D1 = > 0xEB21 ,
0xFE1D2 = > 0xE4D7 ,
0xFE1D7 = > 0xE4DA ,
0xFE1DB = > 0xE4EE ,
0xFE1DE = > 0xEB3F ,
0xFE1DF = > 0xEB46 ,
0xFE1E0 = > 0xEB48 ,
0xFE336 = > 0xE4FB ,
0xFE320 = > 0xE472 ,
0xFE321 = > 0xEB67 ,
0xFE322 = > 0xEACA ,
0xFE323 = > 0xEAC0 ,
0xFE324 = > 0xE5AE ,
0xFE325 = > 0xEACB ,
0xFE326 = > 0xEAC9 ,
0xFE327 = > 0xE5C4 ,
0xFE328 = > 0xEAC1 ,
0xFE329 = > 0xE4E7 ,
0xFE32A = > 0xE4E7 ,
0xFE32B = > 0xEACD ,
0xFE32C = > 0xEACF ,
0xFE32D = > 0xEACE ,
0xFE32E = > 0xEAC7 ,
0xFE32F = > 0xEAC8 ,
0xFE330 = > 0xE471 ,
0xFE331 = > " [Bug # 7466] " ,
}
k = h . keys
assert_equal ( [ 129 , 0xFE331 ] , [ k . size , k . last ] , bug7466 )
2015-07-16 01:18:40 -04:00
code = [
" h = { " ,
( 1 .. 128 ) . map { | i | " #{ i } => 0, " } ,
( 129 .. 140 ) . map { | i | " #{ i } => [], " } ,
" } " ,
] . join
assert_separately ( [ ] , << - " end; " )
GC . stress = true
#{code}
GC . stress = false
assert_equal ( 140 , h . size )
end ;
2012-04-11 21:33:34 -04:00
end
2017-04-27 00:21:04 -04:00
def test_hash_duplicated_key
h = EnvUtil . suppress_warning do
eval << ~ end
# This is a syntax that renders warning at very early stage.
# eval used to delay warning, to be suppressible by EnvUtil.
{ " a " = > 100 , " b " = > 200 , " a " = > 300 , " a " = > 400 }
end
end
assert_equal ( 2 , h . size )
assert_equal ( 400 , h [ 'a' ] )
assert_equal ( 200 , h [ 'b' ] )
assert_nil ( h [ 'c' ] )
assert_equal ( nil , h . key ( '300' ) )
end
def test_hash_frozen_key_id
key = " a " . freeze
h = { key = > 100 }
assert_equal ( 100 , h [ 'a' ] )
assert_same ( key , * h . keys )
end
def test_hash_key_tampering
key = " a "
h = { key = > 100 }
key . upcase!
assert_equal ( 100 , h [ 'a' ] )
end
2007-02-23 00:23:33 -05:00
def test_range
assert_instance_of Range , ( 1 .. 2 )
assert_equal ( 1 .. 2 , 1 .. 2 )
r = 1 .. 2
assert_equal 1 , r . begin
assert_equal 2 , r . end
assert_equal false , r . exclude_end?
assert_instance_of Range , ( 1 ... 3 )
assert_equal ( 1 ... 3 , 1 ... 3 )
r = 1 ... 3
assert_equal 1 , r . begin
assert_equal 3 , r . end
assert_equal true , r . exclude_end?
r = 1 + 2 .. 3 + 4
assert_instance_of Range , r
assert_equal 3 , r . begin
assert_equal 7 , r . end
assert_equal false , r . exclude_end?
r = 1 + 2 ... 3 + 4
assert_instance_of Range , r
assert_equal 3 , r . begin
assert_equal 7 , r . end
assert_equal true , r . exclude_end?
assert_instance_of Range , 'a' .. 'c'
r = 'a' .. 'c'
assert_equal 'a' , r . begin
assert_equal 'c' , r . end
end
def test__FILE__
assert_instance_of String , __FILE__
assert_equal __FILE__ , __FILE__
assert_equal 'test_literal.rb' , File . basename ( __FILE__ )
end
def test__LINE__
Use Integer instead of Fixnum and Bignum.
* object.c, numeric.c, enum.c, ext/-test-/bignum/mul.c,
lib/rexml/quickpath.rb, lib/rexml/text.rb, lib/rexml/xpath_parser.rb,
lib/rubygems/specification.rb, lib/uri/generic.rb,
bootstraptest/test_eval.rb, basictest/test.rb,
test/-ext-/bignum/test_big2str.rb, test/-ext-/bignum/test_div.rb,
test/-ext-/bignum/test_mul.rb, test/-ext-/bignum/test_str2big.rb,
test/csv/test_data_converters.rb, test/date/test_date.rb,
test/json/test_json_generate.rb, test/minitest/test_minitest_mock.rb,
test/openssl/test_cipher.rb, test/rexml/test_jaxen.rb,
test/ruby/test_array.rb, test/ruby/test_basicinstructions.rb,
test/ruby/test_bignum.rb, test/ruby/test_case.rb,
test/ruby/test_class.rb, test/ruby/test_complex.rb,
test/ruby/test_enum.rb, test/ruby/test_eval.rb,
test/ruby/test_iseq.rb, test/ruby/test_literal.rb,
test/ruby/test_math.rb, test/ruby/test_module.rb,
test/ruby/test_numeric.rb, test/ruby/test_range.rb,
test/ruby/test_rational.rb, test/ruby/test_refinement.rb,
test/ruby/test_rubyvm.rb, test/ruby/test_struct.rb,
test/ruby/test_variable.rb, test/rubygems/test_gem_specification.rb,
test/thread/test_queue.rb: Use Integer instead of Fixnum and Bignum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55029 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2016-05-17 09:15:57 -04:00
assert_instance_of Integer , __LINE__
2007-02-23 00:23:33 -05:00
assert_equal __LINE__ , __LINE__
end
2008-03-01 11:16:46 -05:00
def test_integer
head = [ '' , '0x' , '0o' , '0b' , '0d' , '-' , '+' ]
chars = [ '0' , '1' , '_' , '9' , 'f' ]
head . each { | h |
4 . times { | len |
a = [ h ]
len . times { a = a . product ( chars ) . map { | x | x . join ( '' ) } }
a . each { | s |
next if s . empty?
begin
r1 = Integer ( s )
rescue ArgumentError
r1 = :err
end
begin
r2 = eval ( s )
rescue NameError , SyntaxError
r2 = :err
end
assert_equal ( r1 , r2 , " Integer( #{ s . inspect } ) != eval( #{ s . inspect } ) " )
}
}
}
2009-11-29 21:00:14 -05:00
bug2407 = '[ruby-dev:39798]'
2018-04-09 07:09:30 -04:00
head . grep_v ( / ^0 / ) do | s |
head . grep ( / ^0 / ) do | h |
h = " #{ s } #{ h } _ "
assert_syntax_error ( h , / numeric literal without digits \ Z / , " #{ bug2407 } : #{ h . inspect } " )
2009-11-29 21:00:14 -05:00
end
2018-04-09 07:09:30 -04:00
end
2008-03-01 11:16:46 -05:00
end
def test_float
head = [ '' , '-' , '+' ]
chars = [ '0' , '1' , '_' , '9' , 'f' , '.' ]
head . each { | h |
6 . times { | len |
a = [ h ]
len . times { a = a . product ( chars ) . map { | x | x . join ( '' ) } }
a . each { | s |
next if s . empty?
next if / \ . \ z / =~ s
next if / \ A[-+]? \ . / =~ s
next if / \ A[-+]?0 / =~ s
begin
r1 = Float ( s )
rescue ArgumentError
r1 = :err
end
begin
r2 = eval ( s )
rescue NameError , SyntaxError
r2 = :err
end
r2 = :err if Range === r2
assert_equal ( r1 , r2 , " Float( #{ s . inspect } ) != eval( #{ s . inspect } ) " )
}
}
}
2016-07-15 04:08:59 -04:00
assert_equal ( 100 . 0 , 0 . 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 e100 )
2008-03-01 11:16:46 -05:00
end
2014-11-18 14:16:27 -05:00
def test_symbol_list
assert_equal ( [ :foo , :bar ] , % i [ foo bar ] )
assert_equal ( [ :" \" foo " ] , % i [ " foo])
x = 10
assert_equal ( [ :foo , :b10 ] , % I [ foo b #{x}])
assert_equal ( [ :" \" foo10 " ] , % I [ " foo #{ x } ])
assert_ruby_status ( [ " --disable-gems " , " --dump=parsetree " ] , " %I[foo bar] " )
end
2007-02-23 00:23:33 -05:00
end