module compile_time_unittest;

mixin template enableCompileTimeUnittest(string module_ = __MODULE__)
{
    version (unittest)
    {
        static import std.algorithm;
        mixin("static import " ~ module_ ~ ";");

        static if (std.algorithm.startsWith(mixin (module_).stringof, "module"))
        {
            static assert (
            {
                foreach (test; __traits (getUnitTests, mixin (module_)))
                {
                    test();
                }
                return true;
            }());
        }
        else
        {
            pragma (msg, "enableCompileTimeUnittest doesn't work because the module '" ~ module_ ~ "' has a symbol '" ~ module_ ~ "'");
        }
    }
}