p0nce / d-idioms

"Effective D" without the haircut.
http://p0nce.github.io/d-idioms/
82 stars 17 forks source link

debug can be creatively used for lightweight mocking #143

Closed p0nce closed 3 years ago

p0nce commented 6 years ago

debug(Something) { writeln; } else { glCreateShader; }

invented by alphaglosined?

Kinds of usage

///
module debug_params;

//

pragma(msg, "Debug parameters descriptions:");
pragma(msg, "\tdebug(OGL_Shader): will log all appropriete function behaviour.");
pragma(msg, "\tdebug(OGL_Dummy): will not call OpenGL functions. All other logic is left intact. Random data is used as required.");
pragma(msg, "\tdebug(Containers_Concurrent_Queue): will log all appropriete function behaviour.");
pragma(msg, "\tdebug(Containers_Concurrent_CircularQueue): will log all appropriete function behaviour.");
pragma(msg, "\tdebug(Containers_SplayTree): will log all appropriete function behaviour.");

//

pragma(msg, "Debug parameters status:");

//

pragma(msg, "\tEnabled:");
debug(OGL_Shader) {
    pragma(msg, "\t\tdebug(OGL_Shader)");
}
debug(OGL_Dummy) {
    pragma(msg, "\t\tdebug(OGL_Dummy)");
}
debug(Containers_Concurrent_Queue) {
    pragma(msg, "\t\tdebug(Containers_Concurrent_Queue)");
}
debug(Containers_Concurrent_CircularQueue) {
    pragma(msg, "\t\tdebug(Containers_Concurrent_CircularQueue)");
}
debug(Containers_SplayTree) {
    pragma(msg, "\t\tdebug(Containers_SplayTree)");
}

//

pragma(msg, "\tDisabled:");
debug(OGL_Shader) {} else {
    pragma(msg, "\t\tdebug(OGL_Shader)");
}
debug(OGL_Dummy) {} else {
    pragma(msg, "\t\tdebug(OGL_Dummy)");
}
debug(Containers_Concurrent_Queue) {} else {
    pragma(msg, "\t\tdebug(Containers_Concurrent_Queue)");
}
debug(Containers_Concurrent_CircularQueue) {} else {
    pragma(msg, "\t\tdebug(Containers_Concurrent_CircularQueue)");
}
debug(Containers_SplayTree) {} else {
    pragma(msg, "\t\tdebug(Containers_SplayTree)");
}

//
p0nce commented 3 years ago

well, this is just using debug identifiers as intended I guess