        }
      end
    end
-@@ -782,7 +791,7 @@ def test_str_crypt_nonstrict
+@@ -782,7 +802,7 @@ def test_str_crypt_nonstrict
    end
  
    def test_str_delete
 -    combination(STRINGS, STRINGS) {|s1, s2|
-+    strings_strings {|s1, s2|
++    strings_2 {|s1, s2|
        if s1.empty?
          assert_equal(s1, s1.delete(s2))
          next
-@@ -832,7 +841,7 @@ def test_str_dump
+@@ -832,7 +852,7 @@ def test_str_dump
    end
  
    def test_str_each_line
 -    combination(STRINGS, STRINGS) {|s1, s2|
-+    strings_strings {|s1, s2|
++    strings_2 {|s1, s2|
        if !s1.ascii_only? && !s2.ascii_only? && s1.encoding != s2.encoding
          assert_raise(Encoding::CompatibilityError) { s1.each_line(s2) {} }
          next
-@@ -880,7 +889,7 @@ def test_str_hex
+@@ -880,7 +900,7 @@ def test_str_hex
    end
  
    def test_str_include?
 -    combination(STRINGS, STRINGS) {|s1, s2|
-+    strings_strings {|s1, s2|
++    strings_2 {|s1, s2|
        if !s1.ascii_only? && !s2.ascii_only? && s1.encoding != s2.encoding
          assert_raise(Encoding::CompatibilityError) { s1.include?(s2) }
          assert_raise(Encoding::CompatibilityError) { s1.index(s2) }
-@@ -1049,7 +1058,7 @@ def test_str_oct
+@@ -1049,7 +1069,7 @@ def test_str_oct
    end
  
    def test_str_replace
 -    combination(STRINGS, STRINGS) {|s1, s2|
-+    strings_strings {|s1, s2|
++    strings_2 {|s1, s2|
        t = s1.dup
        t.replace s2
        assert_equal(s2, t)
-@@ -1070,7 +1079,7 @@ def test_str_reverse
+@@ -1070,7 +1090,7 @@ def test_str_reverse
    end
  
    def test_str_scan
 -    combination(STRINGS, STRINGS) {|s1, s2|
-+    strings_strings {|s1, s2|
++    strings_2 {|s1, s2|
        desc = proc {"#{s1.dump}.scan(#{s2.dump})"}
        if !s2.valid_encoding?
          assert_raise(RegexpError, desc) { s1.scan(s2) }
-@@ -1137,7 +1146,7 @@ def test_str_slice!
+@@ -1137,7 +1157,7 @@ def test_str_slice!
    end
  
    def test_str_split
 -    combination(STRINGS, STRINGS) {|s1, s2|
-+    strings_strings {|s1, s2|
++    strings_2 {|s1, s2|
        if !s2.valid_encoding?
          assert_raise(ArgumentError, RegexpError) { s1.split(s2) }
          next
-@@ -1165,7 +1174,7 @@ def test_str_split
+@@ -1165,7 +1185,7 @@ def test_str_split
    end
  
    def test_str_squeeze
 -    combination(STRINGS, STRINGS) {|s1, s2|
-+    strings_strings {|s1, s2|
++    strings_2 {|s1, s2|
        if !s1.valid_encoding? || !s2.valid_encoding?
          assert_raise(ArgumentError, Encoding::CompatibilityError, "#{encdump s1}.squeeze(#{encdump s2})") { s1.squeeze(s2) }
          next
-@@ -1283,16 +1292,16 @@ def test_tr
+@@ -1254,7 +1274,7 @@ def test_str_to_s
+   end
+ 
+   def test_tr
+-    combination(STRINGS, STRINGS, STRINGS) {|s1, s2, s3|
++    strings_3 {|s1, s2, s3|
+       desc = "#{encdump s1}.tr(#{encdump s2}, #{encdump s3})"
+       if s1.empty?
+         assert_equal(s1, s1.tr(s2, s3), desc)
+@@ -1283,21 +1303,21 @@ def test_tr
    end
  
    def test_tr_sjis

       first.upto(last-1) {|i|
         c = s[i]
         t2 << c if c
@@ -411,7 +415,7 @@ def test_str_aref_range3
   end
 
   def test_str_assign
-    combination(STRINGS, STRINGS) {|s1, s2|
+    strings_strings {|s1, s2|
       (-2).upto(2) {|i|
         t = s1.dup
         if s1.ascii_only? || s2.ascii_only? || s1.encoding == s2.encoding
@@ -554,7 +558,7 @@ def test_str_assign_range3
   end
 
   def test_str_cmp
-    combination(STRINGS, STRINGS) {|s1, s2|
+    strings_strings {|s1, s2|
       desc = "#{encdump s1} <=> #{encdump s2}"
       r = s1 <=> s2
       if s1 == s2
@@ -585,7 +589,7 @@ def test_str_capitalize
   end
 
   def test_str_casecmp
-    combination(STRINGS, STRINGS) {|s1, s2|
+    strings_strings {|s1, s2|
       #puts "#{encdump(s1)}.casecmp(#{encdump(s2)})"
       next unless s1.valid_encoding? && s2.valid_encoding? && Encoding.compatible?(s1, s2)
       r = s1.casecmp(s2)
@@ -657,7 +661,7 @@ def test_str_rjust
   end
 
   def test_str_chomp
-    combination(STRINGS, STRINGS) {|s1, s2|
+    strings_strings {|s1, s2|
       if !s1.ascii_only? && !s2.ascii_only? && !Encoding.compatible?(s1,s2)
         if s1.bytesize > s2.bytesize
           assert_raise(Encoding::CompatibilityError, "#{encdump(s1)}.chomp(#{encdump(s2)})") do
@@ -677,13 +681,20 @@ def test_str_chomp
 
   def test_str_smart_chomp
     bug10893 = '[ruby-core:68258] [Bug #10893]'

       first.upto(last) {|i|
         c = s[i]
         t2 << c if c
@@ -401,7 +416,7 @@ def test_str_aref_range3
         last += s.length
       end
       assert_predicate(t, :valid_encoding?) if s.valid_encoding?
