Validate static asserts

Andrey Zherikov andrey.zherikov at gmail.com
Fri Sep 9 14:35:33 UTC 2022


I have bunch of `static assert(<condition>, <message>)` in my 
code and would like to validate that specific code triggers 
specific assert by checking what `<message>` is thrown.

Right now I do `static assert(!__traits(compiles, { <my code> 
}));` but since `<my code>` might not compile due to many 
different reasons, I might not be testing original `static 
assert` and might miss breaking change.

One way to do this is to extract `<condition>` and `<message>` 
into some function and test it outside of `static assert`:
```d
auto check()
{
     return tuple(false, // check result  ('false' is just for 
example)
                  "message");
}

void f()
{
     enum result = check();
     static assert(result.condition, result.message);
}

unittest
{
     enum result = check();
     static assert(result.condition);
     static assert(result.message == "message");
}
```
But I don't like this approach because unit test doesn't really 
test `f()` (it tests duplicated code) so it can't guarantee that 
`f()` works as expected.


Is there a way to validate static asserts in unit tests?


More information about the Digitalmars-d-learn mailing list