package benchmark_bytes import "core:bytes" import "core:fmt" import "core:log" import "core:testing" import "core:time" // These are the normal, unoptimized algorithms. plain_index_byte :: proc(s: []u8, c: byte) -> (res: int) #no_bounds_check { for i := 0; i < len(s); i += 1 { if s[i] == c { return i } } return -1 } plain_last_index_byte :: proc(s: []u8, c: byte) -> (res: int) #no_bounds_check { for i := len(s)-1; i >= 0; i -= 1 { if s[i] == c { return i } } return -1 } sizes := [?]int { 15, 16, 17, 31, 32, 33, 256, 512, 1024, 1024 * 1024, 1024 * 1024 * 1024, } run_trial_size :: proc(p: proc([]u8, byte) -> int, size: int, idx: int, warmup: int, runs: int) -> (timing: time.Duration) { data := make([]u8, size) defer delete(data) for i in 0..