Returns self for String#bytesplice

This commit is contained in:
dearblue
2023-04-15 21:25:56 +09:00
parent 68c58eac91
commit 2e9ac8f448
2 changed files with 14 additions and 26 deletions
+2 -2
View File
@@ -2956,7 +2956,7 @@ str_bytesplice(mrb_state *mrb, mrb_value str, mrb_int idx1, mrb_int len1, mrb_va
if (RSTRING_LEN(replace) <= idx2+len2) {
len2 = RSTRING_LEN(replace) - idx2;
}
if (len2 == 0) return replace;
if (len2 == 0) return str;
mrb_str_modify(mrb, s);
if (len1 >= len2) {
memmove(RSTR_PTR(s)+idx1, RSTRING_PTR(replace)+idx2, len2);
@@ -2971,7 +2971,7 @@ str_bytesplice(mrb_state *mrb, mrb_value str, mrb_int idx1, mrb_int len1, mrb_va
memmove(RSTR_PTR(s)+idx1+len2, RSTR_PTR(s)+idx1+len1, slen-(idx1+len1));
memmove(RSTR_PTR(s)+idx1, RSTRING_PTR(replace)+idx2, len2);
}
return replace;
return str;
}
/*
+12 -24
View File
@@ -902,62 +902,50 @@ end
assert('String#bytesplice') do
# range, replace (len1=len2)
a = "0123456789"
assert_equal "ab", a.bytesplice(1..2, "ab")
assert_equal "0ab3456789", a
assert_equal "0ab3456789", a.bytesplice(1..2, "ab")
# range, replace (len1>len2)
a = "0123456789"
assert_equal "ab", a.bytesplice(1..3, "ab")
assert_equal "0ab456789", a
assert_equal "0ab456789", a.bytesplice(1..3, "ab")
# range, replace (len1<len2)
a = "0123456789"
assert_equal "ab", a.bytesplice(1..1, "ab")
assert_equal "0ab23456789", a
assert_equal "0ab23456789", a.bytesplice(1..1, "ab")
# idx, len, replace (len1=len2)
a = "0123456789"
assert_equal "ab", a.bytesplice(1, 2, "ab")
assert_equal "0ab3456789", a
assert_equal "0ab3456789", a.bytesplice(1, 2, "ab")
# idx, len, replace (len1>len2)
a = "0123456789"
assert_equal "ab", a.bytesplice(1, 3, "ab")
assert_equal "0ab456789", a
assert_equal "0ab456789", a.bytesplice(1, 3, "ab")
# idx, len, replace (len1<len2)
a = "0123456789"
assert_equal "ab", a.bytesplice(1, 1, "ab")
assert_equal "0ab23456789", a
assert_equal "0ab23456789", a.bytesplice(1, 1, "ab")
b = "abcdefg"
# range, replace, range (len1=len2)
a = "0123456789"
assert_equal b, a.bytesplice(1..2, b, 0..1)
assert_equal "0ab3456789", a
assert_equal "0ab3456789", a.bytesplice(1..2, b, 0..1)
# range, replace, range (len1>len2)
a = "0123456789"
assert_equal b, a.bytesplice(1..3, b, 1..2)
assert_equal "0bc456789", a
assert_equal "0bc456789", a.bytesplice(1..3, b, 1..2)
# range, replace, range (len1<len2)
a = "0123456789"
assert_equal b, a.bytesplice(1..1, b, 2..3)
assert_equal "0cd23456789", a
assert_equal "0cd23456789", a.bytesplice(1..1, b, 2..3)
# idx, len, replace, idx, len (len1=len2)
a = "0123456789"
assert_equal b, a.bytesplice(1, 2, b, 0, 2)
assert_equal "0ab3456789", a
assert_equal "0ab3456789", a.bytesplice(1, 2, b, 0, 2)
# idx, len, replace, idx, len (len1>len2)
a = "0123456789"
assert_equal b, a.bytesplice(1, 3, b, 1, 2)
assert_equal "0bc456789", a
assert_equal "0bc456789", a.bytesplice(1, 3, b, 1, 2)
# idx, len, replace, idx, len (len1<len2)
a = "0123456789"
assert_equal b, a.bytesplice(1, 1, b, 2, 2)
assert_equal "0cd23456789", a
assert_equal "0cd23456789", a.bytesplice(1, 1, b, 2, 2)
end