On 02/24/2015 11:15 AM, ketmar wrote:

> and it's interesting what complications templates can bring. testing
> templates is relatively hard now, 'cause programmer must ensure that
> every path is instantiated (i'm constantly hitting by the bugs in my
> templates due to missing some codepathes).

I was going to suggest dmd's code coverage tool but I've just witnessed the problem first-hand: Uninstantiated template code is not visible to the coverage analyser! :-o

Here is the program, where the code inside 'static if' is not covered (because argument 'a' is char):

T foo(T)(T v)
{
    static if (T.sizeof == 4) {
        ++v;
    }

    return v;
}

void main()
{
    int a = foo('a');
}

$ dmd deneme.d -cov
$ ./deneme
$ tail --lines=14 deneme.lst
       |T foo(T)(T v)
       |{
       |    static if (T.sizeof == 4) {
       |        ++v;
       |    }
       |
      1|    return v;
       |}
       |
       |void main()
       |{
      1|    int a = foo('a');
       |}
deneme.d is 100% covered

Yay! 100% covered. WAT? :p

Ali

Reply via email to