From 857cf00caf43d4c4e771ce2b83cc031e77166fb0 Mon Sep 17 00:00:00 2001 From: joe-conigliaro Date: Mon, 26 Aug 2019 21:18:58 +1000 Subject: [PATCH] builtin.string: make trim_left/right() behave correctly --- vlib/builtin/string.v | 16 +++++++++------- vlib/builtin/string_test.v | 6 ++++++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/vlib/builtin/string.v b/vlib/builtin/string.v index 1b31a822ec..82a37b08c5 100644 --- a/vlib/builtin/string.v +++ b/vlib/builtin/string.v @@ -608,22 +608,24 @@ pub fn (s string) trim(c byte) string { } pub fn (s string) trim_left(cutset string) string { - mut start := s.index(cutset) - if start != 0 { + if s.len == 0 || cutset.len == 0 { return s } - for start < s.len - 1 && s[start] == cutset[0] { - start++ + mut pos := 0 + cs_arr := cutset.bytes() + for s[pos] in cs_arr { + pos++ } - return s.right(start) + return s.right(pos) } pub fn (s string) trim_right(cutset string) string { - if s.len == 0 { + if s.len == 0 || cutset.len == 0 { return s } mut pos := s.len - 1 - for s[pos] == cutset[0] { + cs_arr := cutset.bytes() + for s[pos] in cs_arr { pos-- } return s.left(pos+1) diff --git a/vlib/builtin/string_test.v b/vlib/builtin/string_test.v index af17648dad..0bbe2c158f 100644 --- a/vlib/builtin/string_test.v +++ b/vlib/builtin/string_test.v @@ -307,6 +307,9 @@ fn test_trim_left() { assert s.trim_left(' ') == 'module main' s = ' module main' assert s.trim_left(' ') == 'module main' + // test cutset + s = 'banana' + assert s.trim_left('ba') == 'nana' } fn test_trim_right() { @@ -314,6 +317,9 @@ fn test_trim_right() { assert s.trim_right(' ') == 'module main' s = 'module main ' assert s.trim_right(' ') == 'module main' + // test cutset + s = 'banana' + assert s.trim_right('na') == 'b' } fn test_all_after() {