From 75185f9fa26b5fc49036008df16c8bb4f1a51a13 Mon Sep 17 00:00:00 2001 From: Taylan Kammer Date: Tue, 6 Jan 2026 07:45:07 +0100 Subject: Writergate, other 0.16 changes, and test fixes for new grammar. --- src/test/data/parser-test-1.scm | 4 +-- src/test/parse.zig | 61 ++++++++++++++++++++--------------------- src/test/strings.zig | 15 ++++++++-- 3 files changed, 44 insertions(+), 36 deletions(-) (limited to 'src/test') diff --git a/src/test/data/parser-test-1.scm b/src/test/data/parser-test-1.scm index 87c41b5..374b4c6 100644 --- a/src/test/data/parser-test-1.scm +++ b/src/test/data/parser-test-1.scm @@ -149,7 +149,7 @@ (error "cannot" value dscr))))) -(define (bsrf/d bstr . indxs) +(define (bsrf/d bstr & indxs) (letvls (((bvec offset dscr) (bsunwp bstr))) (let loop ((bvec bvec) @@ -166,7 +166,7 @@ dscr* (cdr indxs))))))) -(define (bst!/d bstr . args) +(define (bst!/d bstr & args) (letvls (((bvec offset dscr) (bsunwp bstr))) (let loop ((bvec bvec) diff --git a/src/test/parse.zig b/src/test/parse.zig index dd26098..8c44454 100644 --- a/src/test/parse.zig +++ b/src/test/parse.zig @@ -3,14 +3,16 @@ const std = @import("std"); const testing = std.testing; const expect = testing.expect; +const gstIo = std.Io.Threaded.global_single_threaded.io(); + pub const io = @import("../zisp/io.zig"); pub const value = @import("../zisp/value.zig"); pub const Value = value.Value; fn parse(str: []const u8) Value { - var fbs = std.io.fixedBufferStream(str); - return io.parser.parse(fbs.reader().any()); + var fbs = std.Io.Reader.fixed(str); + return io.parser.parse(&fbs); } test "parse empty" { @@ -42,7 +44,7 @@ test "parse short bare string" { try expect(parse("|x()|").eq(str("x()"))); try expect(parse("|{\\|}|").eq(str("{|}"))); try expect(parse("foobar").eq(str("foobar"))); - try expect(parse("!$%&*+").eq(str("!$%&*+"))); + try expect(parse("!$%.*+").eq(str("!$%.*+"))); try expect(parse("-/<=>?").eq(str("-/<=>?"))); try expect(parse("@^_~00").eq(str("@^_~00"))); } @@ -54,7 +56,7 @@ test "parse long bare string" { try expect(parse("+foo.bar.baz").eq(str("+foo.bar.baz"))); try expect(parse("-foo.bar.baz").eq(str("-foo.bar.baz"))); try expect(parse("0foo.bar.baz").eq(str("0foo.bar.baz"))); - try expect(parse("!$%&*+-/<=>?@^_~").eq(str("!$%&*+-/<=>?@^_~"))); + try expect(parse("!$%*+-./<=>?@^_~").eq(str("!$%*+-./<=>?@^_~"))); try expect(parse("|foo\\x20;bar\\x0a;baz|").eq(str("foo bar\nbaz"))); } @@ -104,7 +106,7 @@ test "parse3" { } test "parse4" { - const val = parse("(foo . ;~x bar ;~y)"); + const val = parse("(foo & ;~x bar ;~y)"); const s = value.sstr.unpack(value.pair.car(val)); try testing.expectEqualStrings("foo", s.slice()); @@ -114,33 +116,33 @@ test "parse4" { } test "unparse" { - var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; - var out: std.ArrayList(u8) = .init(gpa.allocator()); - - const w = out.writer(); + var buf: [32]u8 = undefined; + var w = std.Io.Writer.fixed(&buf); const v = parse("#foo"); - try io.unparser.unparse(w, v); - try testing.expectEqualStrings("#foo", try out.toOwnedSlice()); + try io.unparser.unparse(&w, v); + try testing.expectEqualStrings("#foo", buf[0..w.end]); } test "unparse2" { - var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; - var out: std.ArrayList(u8) = .init(gpa.allocator()); - - const w = out.writer(); + var buf: [128]u8 = undefined; + var w = std.Io.Writer.fixed(&buf); const v = parse("#{foo bar['x]}"); - try io.unparser.unparse(w, v); + try io.unparser.unparse(&w, v); try testing.expectEqualStrings( - "(#HASH #BRACE foo (#JOIN bar #SQUARE (#QUOTE . x)))", - try out.toOwnedSlice(), + "(#HASH #BRACE foo (#JOIN bar #SQUARE (#QUOTE & x)))", + buf[0..w.end], ); } fn writeParseResult(str: []const u8) !void { - const w = std.io.getStdErr().writer(); + var buf: [64]u8 = undefined; + var fw = std.Io.File.stderr().writer(gstIo, &buf); + const w = &fw.interface; + const v = parse(str); try io.unparser.unparse(w, v); try w.writeByte('\n'); + try w.flush(); } test "unparse3" { @@ -152,7 +154,7 @@ test "unparse4" { } test "unparse5" { - try writeParseResult("(;~foo foo ;~bar . ;~bar bar ;~bar)"); + try writeParseResult("(;~foo foo ;~bar & ;~bar bar ;~bar)"); } test "unparse6" { @@ -160,12 +162,12 @@ test "unparse6" { } test "unparse7" { - try writeParseResult("#`(#,(->keyword (syntax->datum #'sym)) . in)"); + try writeParseResult("#`(#,(->keyword (syntax->datum #'sym)) & in)"); } fn parseBench(path: []const u8, iters: usize) !void { - const file = try std.fs.cwd().openFile(path, .{}); - defer file.close(); + const file = try std.Io.Dir.cwd().openFile(gstIo, path, .{}); + defer file.close(gstIo); var sfa = io.parser.DefaultSfa.init(std.heap.smp_allocator); var parser = try io.parser.initSfa(&sfa); @@ -174,24 +176,21 @@ fn parseBench(path: []const u8, iters: usize) !void { var timer = try std.time.Timer.start(); for (0..iters) |i| { _ = i; - var br = std.io.bufferedReader(file.reader()); - const reader = br.reader().any(); - // const reader = file.reader().any(); + var buf: [4096]u8 = undefined; + var reader = file.reader(gstIo, &buf); var v: Value = undefined; while (true) { - // std.debug.print("hihi {s}\n", .{path}); - v = parser.run(reader) catch |e| { + v = parser.run(&reader.interface) catch |e| { std.debug.print("\nfile pos: {}\n", .{ - try file.getPos(), + reader.logicalPos(), }); return e; }; - // try io.unparser.unparse(std.io.getStdOut().writer().any(), v); if (value.eof.eq(v)) { break; } } - try file.seekTo(0); + try reader.seekTo(0); } const ns: f64 = @floatFromInt(timer.lap()); const secs = ns / 1_000_000_000; diff --git a/src/test/strings.zig b/src/test/strings.zig index 8f640f4..3a0585e 100644 --- a/src/test/strings.zig +++ b/src/test/strings.zig @@ -2,6 +2,8 @@ const std = @import("std"); const testing = std.testing; +const gstIo = std.Io.Threaded.global_single_threaded.io(); + pub const value = @import("../zisp/value.zig"); const istr = value.istr; @@ -11,20 +13,27 @@ test "istr" { const s1 = "foo bar baz"; const v1 = istr.intern(s1); const v1_len: usize = @intCast(fx.unpack(istr.len(v1))); + try testing.expectEqualStrings(s1, istr.assert(v1).bytes()); try testing.expectEqual(s1.len, v1_len); - const file = try std.fs.cwd().openFile("src/test/data/string.txt", .{}); - defer file.close(); + const path = "src/test/data/string.txt"; + var file = try std.Io.Dir.cwd().openFile(gstIo, path, .{}); + defer file.close(gstIo); + var s2_buf: [4096]u8 = undefined; - const s2_len = try file.readAll(&s2_buf); + const s2_len = try file.readStreaming(gstIo, &.{&s2_buf}); var s2: []u8 = s2_buf[0..s2_len]; + const v2 = istr.intern(s2); const v2_len: usize = @intCast(fx.unpack(istr.len(v2))); + var s2_orig_buf: [4096]u8 = undefined; @memcpy(&s2_orig_buf, &s2_buf); const s2_orig = s2_orig_buf[0..s2_len]; + s2[0] = s2[0] +% 1; + try testing.expectEqualStrings(s2_orig, istr.assert(v2).bytes()); try testing.expectEqual(s2_len, v2_len); } -- cgit v1.2.3