ReviewOS

also looking at this

zig-utils/zig-regex

Port to latest zig-master

#2
Closed armagidon-exception wants to merge main into main
53 files +1149 -1017
benchmarks/simple.zigmodified+19-21
Changes to benchmarks/simple.zig
@@ -1,8 +1,10 @@
11const std = ;
2const Clock = std.Io.Clock;
23const Regex = .Regex;
34
4pub fn main() !void {
5pub fn main(init: std.process.Init) !void {
56 var gpa = std.heap.GeneralPurposeAllocator(.{}){};
7 const io = init.io;
68 defer _ = gpa.deinit();
79 const allocator = gpa.allocator();
810
@@ -11,11 +13,10 @@ pub fn main() !void {
1113 // Test 1: Literal matching
1214 {
1315 std.debug.print("Test 1: Literal matching...\n", .{});
14 var regex = try Regex.compile(allocator, "hello");
16 var regex = try Regex.compile(allocator, io, "hello");
1517 defer regex.deinit();
1618
17 var timer = try std.time.Timer.start();
18 const start = timer.read();
19 const start = Clock.awake.now(io);
1920
2021 const iterations: usize = 10000;
2122 var i: usize = 0;
@@ -23,8 +24,8 @@ pub fn main() !void {
2324 _ = try regex.isMatch("hello world");
2425 }
2526
26 const elapsed = timer.read() - start;
27 const avg_ns = elapsed / iterations;
27 const elapsed = start.untilNow(io, .awake).toNanoseconds();
28 const avg_ns = @divExact(elapsed, iterations);
2829 std.debug.print(" {d} iterations in {d:.2}ms ({d:.2}µs/op)\n\n", .{
2930 iterations,
3031 @as(f64, @floatFromInt(elapsed)) / 1_000_000.0,
@@ -35,11 +36,10 @@ pub fn main() !void {
3536 // Test 2: Quantifiers
3637 {
3738 std.debug.print("Test 2: Quantifiers (a+)...\n", .{});
38 var regex = try Regex.compile(allocator, "a+");
39 var regex = try Regex.compile(allocator, init.io, "a+");
3940 defer regex.deinit();
4041
41 var timer = try std.time.Timer.start();
42 const start = timer.read();
42 const start = Clock.awake.now(init.io);
4343
4444 const iterations: usize = 10000;
4545 var i: usize = 0;
@@ -47,8 +47,8 @@ pub fn main() !void {
4747 _ = try regex.isMatch("aaaa");
4848 }
4949
50 const elapsed = timer.read() - start;
51 const avg_ns = elapsed / iterations;
50 const elapsed = start.untilNow(init.io, .awake).toNanoseconds();
51 const avg_ns = @divExact(elapsed, iterations);
5252 std.debug.print(" {d} iterations in {d:.2}ms ({d:.2}µs/op)\n\n", .{
5353 iterations,
5454 @as(f64, @floatFromInt(elapsed)) / 1_000_000.0,
@@ -59,11 +59,10 @@ pub fn main() !void {
5959 // Test 3: Character classes
6060 {
6161 std.debug.print("Test 3: Digit matching (\\d+)...\n", .{});
62 var regex = try Regex.compile(allocator, "\\d+");
62 var regex = try Regex.compile(allocator, init.io, "\\d+");
6363 defer regex.deinit();
6464
65 var timer = try std.time.Timer.start();
66 const start = timer.read();
65 const start = Clock.awake.now(init.io);
6766
6867 const iterations: usize = 10000;
6968 var i: usize = 0;
@@ -71,8 +70,8 @@ pub fn main() !void {
7170 _ = try regex.isMatch("12345");
7271 }
7372
74 const elapsed = timer.read() - start;
75 const avg_ns = elapsed / iterations;
73 const elapsed = start.untilNow(init.io, .awake).toNanoseconds();
74 const avg_ns = @divExact(elapsed, iterations);
7675 std.debug.print(" {d} iterations in {d:.2}ms ({d:.2}µs/op)\n\n", .{
7776 iterations,
7877 @as(f64, @floatFromInt(elapsed)) / 1_000_000.0,
@@ -83,11 +82,10 @@ pub fn main() !void {
8382 // Test 4: Case-insensitive
8483 {
8584 std.debug.print("Test 4: Case-insensitive matching...\n", .{});
86 var regex = try Regex.compileWithFlags(allocator, "hello", .{ .case_insensitive = true });
85 var regex = try Regex.compileWithFlags(allocator, init.io, "hello", .{ .case_insensitive = true });
8786 defer regex.deinit();
8887
89 var timer = try std.time.Timer.start();
90 const start = timer.read();
88 const start = Clock.awake.now(init.io);
9189
9290 const iterations: usize = 10000;
9391 var i: usize = 0;
@@ -95,8 +93,8 @@ pub fn main() !void {
9593 _ = try regex.isMatch("HELLO");
9694 }
9795
98 const elapsed = timer.read() - start;
99 const avg_ns = elapsed / iterations;
96 const elapsed = start.untilNow(init.io, .awake).toNanoseconds();
97 const avg_ns = @divExact(elapsed, iterations);
10098 std.debug.print(" {d} iterations in {d:.2}ms ({d:.2}µs/op)\n\n", .{
10199 iterations,
102100 @as(f64, @floatFromInt(elapsed)) / 1_000_000.0,