diff --git a/src/stdune/string.ml b/src/stdune/string.ml index e4b6b6cf..352b5095 100644 --- a/src/stdune/string.ml +++ b/src/stdune/string.ml @@ -249,11 +249,7 @@ let drop s n = let split_n s n = let len = length s in - if n > len then - Exn.code_error "String.split_n" - [ "s", Sexp.Atom s - ; "n", Sexp.Atom (string_of_int n) - ]; + let n = min n len in ( sub s ~pos:0 ~len:n , sub s ~pos:n ~len:(len - n) ) diff --git a/test/unit-tests/string.mlt b/test/unit-tests/string.mlt index de13a06a..1960dea9 100644 --- a/test/unit-tests/string.mlt +++ b/test/unit-tests/string.mlt @@ -57,11 +57,7 @@ String.split_n "foobar" 3;; String.split_n "foobar" 10;; [%%expect{| -Exception: -Code_error - (List - [Atom "String.split_n"; List [Atom "s"; Atom "foobar"]; - List [Atom "n"; Atom "10"]]). +- : string * string = ("foobar", "") |}] String.split_n "foobar" 0;; @@ -81,9 +77,5 @@ String.split_n "" 0;; String.split_n "" 10;; [%%expect{| -Exception: -Code_error - (List - [Atom "String.split_n"; List [Atom "s"; Atom ""]; - List [Atom "n"; Atom "10"]]). +- : string * string = ("", "") |}]