kubo39's blog

ただの雑記です。

DMDでプログラムのカバレッジを測定する方法

-covオプションを使うとできる。

適当なプログラムを作る。

import std.stdio;

enum Fruit
{
  Apple,
  Orange,
}

int tested1(int val)
{
  return (val % 2 == 1) ? val : (val == 0) ? 42 : -val;
}

void tested2(Fruit val)
{
  final switch (val) {
  case Fruit.Apple:  writeln("Apple");
    break;
  case Fruit.Orange: writeln("Orange");
    break;
  }
}

unittest
{
  assert(23 == tested1(23));
  tested2(Fruit.Apple);
}
$ dmd -g -unittest -main -cov app.d

こういう形式のsource-app.lstというテキストファイルが生成。

       |import std.stdio;
       |
       |enum Fruit
       |{
       |  Apple,
       |  Orange,
       |}
       |
       |int tested1(int val)
       |{
      2|  return (val % 2 == 1) ? val : (val == 0) ? 42 : -val;
       |}
       |
       |void tested2(Fruit val)
       |{
      1|  final switch (val) {
      2|  case Fruit.Apple:  writeln("Apple");
      1|    break;
0000000|  case Fruit.Orange: writeln("Orange");
0000000|    break;
       |  }
       |}
       |
       |unittest
       |{
      1|  assert(23 == tested1(23));
      1|  tested2(Fruit.Apple);
       |}
source/app.d is 75% covered