bytes: fix last_index_byte off-by-one

This commit is contained in:
laytan
2024-09-05 13:30:46 +02:00
parent ddf5ca7adf
commit a99e57c62c
2 changed files with 11 additions and 5 deletions

View File

@@ -476,11 +476,9 @@ last_index_byte :: proc(s: []byte, c: byte) -> int #no_bounds_check {
// worth vectorizing assuming there is a hardware vector unit, and
// the data size is large enough.
if i < SIMD_REG_SIZE_128 {
if i > 0 { // Handle s == nil.
for /**/; i >= 0; i -= 1 {
if s[i] == c {
return i
}
#reverse for ch, j in s {
if ch == c {
return j
}
}
return -1

View File

@@ -87,3 +87,11 @@ test_index_byte_zero :: proc(t: ^testing.T) {
}
}
}
@test
test_last_index_byte_bounds :: proc(t: ^testing.T) {
input := "helloworld.odin."
assert(len(input) == 16)
idx := bytes.last_index_byte(transmute([]byte)(input[:len(input)-1]), '.')
testing.expect_value(t, idx, 10)
}