        -:    0:Source:test.cpp
        -:    0:Graph:test.gcno
        -:    0:Data:test.gcda
        -:    0:Runs:2
        -:    0:Programs:1
        -:    1:#include "test.h"
        -:    2:#include <cstdlib>
        -:    3:
        -:    4:bool on = false;
        -:    5:int len = 42;
        -:    6:double grid[10][10] = {0};
        -:    7:const char * hello = "world";
        -:    8:const char * world = "hello";
        -:    9:
8589934592:   10:void A::B() {}
8589934592:   10-block  0
        -:   11:
    #####:   12:void useless() {}
    $$$$$:   12-block  0
        -:   13:
        -:   14:double more_useless() {
    #####:   15:  return 0;
    $$$$$:   15-block  0
        -:   16:}
        -:   17:
        -:   18:int foo() {
        2:   19:  on = true;
        2:   20:  return 3;
        2:   20-block  0
        -:   21:}
        -:   22:
        -:   23:int bar() {
    #####:   24:  len--;
    #####:   25:  return foo() + 45;
    $$$$$:   25-block  0
        -:   26:}
        -:   27:
        8:   28:void assign(int ii, int jj) {
        8:   29:  grid[ii][jj] = (ii+1) * (jj+1);
        8:   30:}
        8:   30-block  0
        -:   31:
        -:   32:void initialize_grid() {
        6:   33:  for (int ii = 0; ii < 2; ii++)
        2:   33-block  0
        6:   33-block  1
        4:   33-block  2
       12:   34:    for (int jj = 0; jj < 2; jj++)
        4:   34-block  0
       12:   34-block  1
        8:   34-block  2
       12:   35:      assign(ii, jj);
        8:   35-block  0
        4:   35-block  1
        2:   36:}
        2:   36-block  0
        -:   37:
        -:   38:int main() {
        2:   39:  initialize_grid();
        -:   40:
        2:   41:  int a = 2;
        2:   42:  on = rand() % 2;
        2:   43:  if (on) {
        2:   43-block  0
        2:   44:    foo();
        2:   45:    ++a;
        2:   46:  } else {
        2:   46-block  0
    #####:   47:    bar();
    #####:   48:    a += rand();
    $$$$$:   48-block  0
        -:   49:  }
        -:   50:
       22:   51:  for (int ii = 0; ii < 10; ++ii) {
        2:   51-block  0
       22:   51-block  1
       20:   51-block  2
       20:   52:    switch (rand() % 5) {
       20:   52-block  0
        -:   53:      case 0:
        4:   54:        a += rand();
        4:   55:        break;
        4:   55-block  0
        -:   56:      case 1:
        -:   57:      case 2:
        2:   58:        a += rand() / rand();
        2:   59:        break;
        2:   59-block  0
        -:   60:      case 3:
        6:   61:        a -= rand();
        6:   62:        break;
        6:   62-block  0
        -:   63:      default:
        8:   64:        a = -1;
        8:   65:    }
        8:   65-block  0
       20:   66:  }
       20:   66-block  0
        -:   67:
        2:   68:  A thing;
8589934594:   69:  for (uint64_t ii = 0; ii < 4294967296; ++ii)
        2:   69-block  0
8589934594:   69-block  1
8589934592:   69-block  2
8589934592:   70:    thing.B();
8589934592:   70-block  0
        -:   71:
        2:   72:  return a + 8 + grid[2][3] + len;
        2:   72-block  0
        -:   73:  return more_useless();
        -:   74:}
