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);
}