Changeset 439 for EcnlProtoTool/trunk/mruby-2.1.1/test/t/string.rb
- Timestamp:
- Jul 9, 2020, 8:51:43 AM (4 years ago)
- 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 3 3 # String ISO Test 4 4 5 UTF8STRING = ("\343\201\202".size == 1)5 UTF8STRING = __ENCODING__ == "UTF-8" 6 6 7 7 assert('String', '15.2.10') do … … 21 21 assert_equal(-1, d) 22 22 assert_equal 1, e 23 assert_nil 'a' <=> 1024 23 24 end 24 25 … … 37 38 assert_equal 'aaaaa', 'a' * 5 38 39 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 } 42 49 end 43 50 44 51 assert('String#[]', '15.2.10.5.6') do 45 52 # 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) 51 58 52 59 # 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] 61 65 62 66 # 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] } 82 71 end 83 72 … … 155 144 end 156 145 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' } 161 154 162 155 # length of args is 2 … … 196 189 b3['XX'] = 'Y' 197 190 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 } 195 end 196 197 assert('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 245 end if UTF8STRING 199 246 200 247 assert('String#capitalize', '15.2.10.5.7') do … … 252 299 end 253 300 254 assert('String#chomp! uses the correct length') do255 class A256 def to_str257 $s.replace("AA")258 "A"259 end260 end261 262 $s = "AAA"263 $s.chomp!(A.new)264 assert_equal $s, "A"265 end266 267 301 assert('String#chop', '15.2.10.5.11') do 268 302 a = ''.chop … … 367 401 assert_equal('aBcaBc', 'abcabc'.gsub('b'){|w| w.capitalize }, 'gsub with block') 368 402 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') 370 404 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') 372 406 assert_equal('A', 'a'.gsub('a', 'A')) 373 407 assert_equal('A', 'a'.gsub('a'){|w| w.capitalize }) … … 418 452 assert_equal 5, "hello".index("", 5) 419 453 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) } 457 end 458 459 assert('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('⓿') 469 end if UTF8STRING 421 470 422 471 assert('String#initialize', '15.2.10.5.23') do … … 476 525 477 526 assert('String#reverse(UTF-8)', '15.2.10.5.29') do 478 a ssert_equal "ち", "こんにちは世界"[3]479 a ssert_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 484 533 end if UTF8STRING 485 534 … … 498 547 assert_equal '!界世はちにんこ', a 499 548 assert_equal '!界世はちにんこ', 'こんにちは世界!'.reverse! 549 550 b = 'あ' 551 b.reverse! 552 assert_equal 'あ', b 500 553 end if UTF8STRING 501 554 502 555 assert('String#rindex', '15.2.10.5.31') do 503 556 assert_equal 0, 'abc'.rindex('a') 557 assert_equal 0, 'abc'.rindex('a', 3) 558 assert_nil 'abc'.rindex('a', -4) 504 559 assert_nil 'abc'.rindex('d') 560 assert_equal 6, 'abcabc'.rindex('') 561 assert_equal 3, 'abcabc'.rindex('a') 505 562 assert_equal 0, 'abcabc'.rindex('a', 1) 506 563 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) } 507 567 end 508 568 509 569 assert('String#rindex(UTF-8)', '15.2.10.5.31') do 510 570 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) 582 end if UTF8STRING 583 584 # assert('String#scan', '15.2.10.5.32') do 585 # # Not implemented yet 586 # end 518 587 519 588 assert('String#size', '15.2.10.5.33') do … … 591 660 miss = str.sub("X", "Z") 592 661 assert_equal str, miss 593 assert_not_ equal str.object_id, miss.object_id662 assert_not_same str, miss 594 663 595 664 a = [] … … 619 688 620 689 assert('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) 711 end if Object.const_defined?(:Float) 633 712 634 713 assert('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 646 729 end 647 730 … … 680 763 681 764 assert('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 682 773 # should not raise an exception - regress #1210 683 774 assert_nothing_raised do 684 ("\1" * 100).inspect 685 end 686 687 assert_equal "\"\\000\"", "\0".inspect 775 ("\1" * 100).inspect 776 end 688 777 end 689 778 … … 693 782 a = "A" * 32 694 783 assert_equal "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:", "#{a}:" 695 end696 697 assert('Check the usage of a NUL character') do698 "qqq\0ppp"699 784 end 700 785 … … 724 809 str.freeze 725 810 726 assert_raise(RuntimeError) { str.upcase! } 727 end 811 assert_raise(FrozenError) { str.upcase! } 812 end 813 814 assert('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 818 end 819 820 assert('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) 830 end 831 832 assert('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) 838 end 839 840 assert('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)) 897 end
Note:
See TracChangeset
for help on using the changeset viewer.