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
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
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
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