My code in working through the CS Primer material.
// https://csprimer.com/watch/fast-pangram/

const std = @import("std");

pub export fn main() void {
    run() catch unreachable;
}

fn run() !void {
    const in = std.io.getStdIn();
    defer in.close();
    var in_buf = std.io.bufferedReader(in.reader());
    var reader = in_buf.reader();

    const out = std.io.getStdOut();
    defer out.close();
    var out_buf = std.io.bufferedWriter(out.writer());
    var writer = out_buf.writer();

    var alloc = std.heap.page_allocator;
    const BIG_SIZE = std.math.maxInt(usize);
    while (try reader.readUntilDelimiterOrEofAlloc(alloc, '\n', BIG_SIZE)) |msg| {
        if (!is_panagram(msg)) continue;
        try writer.print("{s}\n", .{msg});
        try out_buf.flush();
    }
}

test "is_panagram works on partial phrase" {
    const phrase: []const u8 = "ABC def xyz";
    try std.testing.expect(!is_panagram(phrase));
}

test "is_panagram works on full phrase" {
    const phrase: []const u8 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz";
    try std.testing.expect(is_panagram(phrase));
}

fn is_panagram(phrase: []const u8) bool {
    const COUNT_ALPHA = 26;
    var is_present = std.bit_set.IntegerBitSet(COUNT_ALPHA).initEmpty();

    for (phrase) |char| {
        if (!std.ascii.isAlphabetic(char)) continue;
        const index = std.ascii.toLower(char) - 'a';
        is_present.set(index);
    }

    return is_present.count() == COUNT_ALPHA;
}