From 8d45a866497816ade70a0068afd19035a1b769d2 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Tue, 20 May 2025 10:33:45 +0200 Subject: rename recognize to benchmark --- src/main.zig | 147 ++--------------------------------------------------------- 1 file changed, 4 insertions(+), 143 deletions(-) (limited to 'src/main.zig') diff --git a/src/main.zig b/src/main.zig index 8797b31..d9aee77 100644 --- a/src/main.zig +++ b/src/main.zig @@ -3,153 +3,14 @@ pub const Grammar = @import("grammar.zig"); pub const gss = @import("gss.zig"); pub const recognizer = @import("recognizer.zig"); pub const argument = @import("argument.zig"); +pub const command = @import("command/root.zig"); pub const Generator = @import("generator.zig").Generator; pub const Scheduler = @import("scheduler.zig").Scheduler; const Args = argument.Args; -const RecognizeArgs = argument.RecognizeArgs; +const BenchmarkArgs = argument.BenchmarkArgs; const GenerateArgs = argument.GenerateArgs; -fn write_result( - writer: anytype, - is_tty: bool, - name: []const u8, - index: usize, - input: []const u8, - accepted: bool, -) !void { - if (is_tty) { - try writer.print("{s}[{}] {s}\x1b[0m: \"\x1b[3m{s}\x1b[0m\"\n", .{ - name, - index, - if (accepted) "\x1b[32maccept" - else "\x1b[31mreject", - input, - }); - } else { - try writer.print("{s}[{}] {s}: \"{s}\"\n", .{ - name, - index, - if (accepted) "accept" - else "reject", - input, - }); - } -} - -fn write_summary( - writer: anytype, - is_tty: bool, - total: usize, - accepted: usize, -) !void { - if (is_tty) { - try writer.print("finished {} ({} \x1b[32maccepted\x1b[0m {} \x1b[31mrejected\x1b[0m)\n", .{ total, accepted, total - accepted }); - } else { - try writer.print("finished {} ({} accepted {} rejected)\n", .{ total, accepted, total - accepted }); - } -} - -fn recognize(args: *RecognizeArgs, allocator: std.mem.Allocator) !void { - const stdout = std.io.getStdOut(); - var bufwriter = std.io.bufferedWriter(stdout.writer()); - const writer = bufwriter.writer(); - - var bufreader = std.io.bufferedReader(args.input.file.reader()); - var reader = bufreader.reader(); - var index: usize = 0; - const stderr = std.io.getStdErr(); - - if (args.input.file.isTty()) { - try stderr.writeAll("> "); - } - - var read_arena = std.heap.ArenaAllocator.init(allocator); - defer read_arena.deinit(); - var number_of_accepted: usize = 0; - - while (try reader.readUntilDelimiterOrEofAlloc( - read_arena.allocator(), - '\n', - std.math.maxInt(usize) - )) |buffer| { - - const trimmed = std.mem.trim(u8, buffer, &std.ascii.whitespace); - - const accepted = try recognizer.check( - &args.grammar, - trimmed, - allocator - ); - - try write_result( - writer, - stdout.isTty(), - args.input.name, - index, - trimmed, - accepted, - ); - - index += 1; - number_of_accepted += if (accepted) 1 else 0; - - if (args.input.file.isTty()) { - try bufwriter.flush(); - try stderr.writeAll("> "); - } - } - - try write_summary(writer, stdout.isTty(), index, number_of_accepted); - try bufwriter.flush(); -} - -const RandomGenerator = Generator(struct { - const Self = @This(); - - pub fn next(_: *Self, n: usize) usize { - return std.crypto.random.uintLessThan(usize, n); - } -}); - -pub fn generate_word( - args: *GenerateArgs, - generator: *RandomGenerator, - allocator: std.mem.Allocator -) []const u8 { - while (true) { - const text = generator.sentential_from_grammar( - &args.grammar, - 10000, - allocator - ) catch continue; - if (text.len >= args.min_length) { - return text; - } - - allocator.free(text); - } -} - -fn generate(args: *GenerateArgs, allocator: std.mem.Allocator) !void { - var writer = args.output.file.writer(); - - var scheduler: Scheduler(generate_word) = undefined; - try scheduler.init(allocator); - var generator = RandomGenerator {}; - - for (0..args.count) |_| { - try scheduler.push_task(.{args, &generator, allocator}); - } - - const results = try scheduler.deinit(); - defer allocator.free(results); - - for (results) |result| { - try writer.print("{s}\n", .{result}); - allocator.free(result); - } -} pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; @@ -164,8 +25,8 @@ pub fn main() !void { defer arguments.deinit(); try switch(arguments) { - .recognize => |*args| recognize(args, allocator), - .generate => |*args| generate(args, allocator), + .benchmark => |*args| command.benchmark(args, allocator), + .generate => |*args| command.generate(args, allocator), }; } -- cgit v1.2.3-70-g09d2