2025-06-05 00:21:24 -05:00

70 lines
2.0 KiB
Zig

// benchmark std.json vs aether
const bigdata = @embedFile("10mb.json");
const std = @import("std");
fn aetherbenchAux(allocator: std.mem.Allocator) !void {
const aether = @import("aether");
const Tokenizer = aether.Tokenizer;
const Language = aether.Language;
var tokenizer: Tokenizer = try .init(allocator, bigdata);
defer tokenizer.deinit(allocator);
var self = Language.init;
// we use a better storing strategy
const idx: usize = try Language.parse(&self, allocator, &tokenizer);
const root = self.index.get(idx);
try std.testing.expect(root == .object);
}
fn stdjsonbenchAux(allocator: std.mem.Allocator) !void {
// taken from https://github.com/ziglang/zig/blob/9d534790ebc869ec933e932abe4be8b9e3593bbc/lib/std/json/dynamic_test.zig#L20
// and modified to use a 10mb file
// 2025-06-05
const json = std.json;
const root = try json.parseFromSliceLeaky(json.Value, allocator, bigdata, .{});
try std.testing.expect(root == .object);
}
pub fn aetherbench(allocator: std.mem.Allocator) void {
aetherbenchAux(allocator) catch @panic("aetherbench failed");
}
pub fn stdjsonbench(allocator: std.mem.Allocator) void {
stdjsonbenchAux(allocator) catch @panic("aetherbench failed");
}
pub fn main() !void {
const zbench = @import("zbench");
const stdout = std.io.getStdOut().writer();
var gpa: std.heap.GeneralPurposeAllocator(.{}) = .{};
const allocator = gpa.allocator();
var bench = zbench.Benchmark.init(allocator, .{
.iterations = 1,
});
defer bench.deinit();
try bench.add("aether", &aetherbench, .{
.track_allocations = true,
});
try bench.add("std.json", &stdjsonbench, .{
.track_allocations = true,
});
try stdout.writeByte('\n');
try zbench.prettyPrintHeader(stdout);
var iter = try bench.iterator();
while (try iter.next()) |step| switch (step) {
.progress => |_| {},
.result => |x| {
defer x.deinit();
try x.prettyPrint(allocator, stdout, true);
},
};
}