Ignore:
Timestamp:
Jul 9, 2020, 8:51:43 AM (4 years ago)
Author:
coas-nagasima
Message:

mrubyを2.1.1に更新

Location:
EcnlProtoTool/trunk/mruby-2.1.1
Files:
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/mruby-2.1.1/test/t/string.rb

    r331 r439  
    33# String ISO Test
    44
    5 UTF8STRING = ("\343\201\202".size == 1)
     5UTF8STRING = __ENCODING__ == "UTF-8"
    66
    77assert('String', '15.2.10') do
     
    2121  assert_equal(-1, d)
    2222  assert_equal  1, e
     23  assert_nil 'a' <=> 1024
    2324end
    2425
     
    3738  assert_equal 'aaaaa', 'a' * 5
    3839  assert_equal '', 'a' * 0
    39   assert_raise(ArgumentError) do
    40     'a' * -1
    41   end
     40  assert_raise(ArgumentError) { 'a' * -1 }
     41  assert_raise(TypeError) { 'a' * '1' }
     42  assert_raise(TypeError) { 'a' * nil }
     43
     44  skip unless Object.const_defined?(:Float)
     45  assert_equal 'aa', 'a' * 2.1
     46  assert_raise(RangeError) { '' * 1e30 }
     47  assert_raise(RangeError) { '' * Float::INFINITY }
     48  assert_raise(RangeError) { '' * Float::NAN }
    4249end
    4350
    4451assert('String#[]', '15.2.10.5.6') do
    4552  # length of args is 1
    46   a = 'abc'[0]
    47   b = 'abc'[-1]
    48   c = 'abc'[10]
    49   d = 'abc'[-10]
    50   e = 'abc'[1.1]
     53  assert_equal 'a', 'abc'[0]
     54  assert_equal 'c', 'abc'[-1]
     55  assert_nil 'abc'[10]
     56  assert_nil 'abc'[-10]
     57  assert_equal 'b', 'abc'[1.1] if Object.const_defined?(:Float)
    5158
    5259  # length of args is 2
    53   a1 = 'abc'[0, -1]
    54   b1 = 'abc'[10, 0]
    55   c1 = 'abc'[-10, 0]
    56   d1 = 'abc'[0, 0]
    57   e1 = 'abc'[1, 2]
    58 
    59   # args is RegExp
    60   # It will be tested in mrbgems.
     60  assert_nil 'abc'[0, -1]
     61  assert_nil 'abc'[10, 0]
     62  assert_nil 'abc'[-10, 0]
     63  assert_equal '', 'abc'[0, 0]
     64  assert_equal 'bc', 'abc'[1, 2]
    6165
    6266  # args is String
    63   a3 = 'abc'['bc']
    64   b3 = 'abc'['XX']
    65 
    66   assert_equal 'a', 'a'
    67   # assert_equal 'c', b
    68   # assert_nil c
    69   # assert_nil d
    70   # assert_equal 'b', e
    71   # assert_nil a1
    72   # assert_nil b1
    73   # assert_nil c1
    74   # assert_equal '', d1
    75   # assert_equal 'bc', e1
    76   # assert_equal 'bc', a3
    77   # assert_nil b3
    78 
    79   # assert_raise(TypeError) do
    80   #   a[nil]
    81   # end
     67  assert_equal 'bc', 'abc'['bc']
     68  assert_nil 'abc'['XX']
     69
     70  assert_raise(TypeError) { 'abc'[nil] }
    8271end
    8372
     
    155144  end
    156145
    157   e = 'abc'
    158   e[1.1] = 'X'
    159   assert_equal 'aXc', e
    160 
     146  if Object.const_defined?(:Float)
     147   e = 'abc'
     148   e[1.1] = 'X'
     149   assert_equal 'aXc', e
     150  end
     151
     152  assert_raise(TypeError) { 'a'[0] = 1 }
     153  assert_raise(TypeError) { 'a'[:a] = '1' }
    161154
    162155  # length of args is 2
     
    196189    b3['XX'] = 'Y'
    197190  end
    198 end
     191
     192  assert_raise(TypeError) { 'a'[:a, 0] = '1' }
     193  assert_raise(TypeError) { 'a'[0, :a] = '1' }
     194  assert_raise(TypeError) { 'a'[0, 1] = 1 }
     195end
     196
     197assert('String[]=(UTF-8)') do
     198  a = "➀➁➂➃➄"
     199  a[3] = "⚃"
     200  assert_equal "➀➁➂⚃➄", a
     201
     202  b = "➀➁➂➃➄"
     203  b[3, 0] = "⛄"
     204  assert_equal "➀➁➂⛄➃➄", b
     205
     206  c = "➀➁➂➃➄"
     207  c[3, 2] = "⚃⚄"
     208  assert_equal "➀➁➂⚃⚄", c
     209
     210  d = "➀➁➂➃➄"
     211  d[5] = "⛄"
     212  assert_equal "➀➁➂➃➄⛄", d
     213
     214  e = "➀➁➂➃➄"
     215  e[5, 0] = "⛄"
     216  assert_equal "➀➁➂➃➄⛄", e
     217
     218  f = "➀➁➂➃➄"
     219  f[5, 2] = "⛄"
     220  assert_equal "➀➁➂➃➄⛄", f
     221
     222  g = "➀➁➂➃➄"
     223  assert_raise(IndexError) { g[6] = "⛄" }
     224
     225  h = "➀➁➂➃➄"
     226  assert_raise(IndexError) { h[6, 0] = "⛄" }
     227
     228  i = "➀➁➂➃➄"
     229  assert_raise(IndexError) { i[6, 2] = "⛄" }
     230
     231  j = "➀➁➂➃➄"
     232  j["➃"] = "⚃"
     233  assert_equal "➀➁➂⚃➄", j
     234
     235  k = "➀➁➂➃➄"
     236  assert_raise(IndexError) { k["⛄"] = "⛇" }
     237
     238  l = "➀➁➂➃➄"
     239  assert_nothing_raised { l["➂"] = "" }
     240  assert_equal "➀➁➃➄", l
     241
     242  m = "➀➁➂➃➄"
     243  assert_raise(TypeError) { m["➂"] = nil }
     244  assert_equal "➀➁➂➃➄", m
     245end if UTF8STRING
    199246
    200247assert('String#capitalize', '15.2.10.5.7') do
     
    252299end
    253300
    254 assert('String#chomp! uses the correct length') do
    255   class A
    256     def to_str
    257       $s.replace("AA")
    258       "A"
    259     end
    260   end
    261 
    262   $s = "AAA"
    263   $s.chomp!(A.new)
    264   assert_equal $s, "A"
    265 end
    266 
    267301assert('String#chop', '15.2.10.5.11') do
    268302  a = ''.chop
     
    367401  assert_equal('aBcaBc', 'abcabc'.gsub('b'){|w| w.capitalize }, 'gsub with block')
    368402  assert_equal('$a$a$',  '#a#a#'.gsub('#', '$'), 'mruby/mruby#847')
    369   assert_equal('$a$a$',  '#a#a#'.gsub('#'){|w| '$' }, 'mruby/mruby#847 with block')
     403  assert_equal('$a$a$',  '#a#a#'.gsub('#'){|_w| '$' }, 'mruby/mruby#847 with block')
    370404  assert_equal('$$a$$',  '##a##'.gsub('##', '$$'), 'mruby/mruby#847 another case')
    371   assert_equal('$$a$$',  '##a##'.gsub('##'){|w| '$$' }, 'mruby/mruby#847 another case with block')
     405  assert_equal('$$a$$',  '##a##'.gsub('##'){|_w| '$$' }, 'mruby/mruby#847 another case with block')
    372406  assert_equal('A',      'a'.gsub('a', 'A'))
    373407  assert_equal('A',      'a'.gsub('a'){|w| w.capitalize })
     
    418452  assert_equal 5, "hello".index("", 5)
    419453  assert_equal nil, "hello".index("", 6)
    420 end
     454  assert_equal 3, "hello".index("l", -2)
     455  assert_raise(ArgumentError) { "hello".index }
     456  assert_raise(TypeError) { "hello".index(101) }
     457end
     458
     459assert('String#index(UTF-8)', '15.2.10.5.22') do
     460  assert_equal 0, '⓿➊➋➌➍➎'.index('⓿')
     461  assert_nil '⓿➊➋➌➍➎'.index('➓')
     462  assert_equal 6, '⓿➊➋➌➍➎⓿➊➋➌➍➎'.index('⓿', 1)
     463  assert_equal 6, '⓿➊➋➌➍➎⓿➊➋➌➍➎'.index('⓿', -7)
     464  assert_equal 6, "⓿➊➋➌➍➎".index("", 6)
     465  assert_equal nil, "⓿➊➋➌➍➎".index("", 7)
     466  assert_equal 0, '⓿➊➋➌➍➎'.index("\xe2")
     467  assert_equal nil, '⓿➊➋➌➍➎'.index("\xe3")
     468  assert_equal 6, "\xd1\xd1\xd1\xd1\xd1\xd1⓿➊➋➌➍➎".index('⓿')
     469end if UTF8STRING
    421470
    422471assert('String#initialize', '15.2.10.5.23') do
     
    476525
    477526assert('String#reverse(UTF-8)', '15.2.10.5.29') do
    478   assert_equal "ち", "こんにちは世界"[3]
    479   assert_equal nil, "こんにちは世界"[20]
    480   assert_equal "世", "こんにちは世界"[-2]
    481   assert_equal "世界", "こんにちは世界"[-2..-1]
    482   assert_equal "んに", "こんにちは世界"[1,2]
    483   assert_equal "世", "こんにちは世界"["世"]
     527  a = 'こんにちは世界!'
     528  a.reverse
     529
     530  assert_equal 'こんにちは世界!', a
     531  assert_equal '!界世はちにんこ', 'こんにちは世界!'.reverse
     532  assert_equal 'あ', 'あ'.reverse
    484533end if UTF8STRING
    485534
     
    498547  assert_equal '!界世はちにんこ', a
    499548  assert_equal '!界世はちにんこ', 'こんにちは世界!'.reverse!
     549
     550  b = 'あ'
     551  b.reverse!
     552  assert_equal 'あ', b
    500553end if UTF8STRING
    501554
    502555assert('String#rindex', '15.2.10.5.31') do
    503556  assert_equal 0, 'abc'.rindex('a')
     557  assert_equal 0, 'abc'.rindex('a', 3)
     558  assert_nil 'abc'.rindex('a', -4)
    504559  assert_nil 'abc'.rindex('d')
     560  assert_equal 6, 'abcabc'.rindex('')
     561  assert_equal 3, 'abcabc'.rindex('a')
    505562  assert_equal 0, 'abcabc'.rindex('a', 1)
    506563  assert_equal 3, 'abcabc'.rindex('a', 4)
     564  assert_equal 0, 'abcabc'.rindex('a', -4)
     565  assert_raise(ArgumentError) { "hello".rindex }
     566  assert_raise(TypeError) { "hello".rindex(101) }
    507567end
    508568
    509569assert('String#rindex(UTF-8)', '15.2.10.5.31') do
    510570  str = "こんにちは世界!\nこんにちは世界!"
    511   assert_nil str.index('さ')
    512   assert_equal 3, str.index('ち')
    513   assert_equal 12, str.index('ち', 10)
    514   assert_equal nil, str.index("さ")
    515 end if UTF8STRING
    516 
    517 # 'String#scan', '15.2.10.5.32' will be tested in mrbgems.
     571  assert_nil str.rindex('さ')
     572  assert_equal 12, str.rindex('ち')
     573  assert_equal 3, str.rindex('ち', 10)
     574  assert_equal 3, str.rindex('ち', -6)
     575
     576  broken = "\xf0☀\xf1☁\xf2☂\xf3☃\xf0☀\xf1☁\xf2☂\xf3☃"
     577  assert_nil broken.rindex("\x81") # "\x81" is a part of "☁" ("\xe2\x98\x81")
     578  assert_equal 11, broken.rindex("☁")
     579  assert_equal 11, broken.rindex("☁", 12)
     580  assert_equal 11, broken.rindex("☁", 11)
     581  assert_equal  3, broken.rindex("☁", 10)
     582end if UTF8STRING
     583
     584# assert('String#scan', '15.2.10.5.32') do
     585#   # Not implemented yet
     586# end
    518587
    519588assert('String#size', '15.2.10.5.33') do
     
    591660  miss = str.sub("X", "Z")
    592661  assert_equal str, miss
    593   assert_not_equal str.object_id, miss.object_id
     662  assert_not_same str, miss
    594663
    595664  a = []
     
    619688
    620689assert('String#to_f', '15.2.10.5.38') do
    621   a = ''.to_f
    622   b = '123456789'.to_f
    623   c = '12345.6789'.to_f
    624   d = '1e-2147483648'.to_f
    625   e = '1e2147483648'.to_f
    626 
    627   assert_float(0.0, a)
    628   assert_float(123456789.0, b)
    629   assert_float(12345.6789, c)
    630   assert_float(0, d)
    631   assert_float(Float::INFINITY, e)
    632 end
     690  assert_operator(0.0, :eql?, ''.to_f)
     691  assert_operator(123456789.0, :eql?, '123456789'.to_f)
     692  assert_operator(12345.6789, :eql?, '12345.6789'.to_f)
     693  assert_operator(0.0, :eql?, '1e-2147483648'.to_f)
     694  assert_operator(Float::INFINITY, :eql?, '1e2147483648'.to_f)
     695  assert_operator(0.0, :eql?, 'a'.to_f)
     696  assert_operator(4.0, :eql?, '4a5'.to_f)
     697  assert_operator(12.0, :eql?, '1_2__3'.to_f)
     698  assert_operator(123.0, :eql?, '1_2_3'.to_f)
     699  assert_operator(68.0, :eql?, '68_'.to_f)
     700  assert_operator(68.0, :eql?, '68._7'.to_f)
     701  assert_operator(68.7, :eql?, '68.7_'.to_f)
     702  assert_operator(68.7, :eql?, '68.7_ '.to_f)
     703  assert_operator(6.0, :eql?, '6 8.7'.to_f)
     704  assert_operator(68.0, :eql?, '68. 7'.to_f)
     705  assert_operator(0.0, :eql?, '_68'.to_f)
     706  assert_operator(0.0, :eql?, ' _68'.to_f)
     707  assert_operator(12.34, :eql?, '1_2.3_4'.to_f)
     708  assert_operator(12.3, :eql?, '1_2.3__4'.to_f)
     709  assert_operator(0.9, :eql?, '.9'.to_f)
     710  assert_operator(0.9, :eql?, "\t\r\n\f\v .9 \t\r\n\f\v".to_f)
     711end if Object.const_defined?(:Float)
    633712
    634713assert('String#to_i', '15.2.10.5.39') do
    635   a = ''.to_i
    636   b = '32143'.to_i
    637   c = 'a'.to_i(16)
    638   d = '100'.to_i(2)
    639   e = '1_000'.to_i
    640 
    641   assert_equal 0, a
    642   assert_equal 32143, b
    643   assert_equal 10, c
    644   assert_equal 4, d
    645   assert_equal 1_000, e
     714  assert_operator 0, :eql?, ''.to_i
     715  assert_operator 32143, :eql?, '32143'.to_i
     716  assert_operator 10, :eql?, 'a'.to_i(16)
     717  assert_operator 4, :eql?, '100'.to_i(2)
     718  assert_operator 1_000, :eql?, '1_000'.to_i
     719  assert_operator 0, :eql?, 'a'.to_i
     720  assert_operator 4, :eql?, '4a5'.to_i
     721  assert_operator 12, :eql?, '1_2__3'.to_i
     722  assert_operator 123, :eql?, '1_2_3'.to_i
     723  assert_operator 68, :eql?, '68_'.to_i
     724  assert_operator 68, :eql?, '68_ '.to_i
     725  assert_operator 0, :eql?, '_68'.to_i
     726  assert_operator 0, :eql?, ' _68'.to_i
     727  assert_operator 68, :eql?, "\t\r\n\f\v 68 \t\r\n\f\v".to_i
     728  assert_operator 6, :eql?, ' 6 8 '.to_i
    646729end
    647730
     
    680763
    681764assert('String#inspect', '15.2.10.5.46') do
     765  assert_equal "\"\\x00\"", "\0".inspect
     766  assert_equal "\"foo\"", "foo".inspect
     767  if UTF8STRING
     768    assert_equal '"る"', "る".inspect
     769  else
     770    assert_equal '"\xe3\x82\x8b"', "る".inspect
     771  end
     772
    682773  # should not raise an exception - regress #1210
    683774  assert_nothing_raised do
    684   ("\1" * 100).inspect
    685   end
    686 
    687   assert_equal "\"\\000\"", "\0".inspect
     775    ("\1" * 100).inspect
     776  end
    688777end
    689778
     
    693782  a = "A" * 32
    694783  assert_equal "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:", "#{a}:"
    695 end
    696 
    697 assert('Check the usage of a NUL character') do
    698   "qqq\0ppp"
    699784end
    700785
     
    724809  str.freeze
    725810
    726   assert_raise(RuntimeError) { str.upcase! }
    727 end
     811  assert_raise(FrozenError) { str.upcase! }
     812end
     813
     814assert('String literal concatenation') do
     815  assert_equal 2, ("A" "B").size
     816  assert_equal 3, ('A' "B" 'C').size
     817  assert_equal 4, (%(A) "B#{?C}" "D").size
     818end
     819
     820assert('String#getbyte') do
     821  str1 = "hello"
     822  bytes1 = [104, 101, 108, 108, 111]
     823  assert_equal bytes1[0], str1.getbyte(0)
     824  assert_equal bytes1[-1], str1.getbyte(-1)
     825  assert_equal bytes1[6], str1.getbyte(6)
     826
     827  str2 = "\xFF"
     828  bytes2 = [0xFF]
     829  assert_equal bytes2[0], str2.getbyte(0)
     830end
     831
     832assert('String#setbyte') do
     833  str1 = "hello"
     834  h = "H".getbyte(0)
     835  str1.setbyte(0, h)
     836  assert_equal(h, str1.getbyte(0))
     837  assert_equal("Hello", str1)
     838end
     839
     840assert('String#byteslice') do
     841  str1 = "hello"
     842  str2 = "\u3042ab"  # "\xE3\x81\x82ab"
     843
     844  assert_equal("h", str1.byteslice(0))
     845  assert_equal("e", str1.byteslice(1))
     846  assert_equal(nil, str1.byteslice(5))
     847  assert_equal("o", str1.byteslice(-1))
     848  assert_equal(nil, str1.byteslice(-6))
     849  assert_equal("\xE3", str2.byteslice(0))
     850  assert_equal("\x81", str2.byteslice(1))
     851  assert_equal(nil, str2.byteslice(5))
     852  assert_equal("b", str2.byteslice(-1))
     853  assert_equal(nil, str2.byteslice(-6))
     854
     855  assert_equal("", str1.byteslice(0, 0))
     856  assert_equal(str1, str1.byteslice(0, 6))
     857  assert_equal("el", str1.byteslice(1, 2))
     858  assert_equal("", str1.byteslice(5, 1))
     859  assert_equal("o", str1.byteslice(-1, 6))
     860  assert_equal(nil, str1.byteslice(-6, 1))
     861  assert_equal(nil, str1.byteslice(0, -1))
     862  assert_equal("", str2.byteslice(0, 0))
     863  assert_equal(str2, str2.byteslice(0, 6))
     864  assert_equal("\x81\x82", str2.byteslice(1, 2))
     865  assert_equal("", str2.byteslice(5, 1))
     866  assert_equal("b", str2.byteslice(-1, 6))
     867  assert_equal(nil, str2.byteslice(-6, 1))
     868  assert_equal(nil, str2.byteslice(0, -1))
     869
     870  assert_equal("ell", str1.byteslice(1..3))
     871  assert_equal("el", str1.byteslice(1...3))
     872  assert_equal("h", str1.byteslice(0..0))
     873  assert_equal("", str1.byteslice(5..0))
     874  assert_equal("o", str1.byteslice(4..5))
     875  assert_equal(nil, str1.byteslice(6..0))
     876  assert_equal("", str1.byteslice(-1..0))
     877  assert_equal("llo", str1.byteslice(-3..5))
     878  assert_equal("\x81\x82a", str2.byteslice(1..3))
     879  assert_equal("\x81\x82", str2.byteslice(1...3))
     880  assert_equal("\xE3", str2.byteslice(0..0))
     881  assert_equal("", str2.byteslice(5..0))
     882  assert_equal("b", str2.byteslice(4..5))
     883  assert_equal(nil, str2.byteslice(6..0))
     884  assert_equal("", str2.byteslice(-1..0))
     885  assert_equal("\x82ab", str2.byteslice(-3..5))
     886
     887  assert_raise(ArgumentError) { str1.byteslice }
     888  assert_raise(ArgumentError) { str1.byteslice(1, 2, 3) }
     889  assert_raise(TypeError) { str1.byteslice("1") }
     890  assert_raise(TypeError) { str1.byteslice("1", 2) }
     891  assert_raise(TypeError) { str1.byteslice(1, "2") }
     892  assert_raise(TypeError) { str1.byteslice(1..2, 3) }
     893
     894  skip unless Object.const_defined?(:Float)
     895  assert_equal("o", str1.byteslice(4.0))
     896  assert_equal("\x82ab", str2.byteslice(2.0, 3.0))
     897end
Note: See TracChangeset for help on using the changeset viewer.