const std = @import("std"); const PF = @import("pathfinder.zig"); fn manhattan(a: [2]usize, b: [2]usize) !usize { const absx = @abs(@as(isize, @intCast(a[0])) - @as(isize, @intCast(b[0]))); const absy = @abs(@as(isize, @intCast(a[1])) - @as(isize, @intCast(b[1]))); return @as(usize, @intCast(absx + absy)); } test "Dijkstra usize" { var grid = PF.Grid.Grid(usize, 100, 100){}; try grid.parseGridFromCSV("grid-test.txt", ","); var ret = try grid.dijkstra(std.testing.allocator, .{ 0, 0 }, .{ 99, 99 }, PF.Grid.D2.HV); try std.testing.expectEqual(@as(usize, 366), ret); // right and down ret = try grid.dijkstra(std.testing.allocator, .{ 0, 0 }, .{ 99, 99 }, [2][2]isize{ .{ 0, 1 }, .{ 1, 0 } }); try std.testing.expectEqual(@as(usize, 366), ret); // down and left => no path const err = grid.dijkstra(std.testing.allocator, .{ 0, 0 }, .{ 99, 99 }, [2][2]isize{ .{ 1, 0 }, .{ 1, 0 } }); try std.testing.expectError(error.PathNotFound, err); } test "Dijkstra isize" { var grid = PF.Grid.Grid(isize, 100, 100){}; try grid.parseGridFromCSV("grid-test.txt", ","); const ret = try grid.dijkstra(std.testing.allocator, .{ 0, 0 }, .{ 99, 99 }, PF.Grid.D2.diagonal); try std.testing.expectEqual(@as(isize, 257), ret); } test "Dijkstra float" { var grid = PF.Grid.Grid(f64, 100, 100){}; try grid.parseGridFromCSV("grid-test.txt", ","); const ret = try grid.dijkstra(std.testing.allocator, .{ 0, 0 }, .{ 99, 99 }, PF.Grid.D2.all); try std.testing.expectEqual(@as(f64, 181), ret); } test "A* usize" { var grid = PF.Grid.Grid(usize, 100, 100){}; try grid.parseGridFromCSV("grid-test.txt", ","); const ret = try grid.astar(std.testing.allocator, .{ 0, 0 }, .{ 99, 99 }, PF.Grid.D2.all, manhattan); try std.testing.expectEqual(@as(usize, 181), ret); }