D beginner's article about D's Metaprogramming and Testing
Renato
renato at athaydes.com
Wed Dec 20 18:39:12 UTC 2023
On Tuesday, 19 December 2023 at 23:56:59 UTC, Steven
Schveighoffer wrote:
> "static if is an if block that’s executed at compile-time… it
> doesn’t exist at runtime."
>
> I see what you are going for, but the static if *block* is
> included or excluded based on what the compile-time condition
> is. The *condition* is executed at compile time, and if the
> condition is true, the block exists, if not, it doesn't exist.
> But in the case of your code, clearly the block exists at
> runtime (you are adding 2 runtime values together).
Hm, I meant that the `if` condition, which was `static if (is(T:
double))`, is evaluated at compile-time and hence, "disappears"
at runtime. Did you interpret that as "the whole if block
disappears at runtime"? If so, how can I make that clearer that I
am talking about the if check, not the branch which gets executed?
Perhaps "static if is evaluated at compile-time, and only the
branch that executes is present at runtime, i.e. the if condition
itself doesn't exist at runtime"?
> Regarding more descriptive unittests, try out the compiler
> parameter `-checkaction=context` to get more descriptive
> asserts: https://dlang.org/dmd-osx.html#switch-checkaction
That would be awesome! But it seems there's some problem on my
machine:
```
dmd -L-ld_classic -unittest -checkaction=context -run main.d
Undefined symbols for architecture x86_64:
"__D4core8internal7dassert__T24miniFormatFakeAttributesTiZQBdFNaNbNiNfMKxiZAya", referenced from:
__D4core8internal7dassert__T14_d_assert_failTxiZ__TQxTiZQBcFNaNbNiNfMxAyaMKxiMxiZAya in main.o
__D4core8internal7dassert__T14_d_assert_failTmZ__TQwTiZQBbFNaNbNiNfMxAyaMKxmMxiZAya in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to
see invocation)
Error: linker exited with status 1
Compilation exited abnormally with code 1 at Wed Dec 20 19:34:11
```
Do you know what this may be? Looks like the Mac OS's linker just
doesn't work well with the DMD compiler?!
> there are also options to build your own unittest runner, see
> https://dlang.org/phobos/core_runtime.html#.Runtime.extendedModuleUnitTester
>
> While this gives you only granularity of the module-level
> unittests, it allows you to do things like select only certain
> modules to run. And you do not need to build compile-time lists
> of all unittests yourself, the compiler links it all together
> for you (see the example in that function on what the default
> does).
>
> -Steve
Didn't I mention that in my blog post? Or is this not the same as
that example where I showed this:
```d
Runtime.moduleUnitTester = &tester;
```
Thanks for the feedback, and thanks everyone for the kind words!
I really appreciated it :)
More information about the Digitalmars-d
mailing list