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
}
```

Reply via email to