diff options
Diffstat (limited to 'src/libzisp.zig')
| -rw-r--r-- | src/libzisp.zig | 101 |
1 files changed, 50 insertions, 51 deletions
diff --git a/src/libzisp.zig b/src/libzisp.zig index ceee3f6..de3f2e6 100644 --- a/src/libzisp.zig +++ b/src/libzisp.zig @@ -345,6 +345,56 @@ test "parse4" { try std.testing.expectEqualStrings("bar", f.slice()); } +test "unparse" { + var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; + var out: std.ArrayList(u8) = .init(gpa.allocator()); + + const w = out.writer(); + const v = parseString("#foo"); + try io.unparser.unparse(w, v); + try std.testing.expectEqualStrings("#foo", try out.toOwnedSlice()); +} + +test "unparse2" { + var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; + var out: std.ArrayList(u8) = .init(gpa.allocator()); + + const w = out.writer(); + const v = parseString("#{foo bar['x]}"); + try io.unparser.unparse(w, v); + try std.testing.expectEqualStrings( + "(#HASH #BRACE foo (#JOIN bar #SQUARE (#QUOTE . x)))", + try out.toOwnedSlice(), + ); +} + +fn writeParseResult(str: []const u8) !void { + const w = std.io.getStdErr().writer(); + const v = parseString(str); + try io.unparser.unparse(w, v); + try w.writeByte('\n'); +} + +test "unparse3" { + try writeParseResult("#{foo bar['x](y)(z)}"); +} + +test "unparse4" { + try writeParseResult("(foo ;~bar)"); +} + +test "unparse5" { + try writeParseResult("(;~foo foo ;~bar . ;~bar bar ;~bar)"); +} + +test "unparse6" { + try writeParseResult("(foo bar ... baz bat.(qux))"); +} + +test "unparse7" { + 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(); @@ -382,54 +432,3 @@ test "parse bench" { try parseBench("test-data/parser-test-2.scm", 1000); try parseBench("test-data/parser-torture.scm", 1); } - -test "unparse" { - var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; - var out: std.ArrayList(u8) = .init(gpa.allocator()); - - const w = out.writer(); - const v = parseString("#foo"); - try io.unparser.unparse(w, v); - try std.testing.expectEqualStrings("#foo", try out.toOwnedSlice()); -} - -test "unparse2" { - var gpa: std.heap.GeneralPurposeAllocator(.{}) = .init; - var out: std.ArrayList(u8) = .init(gpa.allocator()); - - const w = out.writer(); - const v = parseString("#{foo bar['x]}"); - try io.unparser.unparse(w, v); - try std.testing.expectEqualStrings( - "(#HASH #BRACE foo (#JOIN bar #SQUARE (#QUOTE . x)))", - try out.toOwnedSlice(), - ); -} - -test "unparse3" { - const w = std.io.getStdErr().writer(); - const v = parseString("#{foo bar['x](y)(z)}"); - try io.unparser.unparse(w, v); - try w.writeByte('\n'); -} - -test "unparse4" { - const w = std.io.getStdErr().writer(); - const v = parseString("(foo ;~bar)"); - try io.unparser.unparse(w, v); - try w.writeByte('\n'); -} - -test "unparse5" { - const w = std.io.getStdErr().writer(); - const v = parseString("(;~foo foo ;~bar . ;~bar bar ;~bar)"); - try io.unparser.unparse(w, v); - try w.writeByte('\n'); -} - -test "unparse6" { - const w = std.io.getStdErr().writer(); - const v = parseString("(foo bar ... baz bat.(qux))"); - try io.unparser.unparse(w, v); - try w.writeByte('\n'); -} |
