Hannes Siebenhandl pushed to branch wip/fendor/hpc-bc-support at Glasgow Haskell Compiler / GHC

Commits:

24 changed files:

Changes:

  • testsuite/tests/hpc/Makefile
    1
    -TOP=../..
    
    1
    +TOP=/home/hugin/Documents/haskell/ghc-hpc-bc/testsuite
    
    2 2
     include $(TOP)/mk/boilerplate.mk
    
    3 3
     include $(TOP)/mk/test.mk
    
    4 4
     
    
    ... ... @@ -8,13 +8,22 @@ T11798:
    8 8
     	"$(TEST_HC)" $(TEST_HC_ARGS) T11798 -fhpc
    
    9 9
     	test -e .hpc/T11798.mix
    
    10 10
     
    
    11
    -T17073:
    
    11
    +T17073a:
    
    12 12
     	LANG=ASCII "$(TEST_HC)" $(TEST_HC_ARGS) T17073.hs -fhpc -v0
    
    13 13
     	./T17073
    
    14 14
     	"$(HPC)" report T17073
    
    15 15
     	"$(HPC)" version
    
    16 16
     	LANG=ASCII "$(HPC)" markup T17073
    
    17 17
     
    
    18
    -T20568:
    
    18
    +T17073b:
    
    19
    +	"$(TEST_HC)" $(TEST_HC_OPTS_INTERACTIVE) $(TEST_HC_ARGS) T17073.hs -fhpc -v0 -e ":main"
    
    20
    +	"$(HPC)" report ghc
    
    21
    +	"$(HPC)" version
    
    22
    +	LANG=ASCII "$(HPC)" markup ghc
    
    23
    +
    
    24
    +T20568a:
    
    19 25
     	"$(TEST_HC)" $(TEST_HC_ARGS) T20568.hs -fhpc -v0
    
    20 26
     	./T20568
    
    27
    +
    
    28
    +T20568b:
    
    29
    +	"$(TEST_HC)" $(TEST_HC_OPTS_INTERACTIVE) $(TEST_HC_ARGS) T20568.hs -fhpc -v0 -e ":main"

  • testsuite/tests/hpc/T17073.stdouttestsuite/tests/hpc/T17073a.stdout
    ... ... @@ -12,4 +12,4 @@ Writing: Main.hs.html
    12 12
     Writing: hpc_index.html
    
    13 13
     Writing: hpc_index_fun.html
    
    14 14
     Writing: hpc_index_alt.html
    
    15
    -Writing: hpc_index_exp.html
    \ No newline at end of file
    15
    +Writing: hpc_index_exp.html

  • testsuite/tests/hpc/T17073b.stdout
    1
    +Добрый день
    
    2
    +100% expressions used (2/2)
    
    3
    +100% boolean coverage (0/0)
    
    4
    +     100% guards (0/0)
    
    5
    +     100% 'if' conditions (0/0)
    
    6
    +     100% qualifiers (0/0)
    
    7
    +100% alternatives used (0/0)
    
    8
    +100% local declarations used (0/0)
    
    9
    +100% top-level declarations used (1/1)
    
    10
    +hpc tools, version 0.69
    
    11
    +Writing: Main.hs.html
    
    12
    +Writing: hpc_index.html
    
    13
    +Writing: hpc_index_fun.html
    
    14
    +Writing: hpc_index_alt.html
    
    15
    +Writing: hpc_index_exp.html

  • testsuite/tests/hpc/T20568.stdouttestsuite/tests/hpc/T20568a.stdout

  • testsuite/tests/hpc/T20568b.stdout
    1
    +IfThenElse (AstBool True) (AstInt 1) (AstInt 2)

  • testsuite/tests/hpc/all.T
    ... ... @@ -23,7 +23,10 @@ test('T2991', [cmd_wrapper(T2991)],
    23 23
                   # Run with 'ghc --main'. Do not list other modules explicitly.
    
    24 24
                   multimod_compile_and_run, ['T2991', ''])
    
    25 25
     
    
    26
    -test('T17073', when(opsys('mingw32'), expect_broken(17607)),
    
    27
    -     makefile_test, ['T17073 HPC={hpc}'])
    
    26
    +test('T17073a', [when(opsys('mingw32'), expect_broken(17607)), extra_files(['T17073.hs'])],
    
    27
    +     makefile_test, ['T17073a HPC={hpc}'])
    
    28
    +test('T17073b', [when(opsys('mingw32'), expect_broken(17607)), extra_files(['T17073.hs'])],
    
    29
    +     makefile_test, ['T17073b HPC={hpc}'])
    
    28 30
     
    
    29
    -test('T20568', normal, makefile_test, [])
    31
    +test('T20568a', [extra_files(['T20568.hs'])], makefile_test, [])
    
    32
    +test('T20568b', [extra_files(['T20568.hs'])], makefile_test, [])

  • testsuite/tests/hpc/fork/Makefile
    1 1
     TOP=../../..
    
    2 2
     include $(TOP)/mk/boilerplate.mk
    
    3 3
     include $(TOP)/mk/test.mk
    4
    -

  • testsuite/tests/hpc/function/hpcrun.sh
    1
    +#!/usr/bin/env bash
    
    2
    +
    
    3
    +while [[ $1 == --* ]]; do
    
    4
    +  arg=$1; shift
    
    5
    +  case $arg in
    
    6
    +    --) break ;;
    
    7
    +    --hpc=*) HPC=${arg#--hpc=} ;;
    
    8
    +    --clear) CLEAR=1 ;;
    
    9
    +    --exeext=*) exeext=${arg#--exeext=} ;;
    
    10
    +    *) echo "Bad arg: $arg" >&2; exit 1 ;;
    
    11
    +  esac
    
    12
    +done
    
    13
    +
    
    14
    +[[ -z $HPC ]] && { echo "no option --hpc=* provided" >&2; exit 1; }
    
    15
    +
    
    16
    +# Skip KEY=VALUE assignments to find the real executable
    
    17
    +exe=""
    
    18
    +for arg in "$@"; do
    
    19
    +  [[ $arg =~ ^[A-Za-z_][A-Za-z0-9_]*= ]] && continue
    
    20
    +  exe=$arg
    
    21
    +  break
    
    22
    +done
    
    23
    +
    
    24
    +binary=$(basename "$exe")$exeext
    
    25
    +
    
    26
    +[[ -n $CLEAR ]] && rm -f "$binary.tix"
    
    27
    +
    
    28
    +# Reconstruct with quoted arguments
    
    29
    +cmd=""
    
    30
    +for arg in "$@"; do
    
    31
    +  cmd+=" $(printf '%q' "$arg")"
    
    32
    +done
    
    33
    +bash -c "$cmd"
    
    34
    +echo
    
    35
    +
    
    36
    +$HPC report "$binary.tix"
    
    37
    +echo
    
    38
    +
    
    39
    +$HPC report "$binary.tix" --per-module
    
    40
    +echo
    
    41
    +
    
    42
    +$HPC markup "$binary.tix" | while IFS= read -r line; do
    
    43
    +  echo "$line"
    
    44
    +  if [[ $line =~ Writing:\ ([^[:space:]]+\.html) ]]; then
    
    45
    +    cat "${BASH_REMATCH[1]}"
    
    46
    +  fi
    
    47
    +done
    
    48
    +echo

  • testsuite/tests/hpc/function/test.T
    1
    -setTestOpts([omit_ghci, when(fast(), skip), js_skip])
    
    1
    +setTestOpts([when(fast(), skip), js_skip])
    
    2 2
     
    
    3
    -hpc_prefix = "perl hpcrun.pl --clear --exeext={exeext} --hpc={hpc}"
    
    3
    +hpc_prefix = "./hpcrun.sh --clear --exeext={exeext} --hpc={hpc} --"
    
    4 4
     
    
    5 5
     test('tough',
    
    6 6
          [extra_files(['../hpcrun.pl']),
    
    ... ... @@ -8,3 +8,11 @@ test('tough',
    8 8
           ignore_extension,
    
    9 9
           when(arch('wasm32'), fragile(23243))],
    
    10 10
          compile_and_run, ['-fhpc'])
    
    11
    +
    
    12
    +test('tough1',
    
    13
    +     [extra_files(['hpcrun.sh', 'tough.hs']),
    
    14
    +      cmd_prefix(hpc_prefix),
    
    15
    +      ignore_extension,
    
    16
    +      extra_hc_opts('-fhpc tough.hs'),
    
    17
    +      when(arch('wasm32'), fragile(23243))],
    
    18
    +     ghci_script, ['tough1.script'])

  • testsuite/tests/hpc/function/tough1.script
    1
    +main
    
    2
    +:quit

  • testsuite/tests/hpc/function/tough1.stderr
    1
    +tough.hs:22:5: warning: [GHC-53633] [-Woverlapping-patterns (in -Wdefault)]
    
    2
    +    Pattern match is redundant
    
    3
    +    In a case alternative: _ -> ...
    
    4
    +

  • testsuite/tests/hpc/function/tough1.stdout
    1
    +"Hello"
    
    2
    +"Hello"
    
    3
    +badCase
    
    4
    +badCase
    
    5
    +"Bark"
    
    6
    +"Hello"
    
    7
    +(1,2,3)
    
    8
    +
    
    9
    + 73% expressions used (73/100)
    
    10
    + 14% boolean coverage (1/7)
    
    11
    +       0% guards (0/4), 3 always True, 1 always False
    
    12
    +      33% 'if' conditions (1/3), 1 always True, 1 always False
    
    13
    +     100% qualifiers (0/0)
    
    14
    + 58% alternatives used (7/12)
    
    15
    +100% local declarations used (0/0)
    
    16
    + 83% top-level declarations used (5/6)
    
    17
    +
    
    18
    +-----<module Main>-----
    
    19
    + 73% expressions used (73/100)
    
    20
    + 14% boolean coverage (1/7)
    
    21
    +       0% guards (0/4), 3 always True, 1 always False
    
    22
    +      33% 'if' conditions (1/3), 1 always True, 1 always False
    
    23
    +     100% qualifiers (0/0)
    
    24
    + 58% alternatives used (7/12)
    
    25
    +100% local declarations used (0/0)
    
    26
    + 83% top-level declarations used (5/6)
    
    27
    +
    
    28
    +Writing: Main.hs.html
    
    29
    +<html>
    
    30
    +<head>
    
    31
    +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    32
    +<style type="text/css">
    
    33
    +span.lineno { color: white; background: #aaaaaa; border-right: solid white 12px }
    
    34
    +span.nottickedoff { background: yellow}
    
    35
    +span.istickedoff { background: white }
    
    36
    +span.tickonlyfalse { margin: -1px; border: 1px solid #f20913; background: #f20913 }
    
    37
    +span.tickonlytrue  { margin: -1px; border: 1px solid #60de51; background: #60de51 }
    
    38
    +span.funcount { font-size: small; color: orange; z-index: 2; position: absolute; right: 20 }
    
    39
    +span.decl { font-weight: bold }
    
    40
    +span.spaces    { background: white }
    
    41
    +</style>
    
    42
    +</head>
    
    43
    +<body>
    
    44
    +<pre>
    
    45
    +<span class="decl"><span class="nottickedoff">never executed</span> <span class="tickonlytrue">always true</span> <span class="tickonlyfalse">always false</span></span>
    
    46
    +</pre>
    
    47
    +<pre>
    
    48
    +<span class="lineno">    1 </span>import Control.Exception as E
    
    49
    +<span class="lineno">    2 </span>
    
    50
    +<span class="lineno">    3 </span>-- This test shows what hpc can really do.
    
    51
    +<span class="lineno">    4 </span>
    
    52
    +<span class="lineno">    5 </span><span class="decl"><span class="istickedoff">main = do</span>
    
    53
    +<span class="lineno">    6 </span><span class="spaces">  </span><span class="istickedoff">print (&quot;Hello&quot;)</span>
    
    54
    +<span class="lineno">    7 </span><span class="spaces">  </span><span class="istickedoff">foo &quot;Hello&quot;</span>
    
    55
    +<span class="lineno">    8 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print (badCase 22 <span class="nottickedoff">44</span>))</span>
    
    56
    +<span class="lineno">    9 </span><span class="spaces">          </span><span class="istickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span>
    
    57
    +<span class="lineno">   10 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print (badCase 22 <span class="nottickedoff">(error &quot;Foo&quot;)</span>))</span>
    
    58
    +<span class="lineno">   11 </span><span class="spaces">          </span><span class="istickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span>
    
    59
    +<span class="lineno">   12 </span><span class="spaces">  </span><span class="istickedoff">E.catch (print &quot;Bark&quot;)</span>
    
    60
    +<span class="lineno">   13 </span><span class="spaces">          </span><span class="istickedoff"><span class="nottickedoff">(\ e -&gt; print (e :: E.ErrorCall))</span></span>
    
    61
    +<span class="lineno">   14 </span><span class="spaces">  </span><span class="istickedoff">(_,_) &lt;- return $ (<span class="nottickedoff">&quot;Hello&quot;</span>,<span class="nottickedoff">&quot;World&quot;</span>)</span>
    
    62
    +<span class="lineno">   15 </span><span class="spaces">  </span><span class="istickedoff">return <span class="nottickedoff">()</span></span>
    
    63
    +<span class="lineno">   16 </span><span class="spaces">  </span><span class="istickedoff">() &lt;- return ()</span>
    
    64
    +<span class="lineno">   17 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
    
    65
    +<span class="lineno">   18 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwoz</span> -&gt; return <span class="nottickedoff">&quot;Hello&quot;</span></span>
    
    66
    +<span class="lineno">   19 </span><span class="spaces">    </span><span class="istickedoff">_             -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
    
    67
    +<span class="lineno">   20 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
    
    68
    +<span class="lineno">   21 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwise</span> -&gt; return <span class="nottickedoff">&quot;Hello&quot;</span></span>
    
    69
    +<span class="lineno">   22 </span><span class="spaces">    </span><span class="istickedoff">_              -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
    
    70
    +<span class="lineno">   23 </span><span class="spaces">  </span><span class="istickedoff">t &lt;- case <span class="nottickedoff">()</span> of</span>
    
    71
    +<span class="lineno">   24 </span><span class="spaces">    </span><span class="istickedoff">_ | <span class="tickonlytrue">otherwise</span> </span>
    
    72
    +<span class="lineno">   25 </span><span class="spaces">      </span><span class="istickedoff">, <span class="tickonlyfalse">False</span>      -&gt; <span class="nottickedoff">error &quot;Bad Thing Happened&quot;</span></span>
    
    73
    +<span class="lineno">   26 </span><span class="spaces">    </span><span class="istickedoff">_              -&gt; return &quot;Hello&quot;</span>
    
    74
    +<span class="lineno">   27 </span><span class="spaces">  </span><span class="istickedoff">print t</span>
    
    75
    +<span class="lineno">   28 </span><span class="spaces">  </span><span class="istickedoff">print foo2</span></span>
    
    76
    +<span class="lineno">   29 </span>
    
    77
    +<span class="lineno">   30 </span><span class="decl"><span class="istickedoff">foo x = do</span>
    
    78
    +<span class="lineno">   31 </span><span class="spaces">  </span><span class="istickedoff">print x</span>
    
    79
    +<span class="lineno">   32 </span><span class="spaces">  </span><span class="istickedoff">return <span class="nottickedoff">()</span></span></span>
    
    80
    +<span class="lineno">   33 </span>
    
    81
    +<span class="lineno">   34 </span><span class="decl"><span class="nottickedoff">unused_ a = a</span></span>
    
    82
    +<span class="lineno">   35 </span>
    
    83
    +<span class="lineno">   36 </span>badCase :: Int -&gt; Int -&gt; Int
    
    84
    +<span class="lineno">   37 </span><span class="decl"><span class="istickedoff">badCase a b = </span>
    
    85
    +<span class="lineno">   38 </span><span class="spaces">        </span><span class="istickedoff">if a &gt; 100 </span>
    
    86
    +<span class="lineno">   39 </span><span class="spaces">        </span><span class="istickedoff">then error &quot;badCase&quot; </span>
    
    87
    +<span class="lineno">   40 </span><span class="spaces">        </span><span class="istickedoff">else if <span class="tickonlyfalse">a &gt; 1000</span> </span>
    
    88
    +<span class="lineno">   41 </span><span class="spaces">             </span><span class="istickedoff">then <span class="nottickedoff">1</span> </span>
    
    89
    +<span class="lineno">   42 </span><span class="spaces">             </span><span class="istickedoff">else badCase (a + 1) <span class="nottickedoff">(b - 1)</span></span></span>
    
    90
    +<span class="lineno">   43 </span>
    
    91
    +<span class="lineno">   44 </span>
    
    92
    +<span class="lineno">   45 </span><span class="decl"><span class="istickedoff">foo2 = (1,2, if <span class="tickonlytrue">True</span> then 3 else <span class="nottickedoff">4</span>)</span></span>
    
    93
    +<span class="lineno">   46 </span>
    
    94
    +<span class="lineno">   47 </span><span class="decl"><span class="istickedoff">otherwoz = True</span></span>
    
    95
    +
    
    96
    +</pre>
    
    97
    +</body>
    
    98
    +</html>
    
    99
    +Writing: hpc_index.html
    
    100
    +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
    
    101
    +td.bar { background-color: #60de51;  }
    
    102
    +td.invbar { background-color: #f25913;  }
    
    103
    +table.dashboard { border-collapse: collapse  ; border: solid 1px black }
    
    104
    +.dashboard td { border: solid 1px black }
    
    105
    +.dashboard th { border: solid 1px black }
    
    106
    +</style></head><body><table class="dashboard" width="100%" border="1"><tr><th rowspan="2"><a href="hpc_index.html">module</a></th><th colspan="3"><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan="3"><a href="hpc_index_alt.html">Alternatives</a></th><th colspan="3"><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan="2">covered / total</th><th>%</th><th colspan="2">covered / total</th><th>%</th><th colspan="2">covered / total</th></tr><tr><td>&nbsp;&nbsp;<code>module&nbsp;<a href="Main.hs.html">Main</a></code></td><td align="right">83%</td><td>5/6</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="83%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="58%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">73%</td><td>73/100</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="73%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td></tr><tr></tr><tr style="background: #e0e0e0"><th align="left">&nbsp;&nbsp;Program Coverage Total</th><td align="right">83%</td><td>5/6</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="83%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="58%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">73%</td><td>73/100</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="73%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td></tr></table></body></html>Writing: hpc_index_fun.html
    
    107
    +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
    
    108
    +td.bar { background-color: #60de51;  }
    
    109
    +td.invbar { background-color: #f25913;  }
    
    110
    +table.dashboard { border-collapse: collapse  ; border: solid 1px black }
    
    111
    +.dashboard td { border: solid 1px black }
    
    112
    +.dashboard th { border: solid 1px black }
    
    113
    +</style></head><body><table class="dashboard" width="100%" border="1"><tr><th rowspan="2"><a href="hpc_index.html">module</a></th><th colspan="3"><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan="3"><a href="hpc_index_alt.html">Alternatives</a></th><th colspan="3"><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan="2">covered / total</th><th>%</th><th colspan="2">covered / total</th><th>%</th><th colspan="2">covered / total</th></tr><tr><td>&nbsp;&nbsp;<code>module&nbsp;<a href="Main.hs.html">Main</a></code></td><td align="right">83%</td><td>5/6</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="83%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="58%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">73%</td><td>73/100</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="73%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td></tr><tr></tr><tr style="background: #e0e0e0"><th align="left">&nbsp;&nbsp;Program Coverage Total</th><td align="right">83%</td><td>5/6</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="83%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="58%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">73%</td><td>73/100</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="73%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td></tr></table></body></html>Writing: hpc_index_alt.html
    
    114
    +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
    
    115
    +td.bar { background-color: #60de51;  }
    
    116
    +td.invbar { background-color: #f25913;  }
    
    117
    +table.dashboard { border-collapse: collapse  ; border: solid 1px black }
    
    118
    +.dashboard td { border: solid 1px black }
    
    119
    +.dashboard th { border: solid 1px black }
    
    120
    +</style></head><body><table class="dashboard" width="100%" border="1"><tr><th rowspan="2"><a href="hpc_index.html">module</a></th><th colspan="3"><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan="3"><a href="hpc_index_alt.html">Alternatives</a></th><th colspan="3"><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan="2">covered / total</th><th>%</th><th colspan="2">covered / total</th><th>%</th><th colspan="2">covered / total</th></tr><tr><td>&nbsp;&nbsp;<code>module&nbsp;<a href="Main.hs.html">Main</a></code></td><td align="right">83%</td><td>5/6</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="83%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="58%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">73%</td><td>73/100</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="73%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td></tr><tr></tr><tr style="background: #e0e0e0"><th align="left">&nbsp;&nbsp;Program Coverage Total</th><td align="right">83%</td><td>5/6</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="83%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="58%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">73%</td><td>73/100</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="73%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td></tr></table></body></html>Writing: hpc_index_exp.html
    
    121
    +<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style type="text/css">table.bar { background-color: #f25913; }
    
    122
    +td.bar { background-color: #60de51;  }
    
    123
    +td.invbar { background-color: #f25913;  }
    
    124
    +table.dashboard { border-collapse: collapse  ; border: solid 1px black }
    
    125
    +.dashboard td { border: solid 1px black }
    
    126
    +.dashboard th { border: solid 1px black }
    
    127
    +</style></head><body><table class="dashboard" width="100%" border="1"><tr><th rowspan="2"><a href="hpc_index.html">module</a></th><th colspan="3"><a href="hpc_index_fun.html">Top Level Definitions</a></th><th colspan="3"><a href="hpc_index_alt.html">Alternatives</a></th><th colspan="3"><a href="hpc_index_exp.html">Expressions</a></th></tr><tr><th>%</th><th colspan="2">covered / total</th><th>%</th><th colspan="2">covered / total</th><th>%</th><th colspan="2">covered / total</th></tr><tr><td>&nbsp;&nbsp;<code>module&nbsp;<a href="Main.hs.html">Main</a></code></td><td align="right">83%</td><td>5/6</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="83%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="58%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">73%</td><td>73/100</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="73%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td></tr><tr></tr><tr style="background: #e0e0e0"><th align="left">&nbsp;&nbsp;Program Coverage Total</th><td align="right">83%</td><td>5/6</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="83%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">58%</td><td>7/12</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="58%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td><td align="right">73%</td><td>73/100</td><td width="100"><table cellpadding="0" cellspacing="0" width="100%" class="bar"><tr><td><table cellpadding="0" cellspacing="0" width="73%"><tr><td height="12" class="bar"></td></tr></table></td></tr></table></td></tr></table></body></html>

  • testsuite/tests/hpc/function2/test.T
    ... ... @@ -14,3 +14,14 @@ test('tough2',
    14 14
            omit_ways(ghci_ways + prof_ways), # profile goes in the wrong place
    
    15 15
            when(arch('wasm32'), fragile(23243)) ],
    
    16 16
          multimod_compile_and_run, ['subdir/tough2.lhs', '-fhpc'])
    
    17
    +
    
    18
    +# Same as tough2, but for ghci
    
    19
    +test('tough3',
    
    20
    +     [extra_files(['../hpcrun.pl', 'subdir/']),
    
    21
    +       literate,
    
    22
    +       cmd_prefix(hpc_prefix),
    
    23
    +       ignore_extension,
    
    24
    +       extra_hc_opts('-fhpc subdir/tough2.lhs'),
    
    25
    +       omit_ways(ghci_ways + prof_ways), # profile goes in the wrong place
    
    26
    +       when(arch('wasm32'), fragile(23243)) ],
    
    27
    +     ghci_script, ['tough3.script'])

  • testsuite/tests/hpc/function2/tough3.script
    1
    +:main
    
    2
    +:quit

  • testsuite/tests/hpc/ghc_ghci/Makefile
    ... ... @@ -9,7 +9,7 @@ hpc_ghc_ghci:
    9 9
     
    
    10 10
     hpc_ghc_ghci_bytecode:
    
    11 11
     	rm -f ./*.tix
    
    12
    -	printf "main\n:quit\n" | '$(TEST_HC)' $(TEST_HC_OPTS_INTERACTIVE) -fhpc -fbyte-code-and-object-code -fprefer-byte-code BytecodeMain.hs
    
    12
    +	'$(TEST_HC)' $(TEST_HC_OPTS_INTERACTIVE) -fhpc -fbyte-code-and-object-code -fprefer-byte-code BytecodeMain.hs -e "main" -e ":quit"
    
    13 13
     	@[ -f .hpc/Main.mix ] || (echo "ERROR: Expected .hpc/Main.mix file not found"; exit 1)
    
    14 14
     	@set -- ./*.tix; [ -f "$$1" ] || (echo "ERROR: Expected .tix file not found"; exit 1); '$(HPC)' report "$$1" Main > hpc-report.txt
    
    15 15
     	@grep -F "100% expressions used" hpc-report.txt >/dev/null || (echo "ERROR: Expected full expression coverage in hpc report"; cat hpc-report.txt; exit 1)

  • testsuite/tests/hpc/hpcrun.pl
    ... ... @@ -4,11 +4,12 @@
    4 4
     
    
    5 5
     while($ARGV[0] =~ /^--/) {
    
    6 6
       $arg = shift @ARGV;
    
    7
    +  last if ($arg eq '--');
    
    7 8
       if ($arg =~ /--hpc=(.*)/) {
    
    8 9
         $HPC = $1;
    
    9
    -  } 
    
    10
    +  }
    
    10 11
       elsif ($arg =~ /--clear/) {
    
    11
    -    $CLEAR = 1;       
    
    12
    +    $CLEAR = 1;
    
    12 13
       }
    
    13 14
       elsif ($arg =~ /--exeext=(.*)/) {
    
    14 15
         $exeext = $1;
    
    ... ... @@ -19,8 +20,10 @@ while($ARGV[0] =~ /^--/) {
    19 20
     }
    
    20 21
     
    
    21 22
     die "no option --hpc=* provided\n" if (!defined($HPC));
    
    22
    -        
    
    23
    -$binary = $ARGV[0] . $exeext;
    
    23
    +
    
    24
    +# Skip over any KEY=VALUE env assignments to find the real executable
    
    25
    +my $exe = (grep { !/^\w+=/ } @ARGV)[0];
    
    26
    +$binary = $exe . $exeext;
    
    24 27
     
    
    25 28
     # get the basename: needed for the test function/subdir/tough2
    
    26 29
     $binary =~ s/^.*\/([^\/]*)$/$1/;
    
    ... ... @@ -38,7 +41,7 @@ while(<MARKUP>) {
    38 41
       my $line = $_;
    
    39 42
       print $line;
    
    40 43
       if (/Writing: (\S+.html)/) {
    
    41
    -     system("cat $1");        
    
    44
    +     system("cat $1");
    
    42 45
       }
    
    43 46
     }
    
    44 47
     print "\n\n";

  • testsuite/tests/hpc/simple/Makefile
    ... ... @@ -2,3 +2,12 @@ TOP=../../..
    2 2
     include $(TOP)/mk/boilerplate.mk
    
    3 3
     include $(TOP)/mk/test.mk
    
    4 4
     
    
    5
    +hpc002:
    
    6
    +	"$(TEST_HC)" $(TEST_HC_OPTS_INTERACTIVE) $(TEST_HC_ARGS) hpc002.hs -fhpc -v0 -e ":main"
    
    7
    +	"$(HPC)" report ghc
    
    8
    +	"$(HPC)" report ghc --per-module
    
    9
    +	LANG=ASCII "$(HPC)" markup ghc
    
    10
    +
    
    11
    +hpc003:
    
    12
    +	"$(TEST_HC)" $(TEST_HC_OPTS_INTERACTIVE) $(TEST_HC_ARGS) -fhpc -v0 < hpc003.script
    
    13
    +	"$(HPC)" report ghc || echo "Can't summarise file that is ':load'ed"

  • testsuite/tests/hpc/simple/hpc002.hs
    1
    +main = print (const "Hello" "World")

  • testsuite/tests/hpc/simple/hpc002.stdout
    1
    +"Hello"
    
    2
    + 75% expressions used (3/4)
    
    3
    +100% boolean coverage (0/0)
    
    4
    +     100% guards (0/0)
    
    5
    +     100% 'if' conditions (0/0)
    
    6
    +     100% qualifiers (0/0)
    
    7
    +100% alternatives used (0/0)
    
    8
    +100% local declarations used (0/0)
    
    9
    +100% top-level declarations used (1/1)
    
    10
    +-----<module Main>-----
    
    11
    + 75% expressions used (3/4)
    
    12
    +100% boolean coverage (0/0)
    
    13
    +     100% guards (0/0)
    
    14
    +     100% 'if' conditions (0/0)
    
    15
    +     100% qualifiers (0/0)
    
    16
    +100% alternatives used (0/0)
    
    17
    +100% local declarations used (0/0)
    
    18
    +100% top-level declarations used (1/1)
    
    19
    +Writing: Main.hs.html
    
    20
    +Writing: hpc_index.html
    
    21
    +Writing: hpc_index_fun.html
    
    22
    +Writing: hpc_index_alt.html
    
    23
    +Writing: hpc_index_exp.html

  • testsuite/tests/hpc/simple/hpc003.hs
    1
    +main = print (const "Hello" "World")

  • testsuite/tests/hpc/simple/hpc003.script
    1
    +:load hpc003.hs
    
    2
    +:main

  • testsuite/tests/hpc/simple/hpc003.stderr
    1
    +hpc: Uncaught exception ghc-internal:GHC.Internal.Exception.ErrorCall:
    
    2
    +
    
    3
    +can not find interactivezmsession_Main in ./.hpc
    
    4
    +
    
    5
    +HasCallStack backtrace:
    
    6
    +  error, called at libraries/hpc/Trace/Hpc/Mix.hs:110:15 in hpc-0.7.0.2-inplace:Trace.Hpc.Mix
    
    7
    +

  • testsuite/tests/hpc/simple/hpc003.stdout
    1
    +"Hello"
    
    2
    +Can't summarise file that is ':load'ed

  • testsuite/tests/hpc/simple/test.T
    ... ... @@ -7,3 +7,16 @@ test('hpc001', [extra_files(['../hpcrun.pl']), cmd_prefix(hpc_prefix),
    7 7
          ignore_extension
    
    8 8
          ],
    
    9 9
          compile_and_run, ['-fhpc'])
    
    10
    +
    
    11
    +test('hpc002',
    
    12
    +     [ when(arch('wasm32'), fragile(23243))
    
    13
    +     , ignore_extension
    
    14
    +     ],
    
    15
    +     makefile_test, [])
    
    16
    +
    
    17
    +test('hpc003',
    
    18
    +     [ when(arch('wasm32'), fragile(23243))
    
    19
    +     , ignore_extension
    
    20
    +     , extra_files(['hpc003.script'])
    
    21
    +     ],
    
    22
    +     makefile_test, [])