From a75b80c5c417fa8db080dfc4852ab19e198a5c9e Mon Sep 17 00:00:00 2001 From: Emil Lerch Date: Mon, 22 Sep 2025 16:15:43 -0700 Subject: [PATCH] add tests for adaptiveParse --- src/root.zig | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/src/root.zig b/src/root.zig index b5ba9e0..c79b326 100644 --- a/src/root.zig +++ b/src/root.zig @@ -533,3 +533,68 @@ test "real usage - jack" { try std.testing.expectEqualStrings("bedroom", sentence_object[1]); try std.testing.expectEqualStrings("light", sentence_object[2]); } +test "adaptiveParse successful without replacements" { + var parser = try Parser.init(std.testing.allocator); + defer parser.deinit(); + + const replacements = std.StaticStringMap([]const u8).initComptime(.{ + .{ "lake", "light" }, + .{ "like", "light" }, + }); + + const sentence = "turn on the kitchen light"; + const sentence_z = try std.testing.allocator.dupeZ(u8, sentence); + defer std.testing.allocator.free(sentence_z); + + var tree = try parser.adaptiveParse(sentence_z, replacements); + defer tree.deinit(); + + const action_words = try tree.sentenceAction(); + defer std.testing.allocator.free(action_words); + try std.testing.expect(action_words.len > 0); + + const object_words = try tree.sentenceObject(); + defer std.testing.allocator.free(object_words); + try std.testing.expect(object_words.len > 0); +} + +test "adaptiveParse with word replacement" { + var parser = try Parser.init(std.testing.allocator); + defer parser.deinit(); + + const replacements = std.StaticStringMap([]const u8).initComptime(.{ + .{ "lake", "light" }, + .{ "like", "light" }, + }); + + const sentence = "turn on the kitchen lake"; + const sentence_z = try std.testing.allocator.dupeZ(u8, sentence); + defer std.testing.allocator.free(sentence_z); + + var tree = try parser.adaptiveParse(sentence_z, replacements); + defer tree.deinit(); + + const action_words = try tree.sentenceAction(); + defer std.testing.allocator.free(action_words); + try std.testing.expect(action_words.len > 0); + + const object_words = try tree.sentenceObject(); + defer std.testing.allocator.free(object_words); + try std.testing.expect(object_words.len > 0); +} + +test "adaptiveParse no valid parse" { + var parser = try Parser.init(std.testing.allocator); + defer parser.deinit(); + + const replacements = std.StaticStringMap([]const u8).initComptime(.{ + .{ "lake", "light" }, + .{ "like", "light" }, + }); + + const sentence = "xyz abc def"; + const sentence_z = try std.testing.allocator.dupeZ(u8, sentence); + defer std.testing.allocator.free(sentence_z); + + try std.testing.expectError(error.NoValidParse, parser.adaptiveParse(sentence_z, replacements)); +}