Skip to content

Instantly share code, notes, and snippets.

@karlseguin
Last active October 8, 2023 15:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save karlseguin/6525ac8e924717577120ddf1789dc447 to your computer and use it in GitHub Desktop.
Save karlseguin/6525ac8e924717577120ddf1789dc447 to your computer and use it in GitHub Desktop.
zig std.indexOf benchmark
const std = @import("std");
const ITERATIONS = 1_000_000;
pub fn main() !void {
benchmark("needle.len == 1, haystack.len == 11 ", "hello world", "w", 6);
benchmark("needle.len == 1, haystack.len == 3091", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sit amet erat elit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris cursus quis eros quis vestibulum. Vestibulum in convallis nulla. Nulla mauris velit, tempus id varius sit amet, sodales et magna. Aenean vel augue vitae erat luctus maximus. Nam dignissim diam felis, id fermentum neque dapibus quis. Quisque volutpat ac nibh a blandit. Aenean id felis aliquam, aliquet lorem vel, lobortis ligula. Morbi lacinia risus ac dictum accumsan. Maecenas dapibus elit in magna porta tempus. Proin luctus neque sed erat sagittis gravida. Praesent at lacinia libero.Curabitur sagittis risus ut suscipit cursus. Maecenas at gravida turpis, id malesuada felis. Praesent velit dui, pulvinar eget vehicula sed, semper sit amet felis. Nulla mollis velit nec ligula commodo, ut bibendum elit finibus. Ut tempus ex sagittis enim scelerisque porta. Nam consectetur nulla eu odio pharetra, dictum hendrerit tortor maximus. Integer nec erat at risus volutpat laoreet. Nam ut augue dictum, pretium sem at, pulvinar tellus. Nulla scelerisque ligula eros, sed consequat ipsum pretium at. Phasellus ut hendrerit mi. Nam sapien lectus, feugiat ut nunc at, gravida consectetur lectus. Nam id nisi quis nibh molestie iaculis eget vestibulum velit.Phasellus iaculis justo sed erat aliquam fringilla. Etiam malesuada imperdiet leo. Praesent rutrum aliquet dignissim. Donec congue dignissim enim, id luctus justo eleifend vitae. Phasellus luctus aliquet lacinia. In at molestie urna. Proin ornare orci dictum enim egestas consequat. Cras lacinia vel lectus et consequat. Etiam cursus libero at arcu posuere, accumsan sodales leo faucibus. Etiam dictum sit amet est et consequat. Vivamus egestas tincidunt eros eu lobortis. Vestibulum eu convallis nisi. Maecenas vel placerat tellus. Curabitur id ex rhoncus, dictum tellus eu, condimentum est. Sed molestie nibh id lacus aliquet, eget fringilla ligula laoreet. Vivamus scelerisque arcu sit amet posuere sodales.Quisque sit amet erat efficitur magna posuere congue. Nulla nec nisi eget nulla lobortis efficitur eu sit amet lorem. Nulla pellentesque eleifend dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In placerat, dui eget sollicitudin porta, dolor sapien faucibus sapien, cursus suscipit tortor neque sit amet elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed ultricies tempus arcu et feugiat. Ut in mauris mi. Integer cursus odio at urna dictum malesuada.In sed tellus ac dolor scelerisque semper a eu mi. Maecenas euismod tortor consequat odio elementum volutpat. Praesent luctus nisl libero, eget tincidunt est laoreet a. Vivamus a congue tortor, sed euismod est. Suspendisse auctor sem orci, a ultrices sapien rutrum a. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eleifend commodo eros id dapibus. Sed risus magna, feugiat semper enim id, ultrices pharetra nunc. Donec commodo mi lorem, in consectetur enim egestas sit amet!", "!", 3090);
std.debug.print("\n", .{});
benchmark("needle.len == 2, haystack.len == 11 ", "hello world", "or", 7);
benchmark("needle.len == 2, haystack.len == 3091", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sit amet erat elit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris cursus quis eros quis vestibulum. Vestibulum in convallis nulla. Nulla mauris velit, tempus id varius sit amet, sodales et magna. Aenean vel augue vitae erat luctus maximus. Nam dignissim diam felis, id fermentum neque dapibus quis. Quisque volutpat ac nibh a blandit. Aenean id felis aliquam, aliquet lorem vel, lobortis ligula. Morbi lacinia risus ac dictum accumsan. Maecenas dapibus elit in magna porta tempus. Proin luctus neque sed erat sagittis gravida. Praesent at lacinia libero.Curabitur sagittis risus ut suscipit cursus. Maecenas at gravida turpis, id malesuada felis. Praesent velit dui, pulvinar eget vehicula sed, semper sit amet felis. Nulla mollis velit nec ligula commodo, ut bibendum elit finibus. Ut tempus ex sagittis enim scelerisque porta. Nam consectetur nulla eu odio pharetra, dictum hendrerit tortor maximus. Integer nec erat at risus volutpat laoreet. Nam ut augue dictum, pretium sem at, pulvinar tellus. Nulla scelerisque ligula eros, sed consequat ipsum pretium at. Phasellus ut hendrerit mi. Nam sapien lectus, feugiat ut nunc at, gravida consectetur lectus. Nam id nisi quis nibh molestie iaculis eget vestibulum velit.Phasellus iaculis justo sed erat aliquam fringilla. Etiam malesuada imperdiet leo. Praesent rutrum aliquet dignissim. Donec congue dignissim enim, id luctus justo eleifend vitae. Phasellus luctus aliquet lacinia. In at molestie urna. Proin ornare orci dictum enim egestas consequat. Cras lacinia vel lectus et consequat. Etiam cursus libero at arcu posuere, accumsan sodales leo faucibus. Etiam dictum sit amet est et consequat. Vivamus egestas tincidunt eros eu lobortis. Vestibulum eu convallis nisi. Maecenas vel placerat tellus. Curabitur id ex rhoncus, dictum tellus eu, condimentum est. Sed molestie nibh id lacus aliquet, eget fringilla ligula laoreet. Vivamus scelerisque arcu sit amet posuere sodales.Quisque sit amet erat efficitur magna posuere congue. Nulla nec nisi eget nulla lobortis efficitur eu sit amet lorem. Nulla pellentesque eleifend dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In placerat, dui eget sollicitudin porta, dolor sapien faucibus sapien, cursus suscipit tortor neque sit amet elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed ultricies tempus arcu et feugiat. Ut in mauris mi. Integer cursus odio at urna dictum malesuada.In sed tellus ac dolor scelerisque semper a eu mi. Maecenas euismod tortor consequat odio elementum volutpat. Praesent luctus nisl libero, eget tincidunt est laoreet a. Vivamus a congue tortor, sed euismod est. Suspendisse auctor sem orci, a ultrices sapien rutrum a. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eleifend commodo eros id dapibus. Sed risus magna, feugiat semper enim id, ultrices pharetra nunc. Donec commodo mi lorem, in consectetur enim egestas sit amet!", "t!", 3089);
std.debug.print("\n", .{});
benchmark("needle.len == 5, haystack.len == 11 ", "hello world", " worl", 5);
benchmark("needle.len == 5, haystack.len == 3091", "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris sit amet erat elit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris cursus quis eros quis vestibulum. Vestibulum in convallis nulla. Nulla mauris velit, tempus id varius sit amet, sodales et magna. Aenean vel augue vitae erat luctus maximus. Nam dignissim diam felis, id fermentum neque dapibus quis. Quisque volutpat ac nibh a blandit. Aenean id felis aliquam, aliquet lorem vel, lobortis ligula. Morbi lacinia risus ac dictum accumsan. Maecenas dapibus elit in magna porta tempus. Proin luctus neque sed erat sagittis gravida. Praesent at lacinia libero.Curabitur sagittis risus ut suscipit cursus. Maecenas at gravida turpis, id malesuada felis. Praesent velit dui, pulvinar eget vehicula sed, semper sit amet felis. Nulla mollis velit nec ligula commodo, ut bibendum elit finibus. Ut tempus ex sagittis enim scelerisque porta. Nam consectetur nulla eu odio pharetra, dictum hendrerit tortor maximus. Integer nec erat at risus volutpat laoreet. Nam ut augue dictum, pretium sem at, pulvinar tellus. Nulla scelerisque ligula eros, sed consequat ipsum pretium at. Phasellus ut hendrerit mi. Nam sapien lectus, feugiat ut nunc at, gravida consectetur lectus. Nam id nisi quis nibh molestie iaculis eget vestibulum velit.Phasellus iaculis justo sed erat aliquam fringilla. Etiam malesuada imperdiet leo. Praesent rutrum aliquet dignissim. Donec congue dignissim enim, id luctus justo eleifend vitae. Phasellus luctus aliquet lacinia. In at molestie urna. Proin ornare orci dictum enim egestas consequat. Cras lacinia vel lectus et consequat. Etiam cursus libero at arcu posuere, accumsan sodales leo faucibus. Etiam dictum sit amet est et consequat. Vivamus egestas tincidunt eros eu lobortis. Vestibulum eu convallis nisi. Maecenas vel placerat tellus. Curabitur id ex rhoncus, dictum tellus eu, condimentum est. Sed molestie nibh id lacus aliquet, eget fringilla ligula laoreet. Vivamus scelerisque arcu sit amet posuere sodales.Quisque sit amet erat efficitur magna posuere congue. Nulla nec nisi eget nulla lobortis efficitur eu sit amet lorem. Nulla pellentesque eleifend dictum. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In placerat, dui eget sollicitudin porta, dolor sapien faucibus sapien, cursus suscipit tortor neque sit amet elit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed ultricies tempus arcu et feugiat. Ut in mauris mi. Integer cursus odio at urna dictum malesuada.In sed tellus ac dolor scelerisque semper a eu mi. Maecenas euismod tortor consequat odio elementum volutpat. Praesent luctus nisl libero, eget tincidunt est laoreet a. Vivamus a congue tortor, sed euismod est. Suspendisse auctor sem orci, a ultrices sapien rutrum a. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur eleifend commodo eros id dapibus. Sed risus magna, feugiat semper enim id, ultrices pharetra nunc. Donec commodo mi lorem, in consectetur enim egestas sit amet!", "amet!", 3086);
}
fn benchmark(desc: []const u8, input: []const u8, needle: []const u8, expected: ?usize) void {
var timer = std.time.Timer.start() catch unreachable;
for (0..ITERATIONS) |_| {
if (std.mem.indexOf(u8, input, needle) != expected) {
@panic("fail");
}
}
std.debug.print("{s}: {d}ns per iteration\n", .{desc, timer.lap() / ITERATIONS});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment