| ... | @@ -0,0 +1,38 @@ |
| 1 | const std = @import("std"); |
| 2 | const mem = std.mem; |
| 3 | const warn = std.debug.warn; |
| 4 | const Tokenizer = std.zig.Tokenizer; |
| 5 | const Parser = std.zig.Parser; |
| 6 | const io = std.io; |
| 7 | |
| 8 | const source = @embedFile("../os/index.zig"); |
| 9 | var fixed_buffer_mem: [10 * 1024 * 1024]u8 = undefined; |
| 10 | |
| 11 | pub fn main() !void { |
| 12 | var i: usize = 0; |
| 13 | var timer = try std.os.time.Timer.start(); |
| 14 | const start = timer.lap(); |
| 15 | const iterations = 100; |
| 16 | var memory_used: usize = 0; |
| 17 | while (i < iterations) : (i += 1) { |
| 18 | memory_used += testOnce(); |
| 19 | } |
| 20 | const end = timer.read(); |
| 21 | memory_used /= iterations; |
| 22 | const elapsed_s = f64(end - start) / std.os.time.ns_per_s; |
| 23 | const bytes_per_sec = f64(source.len * iterations) / elapsed_s; |
| 24 | const mb_per_sec = bytes_per_sec / (1024 * 1024); |
| 25 | |
| 26 | var stdout_file = try std.io.getStdOut(); |
| 27 | const stdout = &std.io.FileOutStream.init(&stdout_file).stream; |
| 28 | try stdout.print("{.3} MB/s, {} KB used \n", mb_per_sec, memory_used / 1024); |
| 29 | } |
| 30 | |
| 31 | fn testOnce() usize { |
| 32 | var fixed_buf_alloc = std.heap.FixedBufferAllocator.init(fixed_buffer_mem[0..]); |
| 33 | var allocator = &fixed_buf_alloc.allocator; |
| 34 | var tokenizer = Tokenizer.init(source); |
| 35 | var parser = Parser.init(&tokenizer, allocator, "(memory buffer)"); |
| 36 | _ = parser.parse() catch @panic("parse failure"); |
| 37 | return fixed_buf_alloc.end_index; |
| 38 | } |