summaryrefslogtreecommitdiff
path: root/bench/src/zg_caseless.zig
diff options
context:
space:
mode:
Diffstat (limited to 'bench/src/zg_caseless.zig')
-rw-r--r--bench/src/zg_caseless.zig60
1 files changed, 60 insertions, 0 deletions
diff --git a/bench/src/zg_caseless.zig b/bench/src/zg_caseless.zig
new file mode 100644
index 0000000..410a62b
--- /dev/null
+++ b/bench/src/zg_caseless.zig
@@ -0,0 +1,60 @@
1const std = @import("std");
2
3const CaseFold = @import("CaseFold");
4const Normalize = @import("Normalize");
5
6pub fn main() !void {
7 var args_iter = std.process.args();
8 _ = args_iter.skip();
9 const in_path = args_iter.next() orelse return error.MissingArg;
10
11 var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
12 defer arena.deinit();
13 const allocator = arena.allocator();
14
15 const input = try std.fs.cwd().readFileAlloc(
16 allocator,
17 in_path,
18 std.math.maxInt(u32),
19 );
20 defer allocator.free(input);
21
22 const fold_data = try CaseFold.FoldData.init(allocator);
23 var case_fold = CaseFold{ .fold_data = &fold_data };
24 const norm_data = try Normalize.NormData.init(allocator);
25 var normalize = Normalize{ .norm_data = &norm_data };
26
27 var iter = std.mem.splitScalar(u8, input, '\n');
28 var result: usize = 0;
29 var buf: [256]u8 = [_]u8{'z'} ** 256;
30 var prev_line: []const u8 = buf[0..1];
31 var timer = try std.time.Timer.start();
32
33 while (iter.next()) |line| {
34 if (try case_fold.compatCaselessMatch(
35 allocator,
36 &normalize,
37 prev_line,
38 line,
39 )) result += 1;
40 @memcpy(buf[0..line.len], line);
41 prev_line = buf[0..line.len];
42 }
43 std.debug.print("zg CaseFold.compatCaselessMatch: result: {}, took: {}\n", .{ result, timer.lap() / std.time.ns_per_ms });
44
45 result = 0;
46 iter.reset();
47 timer.reset();
48
49 while (iter.next()) |line| {
50 if (try case_fold.canonCaselessMatch(
51 allocator,
52 &normalize,
53 prev_line,
54 line,
55 )) result += 1;
56 @memcpy(buf[0..line.len], line);
57 prev_line = buf[0..line.len];
58 }
59 std.debug.print("zg CaseFold.canonCaselessMatch: result: {}, took: {}\n", .{ result, timer.lap() / std.time.ns_per_ms });
60}