add skipped tests that fail in prep for consituent tree
This commit is contained in:
parent
dcb4c7bf51
commit
87ee0f9580
2 changed files with 64 additions and 0 deletions
22
src/main.zig
22
src/main.zig
|
@ -533,6 +533,28 @@ test "processCommand with word replacement like to light" {
|
||||||
try std.testing.expectEqualStrings("192.168.1.101", test_device_entry.value_ptr.*);
|
try std.testing.expectEqualStrings("192.168.1.101", test_device_entry.value_ptr.*);
|
||||||
try std.testing.expectEqual(DeviceAction.off, test_action);
|
try std.testing.expectEqual(DeviceAction.off, test_action);
|
||||||
}
|
}
|
||||||
|
test "processCommand with word replacement like to light - three words" {
|
||||||
|
var devices = std.StringHashMap([]const u8).init(std.testing.allocator);
|
||||||
|
defer devices.deinit();
|
||||||
|
|
||||||
|
if (true) return error.SkipZigTest;
|
||||||
|
try devices.put("jack bedroom light", "192.168.1.101");
|
||||||
|
|
||||||
|
var parser = try pos.Parser.init(std.testing.allocator);
|
||||||
|
defer parser.deinit();
|
||||||
|
|
||||||
|
const sentence = "turn off jack bedroom like";
|
||||||
|
const sentence_z = try std.testing.allocator.dupeZ(u8, sentence);
|
||||||
|
defer std.testing.allocator.free(sentence_z);
|
||||||
|
|
||||||
|
const ll = std.testing.log_level;
|
||||||
|
std.testing.log_level = .debug;
|
||||||
|
defer std.testing.log_level = ll;
|
||||||
|
try processCommand(std.testing.allocator, sentence_z, &parser, &devices);
|
||||||
|
|
||||||
|
try std.testing.expectEqualStrings("192.168.1.101", test_device_entry.value_ptr.*);
|
||||||
|
try std.testing.expectEqual(DeviceAction.off, test_action);
|
||||||
|
}
|
||||||
|
|
||||||
test "processCommand no match found" {
|
test "processCommand no match found" {
|
||||||
var devices = std.StringHashMap([]const u8).init(std.testing.allocator);
|
var devices = std.StringHashMap([]const u8).init(std.testing.allocator);
|
||||||
|
|
42
src/root.zig
42
src/root.zig
|
@ -45,6 +45,7 @@ pub const ParseTree = struct {
|
||||||
if (std.mem.endsWith(u8, word, ".v")) {
|
if (std.mem.endsWith(u8, word, ".v")) {
|
||||||
// adjective or noun
|
// adjective or noun
|
||||||
for (self.links) |l| {
|
for (self.links) |l| {
|
||||||
|
// This should be looking through the consituent tree
|
||||||
// We're looking for a modifying verb, see:
|
// We're looking for a modifying verb, see:
|
||||||
// https://www.link.cs.cmu.edu/link/dict/section-MV.html
|
// https://www.link.cs.cmu.edu/link/dict/section-MV.html
|
||||||
if (@as(usize, l.left_index) == i and
|
if (@as(usize, l.left_index) == i and
|
||||||
|
@ -71,6 +72,7 @@ pub const ParseTree = struct {
|
||||||
pub fn sentenceObject(self: *ParseTree) ![][]const u8 {
|
pub fn sentenceObject(self: *ParseTree) ![][]const u8 {
|
||||||
var al: std.ArrayList([]const u8) = .{};
|
var al: std.ArrayList([]const u8) = .{};
|
||||||
defer al.deinit(self.allocator);
|
defer al.deinit(self.allocator);
|
||||||
|
// var noun: ?usize = null;
|
||||||
for (self.words, 0..) |word, i| {
|
for (self.words, 0..) |word, i| {
|
||||||
if (std.mem.endsWith(u8, word, ".n")) {
|
if (std.mem.endsWith(u8, word, ".n")) {
|
||||||
// adjective or noun
|
// adjective or noun
|
||||||
|
@ -96,6 +98,21 @@ pub const ParseTree = struct {
|
||||||
}
|
}
|
||||||
return al.toOwnedSlice(self.allocator);
|
return al.toOwnedSlice(self.allocator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: This should be a format function
|
||||||
|
pub fn printTree(self: *const ParseTree, writer: *std.Io.Writer) !void {
|
||||||
|
try writer.writeAll("Parse Tree:\n");
|
||||||
|
try writer.writeAll("Words: ");
|
||||||
|
for (self.words) |word| {
|
||||||
|
try writer.print("'{s}' ", .{word});
|
||||||
|
}
|
||||||
|
try writer.print("\n\nLinks ({} total):\n", .{self.links.len});
|
||||||
|
|
||||||
|
for (self.links, 0..) |link, i| {
|
||||||
|
try writer.print(" [{d}] '{s}' --{s}--> '{s}'\n", .{ i, link.left_word, link.label, link.right_word });
|
||||||
|
}
|
||||||
|
try writer.writeAll("\n");
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const Parser = struct {
|
pub const Parser = struct {
|
||||||
|
@ -295,3 +312,28 @@ test "real usage" {
|
||||||
try std.testing.expectEqualStrings("bedroom", sentence_object[0]);
|
try std.testing.expectEqualStrings("bedroom", sentence_object[0]);
|
||||||
try std.testing.expectEqualStrings("light", sentence_object[1]);
|
try std.testing.expectEqualStrings("light", sentence_object[1]);
|
||||||
}
|
}
|
||||||
|
test "real usage - jack" {
|
||||||
|
var parser = try Parser.init(std.testing.allocator);
|
||||||
|
defer parser.deinit();
|
||||||
|
|
||||||
|
if (true) return error.SkipZigTest;
|
||||||
|
var tree = try parser.parse("turn on jack bedroom light");
|
||||||
|
defer tree.deinit();
|
||||||
|
|
||||||
|
var stderr_writer = std.fs.File.stderr().writer(&.{});
|
||||||
|
const stderr = &stderr_writer.interface;
|
||||||
|
try tree.printTree(stderr); // well, this is stupid. We shall fix later
|
||||||
|
try std.testing.expect(tree.words.len == 7); // 5 + LEFT_WALL / RIGHT_WALL
|
||||||
|
try std.testing.expectEqualStrings("turn", tree.firstVerb().?);
|
||||||
|
const sentence_action = try tree.sentenceAction();
|
||||||
|
defer std.testing.allocator.free(sentence_action);
|
||||||
|
try std.testing.expect(sentence_action.len == 2);
|
||||||
|
try std.testing.expectEqualStrings("turn", sentence_action[0]);
|
||||||
|
try std.testing.expectEqualStrings("on", sentence_action[1]);
|
||||||
|
const sentence_object = try tree.sentenceObject();
|
||||||
|
defer std.testing.allocator.free(sentence_object);
|
||||||
|
try std.testing.expect(sentence_object.len == 3);
|
||||||
|
try std.testing.expectEqualStrings("jack", sentence_object[0]);
|
||||||
|
try std.testing.expectEqualStrings("bedroom", sentence_object[1]);
|
||||||
|
try std.testing.expectEqualStrings("light", sentence_object[2]);
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue