Skip to content

Instantly share code, notes, and snippets.

@sarahzrf
Created February 1, 2018 23:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sarahzrf/b95d91dd54dd0e9cfce5e131cc9d2323 to your computer and use it in GitHub Desktop.
Save sarahzrf/b95d91dd54dd0e9cfce5e131cc9d2323 to your computer and use it in GitHub Desktop.
const warn = @import("std").debug.warn;
fn prime(n: u32) type {
if (n < 2) return noreturn;
var divisor = 2;
while (divisor < n) : (divisor += 1) {
if (n % divisor == 0) return noreturn;
}
return void;
}
fn print_prime(comptime n: u32, verified: prime(n)) void {
warn("{}\n", n);
}
test "primality" {
print_prime(3, {});
}
@andrewrk
Copy link

andrewrk commented Feb 1, 2018

const warn = @import("std").debug.warn;

fn prime(n: u32) bool {
    if (n < 2) return false;
    var divisor: u32 = 2;
    while (divisor < n) : (divisor += 1) {
        if (n % divisor == 0) return false;
    }
    return true;
}

fn print_prime(comptime n: u32) void {
    comptime {
        if (!prime(n)) {
            @compileError("not prime");
        }
    }
    warn("{}\n", n);
}

test "primality" {
    print_prime(3);
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment