#include #include #include #include #include #include #include using namespace willow; TEST_CASE("valid modules", "[verifier]") { WillowContext ctx; std::vector diags; DiagnosticEngine eng( [&](Diagnostic d) { diags.push_back(std::move(d)); }); auto &m = *ctx.addModule("test"); SECTION("empty module") { REQUIRE(succeeded(verifyModule(ctx, m, eng))); REQUIRE(diags.empty()); } } TEST_CASE("valid function", "[verifier]") { WillowContext ctx; std::vector diags; DiagnosticEngine eng( [&](Diagnostic d) { diags.push_back(std::move(d)); }); auto &m = *ctx.addModule("test"); Type fty = ctx.types().FunctionType(ctx.types().VoidType(), {}); auto &fn = *m.emplaceFunction("fn", &m, fty); REQUIRE(succeeded(verifyFunction(ctx, fn, eng))); REQUIRE(diags.empty()); } TEST_CASE("invalid basic block", "[verifier]") { WillowContext ctx; std::vector diags; DiagnosticEngine eng( [&](Diagnostic d) { diags.push_back(std::move(d)); }); auto &m = *ctx.addModule("test"); Type fty = ctx.types().FunctionType(ctx.types().VoidType(), {}); auto &fn = *m.emplaceFunction("fn", &m, fty); // TODO }