Skip to content

Commit 0d81e0b

Browse files
bug fix lastIndexOf'
1 parent 4292a8b commit 0d81e0b

File tree

2 files changed

+24
-11
lines changed

2 files changed

+24
-11
lines changed

src/Data/String/CodePoints.purs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -149,8 +149,8 @@ lastIndexOf p s = (\i -> length (String.take i s)) <$> String.lastIndexOf p s
149149

150150
lastIndexOf' :: String.Pattern -> Int -> String -> Maybe Int
151151
lastIndexOf' p i s =
152-
let s' = drop i s in
153-
(\k -> i + length (String.take k s')) <$> String.lastIndexOf p s'
152+
let i' = String.length (take i s) in
153+
(\k -> length (String.take k s)) <$> String.lastIndexOf' p i' s
154154

155155

156156
length :: String -> Int

test/Test/Data/String/CodePoints.purs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,30 @@ testStringCodePoints = do
101101
log "lastIndexOf'"
102102
assert $ lastIndexOf' (Pattern "") 0 "" == Just 0
103103
assert $ lastIndexOf' (Pattern str) 0 str == Just 0
104-
assert $ lastIndexOf' (Pattern str) 1 str == Nothing
104+
assert $ lastIndexOf' (Pattern str) 1 str == Just 0
105105
assert $ lastIndexOf' (Pattern "a") 0 str == Just 0
106-
assert $ lastIndexOf' (Pattern "a") 1 str == Nothing
107-
assert $ lastIndexOf' (Pattern "z") 0 str == Just 6
108-
assert $ lastIndexOf' (Pattern "z") 1 str == Just 6
109-
assert $ lastIndexOf' (Pattern "z") 2 str == Just 6
110-
assert $ lastIndexOf' (Pattern "z") 3 str == Just 6
111-
assert $ lastIndexOf' (Pattern "z") 4 str == Just 6
112-
assert $ lastIndexOf' (Pattern "z") 5 str == Just 6
106+
assert $ lastIndexOf' (Pattern "a") 7 str == Just 0
107+
assert $ lastIndexOf' (Pattern "z") 0 str == Nothing
108+
assert $ lastIndexOf' (Pattern "z") 1 str == Nothing
109+
assert $ lastIndexOf' (Pattern "z") 2 str == Nothing
110+
assert $ lastIndexOf' (Pattern "z") 3 str == Nothing
111+
assert $ lastIndexOf' (Pattern "z") 4 str == Nothing
112+
assert $ lastIndexOf' (Pattern "z") 5 str == Nothing
113113
assert $ lastIndexOf' (Pattern "z") 6 str == Just 6
114-
assert $ lastIndexOf' (Pattern "z") 7 str == Nothing
114+
assert $ lastIndexOf' (Pattern "z") 7 str == Just 6
115+
assert $ lastIndexOf' (Pattern "\xD800") 7 str == Just 3
116+
assert $ lastIndexOf' (Pattern "\xD800") 6 str == Just 3
117+
assert $ lastIndexOf' (Pattern "\xD800") 5 str == Just 3
118+
assert $ lastIndexOf' (Pattern "\xD800") 4 str == Just 3
119+
assert $ lastIndexOf' (Pattern "\xD800") 3 str == Just 3
120+
assert $ lastIndexOf' (Pattern "\xD800") 2 str == Just 2
121+
assert $ lastIndexOf' (Pattern "\xD800") 1 str == Nothing
122+
assert $ lastIndexOf' (Pattern "\xD800") 0 str == Nothing
123+
assert $ lastIndexOf' (Pattern "\x16A06") 7 str == Just 5
124+
assert $ lastIndexOf' (Pattern "\x16A06") 6 str == Just 5
125+
assert $ lastIndexOf' (Pattern "\x16A06") 5 str == Just 5
126+
assert $ lastIndexOf' (Pattern "\x16A06") 4 str == Nothing
127+
assert $ lastIndexOf' (Pattern "\x16A06") 3 str == Nothing
115128

116129
log "length"
117130
assert $ length "" == 0

0 commit comments

Comments
 (0)