Enclosed patch adds a number of tests for the 5-argument form of
 substr.

 Simon


--- t/op/string.t.old   Sat Apr  6 19:56:32 2002
+++ t/op/string.t       Sat Apr  6 20:38:59 2002
@@ -1,6 +1,6 @@
 #! perl -w

-use Parrot::Test tests => 64;
+use Parrot::Test tests => 76;

 output_is( <<'CODE', <<OUTPUT, "set_s_s|sc" );
        set     S4, "JAPH\n"
@@ -166,6 +166,199 @@
 length 21
 OUTPUT

+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, replacement = length" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, 4, 3, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcdxyzhijk
+xyz
+efg
+OUTPUT
+
+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, replacement > length" );
+  set S0, "abcdefghijk"
+  set S1, "xyz0123"
+  substr S2, S0, 4, 3, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcdxyz0123hijk
+xyz0123
+efg
+OUTPUT
+
+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, replacement < length" );
+  set S0, "abcdefghijk"
+  set S1, "x"
+  substr S2, S0, 4, 3, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcdxhijk
+x
+efg
+OUTPUT
+
+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, offset at end of string" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, 11, 3, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcdefghijkxyz
+xyz
+
+OUTPUT
+
+output_is( <<'CODE', 'Can only replace inside string or index after end of string', 
+"5 arg substr, offset past end of string" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, 12, 3, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+
+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, -ve offset, repl=length" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, -3, 3, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcdefghxyz
+xyz
+ijk
+OUTPUT
+
+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, -ve offset, repl>length" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, -6, 2, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcdexyzhijk
+xyz
+fg
+OUTPUT
+
+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, -ve offset, repl<length" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, -6, 4, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcdexyzjk
+xyz
+fghi
+OUTPUT
+
+output_is( <<'CODE', 'Can only replace inside string or index after end of string', 
+"5 arg substr, -ve offset out of string" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, -12, 4, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+
+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, length > strlen " );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, 3, 11, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcxyz
+xyz
+defghijk
+OUTPUT
+
+output_is( <<'CODE', <<'OUTPUT', "5 arg substr, length > strlen, -ve offset" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S2, S0, -3, 11, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  print S2
+  print "\n"
+  end
+CODE
+abcdefghxyz
+xyz
+ijk
+OUTPUT
+
+output_is( <<'CODE', <<'OUTPUT', "4-arg, replacement-only substr" );
+  set S0, "abcdefghijk"
+  set S1, "xyz"
+  substr S0, 3, 3, S1
+  print S0
+  print "\n"
+  print S1
+  print "\n"
+  end
+CODE
+abcxyzghijk
+xyz
+OUTPUT
+
 output_is( <<'CODE', '<><', "concat_s_s|sc, null onto null" );
  print "<>"
  concat S0, S0


Reply via email to