On Wednesday, 30 March 2022 at 04:15:24 UTC, Paul Backus wrote:
Probably the easiest way is to split it into two functions
```d
void f()
{
version (foo)
fVersionFoo();
else
fDefault();
}
void fVersionFoo()
{
/* ... */
}
void fDefault()
{
/* ... */
}
```
Then you can write separate unit tests for both `fVersionFoo`
and `fDefault`, and they will both be tested regardless of what
settings you build with.
This is an option when you have big difference between foo and
not-foo behavior. In my case they are 90% the same so I think
I'll go this way:
```d
void fImpl(bool fooMode)()
{
static if(fooMode)
writeln("foo");
else
writeln("no foo");
}
version(foo)
alias f = fImpl!true;
else
alias f = fImpl!false;
unittest {
// test fImpl!true
}
unittest {
// test fImpl!false
}
```