| import std.conv; | |
| import std.stdio; | |
| import std.array : split; | |
| import std.string : strip; | |
| import extra; | |
| auto getMenu () | |
| { | |
| auto foods = import ("food.txt").strip.split ("\n"); | |
| return foods; | |
| } | |
| auto getPeople () | |
| { | |
| return import ("people.txt").strip.split ("\n"); | |
| } | |
| // Put these in templates to prevent the compiler from failing to parse them | |
| // since frontend version 2.111 | |
| template VersionInt (int v) { | |
| mixin(`version(` ~ v.to!string ~ `) | |
| enum VersionInt = true; | |
| else | |
| enum VersionInt = false;`); | |
| } | |
| template DebugInt (int v) { | |
| import std.conv; | |
| mixin(`debug(` ~ v.to!string ~ `) | |
| enum DebugInt = true; | |
| else | |
| enum DebugInt = false;`); | |
| } | |
| void main (string[] args) | |
| { | |
| import std.array : join; | |
| import core.stdc.stdlib : exit; | |
| immutable request = args[1]; | |
| if (request == "menu") { | |
| version (No_Menu) { | |
| } else { | |
| writeln ("On the menu: ", getMenu.join (", ")); | |
| exit (0); | |
| } | |
| } | |
| version (With_People) { | |
| if (request == "people") { | |
| writeln ("People: ", getPeople.join (", ")); | |
| // only exit successfully if the second module also had its module version set. | |
| // this checks for issue https://github.com/mesonbuild/meson/issues/3337 | |
| if (secondModulePeopleVersionSet ()) | |
| exit (0); | |
| exit (1); | |
| } | |
| } | |
| version (With_VersionInteger) | |
| static if (VersionInt!3) exit(0); | |
| version (With_Debug) | |
| debug exit(0); | |
| version (With_DebugInteger) | |
| static if (DebugInt!(3)) exit(0); | |
| version (With_DebugIdentifier) | |
| debug(DebugIdentifier) exit(0); | |
| version (With_DebugAll) { | |
| int dbg = 0; | |
| debug dbg++; | |
| static if (DebugInt!2) dbg++; | |
| static if (DebugInt!3) dbg++; | |
| static if (DebugInt!4) dbg++; | |
| debug(DebugIdentifier) dbg++; | |
| if (dbg == 5) | |
| exit(0); | |
| } | |
| // we fail here | |
| exit (1); | |
| } | |
| unittest | |
| { | |
| writeln ("TEST"); | |
| import core.stdc.stdlib : exit; | |
| writeln(getMenu); | |
| assert (getMenu () == ["Spam", "Eggs", "Spam", "Baked Beans", "Spam", "Spam"]); | |
| exit (0); | |
| } |