diff --git a/core/strings/strings.odin b/core/strings/strings.odin index d40b81b3d..d55fea69e 100644 --- a/core/strings/strings.odin +++ b/core/strings/strings.odin @@ -3420,7 +3420,9 @@ internal_substring :: proc(s: string, rune_start: int, rune_end: int) -> (sub: s } rune_i += 1 } - if !ok { return } + if !ok { + sub = sub[rune_i:] + } } if rune_end >= rune_start { diff --git a/tests/core/strings/test_core_strings.odin b/tests/core/strings/test_core_strings.odin index 140689468..a7502ab92 100644 --- a/tests/core/strings/test_core_strings.odin +++ b/tests/core/strings/test_core_strings.odin @@ -164,11 +164,16 @@ test_substring :: proc(t: ^testing.T) { {s = "Hello", end = len("Hello"), sub = "Hello", ok = true}, {s = "Hello", start = 1, end = len("Hello"), sub = "ello", ok = true}, {s = "Hello", start = 1, end = len("Hello") - 1, sub = "ell", ok = true}, + {s = "Hello", start = 0, end = 0, sub = "", ok = true}, + {s = "Hello", start = 3, end = 3, sub = "", ok = true}, + {s = "Hello", start = len("Hello"), end = len("Hello"), sub = "", ok = true}, {s = "Hello", end = len("Hello") + 1, sub = "Hello", ok = false}, {s = "小猫咪", start = 0, end = 3, sub = "小猫咪", ok = true}, {s = "小猫咪", start = 1, end = 3, sub = "猫咪", ok = true}, {s = "小猫咪", start = 1, end = 5, sub = "猫咪", ok = false}, {s = "小猫咪", start = 1, end = 1, sub = "", ok = true}, + {s = "小猫咪", start = 1, end = 1, sub = "", ok = true}, + {s = "小猫咪", start = 3, end = 3, sub = "", ok = true}, } for tc in cases {