const std = @import("std");

const app = @import("./main.zig");

test "expect task to result in 1588" {
    std.testing.log_level = .debug;

    const raw_input: []const u8 =
        \\NNCB
        \\
        \\CH -> B
        \\HH -> N
        \\CB -> H
        \\NH -> C
        \\HB -> C
        \\HC -> B
        \\HN -> C
        \\NN -> C
        \\BH -> H
        \\NC -> B
        \\NB -> B
        \\BN -> B
        \\BB -> N
        \\BC -> B
        \\CC -> N
        \\CN -> C
        \\
    ;
    var stream = std.io.fixedBufferStream(raw_input);
    var input = try app.readInput(std.testing.allocator, stream.reader());
    defer input.deinit();
    const expected: u32 = 1588;

    try std.testing.expect((try app.task(std.testing.allocator, 10, input)) == expected);
}

test "expect task in 40 steps to result in 2188189693529" {
    std.testing.log_level = .debug;

    const raw_input: []const u8 =
        \\NNCB
        \\
        \\CH -> B
        \\HH -> N
        \\CB -> H
        \\NH -> C
        \\HB -> C
        \\HC -> B
        \\HN -> C
        \\NN -> C
        \\BH -> H
        \\NC -> B
        \\NB -> B
        \\BN -> B
        \\BB -> N
        \\BC -> B
        \\CC -> N
        \\CN -> C
        \\
    ;
    var stream = std.io.fixedBufferStream(raw_input);
    var input = try app.readInput(std.testing.allocator, stream.reader());
    defer input.deinit();
    const expected: u64 = 2188189693529;

    try std.testing.expect((try app.task(std.testing.allocator, 40, input)) == expected);
}