summaryrefslogtreecommitdiff
path: root/src/libzisp.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/libzisp.zig')
-rw-r--r--src/libzisp.zig101
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');
-}