src/HOL/Mutabelle/lib/Tools/mutabelle
author krauss
Fri, 25 Mar 2011 21:38:41 +0100
changeset 42119 21714b0de625
parent 41949 f9a2e10c49cb
child 43148 092e38108f3f
permissions -rwxr-xr-x
eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
     1
#!/usr/bin/env bash
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
     2
#
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
     3
# Author: Lukas Bulwahn
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
     4
#
41309
2e9bf718a7a1 some attempts to fit diagnostic output into regular TTY (75-80 characters per line);
wenzelm
parents: 41191
diff changeset
     5
# DESCRIPTION: mutant-testing for counterexample generators and automated tools
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
     6
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
     7
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
     8
PRG="$(basename "$0")"
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
     9
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    10
function usage() {
42119
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
    11
  [ -n "$MUTABELLE_OUTPUT_PATH" ] || MUTABELLE_OUTPUT_PATH="None"
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    12
  echo
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    13
  echo "Usage: isabelle $PRG [OPTIONS] THEORY"
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    14
  echo
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    15
  echo "  Options are:"
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    16
  echo "    -L LOGIC     parent logic to use (default $MUTABELLE_LOGIC)"
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    17
  echo "    -T THEORY    parent theory to use (default $MUTABELLE_IMPORT_THEORY)"
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    18
  echo "    -O DIR       output directory for test data (default $MUTABELLE_OUTPUT_PATH)"
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    19
  echo
41309
2e9bf718a7a1 some attempts to fit diagnostic output into regular TTY (75-80 characters per line);
wenzelm
parents: 41191
diff changeset
    20
  echo "  THEORY is the name of the theory of which all theorems should be"
2e9bf718a7a1 some attempts to fit diagnostic output into regular TTY (75-80 characters per line);
wenzelm
parents: 41191
diff changeset
    21
  echo "  mutated and tested."
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    22
  echo
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    23
  exit 1
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    24
}
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    25
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    26
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    27
## process command line
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    28
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    29
# options
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    30
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    31
MUTABELLE_IMPORTS=""
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    32
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    33
while getopts "L:T:O:" OPT
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    34
do
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    35
  case "$OPT" in
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    36
    L)
41021
3efa0ec42ed4 adapting copied bash code in mutabelle script
bulwahn
parents: 40975
diff changeset
    37
      MUTABELLE_LOGIC="$OPTARG"
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    38
      ;;
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    39
    T)
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    40
      MUTABELLE_IMPORTS="$MUTABELLE_IMPORTS \"$OPTARG\""
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    41
      ;;
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    42
    O)      
41021
3efa0ec42ed4 adapting copied bash code in mutabelle script
bulwahn
parents: 40975
diff changeset
    43
      MUTABELLE_OUTPUT_PATH="$OPTARG"
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    44
      ;;
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    45
    \?)
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    46
      usage
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    47
      ;;
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    48
  esac
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    49
done
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    50
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    51
shift $(($OPTIND - 1))
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    52
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    53
if [ "$MUTABELLE_IMPORTS" = "" ]
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    54
then
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    55
  MUTABELLE_IMPORTS="$MUTABELLE_IMPORT_THEORY"
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    56
fi
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    57
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    58
[ "$#" -ne 1 ] && usage
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    59
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    60
MUTABELLE_TEST_THEORY="$1"
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    61
42119
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
    62
if [ -z "$MUTABELLE_OUTPUT_PATH" ]; then
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
    63
  MUTABELLE_OUTPUT_PATH="${ISABELLE_TMP_PREFIX}-mutabelle$$"
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
    64
  PURGE_OUTPUT="true"
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
    65
fi
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
    66
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    67
export MUTABELLE_OUTPUT_PATH
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    68
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    69
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    70
## main
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    71
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    72
echo "Starting Mutabelle..."
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    73
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    74
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    75
# setup
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    76
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
    77
mkdir -p "$MUTABELLE_OUTPUT_PATH"
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    78
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    79
echo "theory Mutabelle_Test
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
    80
imports $MUTABELLE_IMPORTS
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    81
uses     
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    82
  \"$MUTABELLE_HOME/mutabelle.ML\"
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    83
  \"$MUTABELLE_HOME/mutabelle_extra.ML\"
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    84
begin
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    85
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    86
ML {*
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    87
val mtds = [
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    88
  MutabelleExtra.quickcheck_mtd (Config.put Quickcheck.tester \"random\") \"random\",
41191
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
    89
  MutabelleExtra.quickcheck_mtd (Config.put Quickcheck.tester \"exhaustive\") \"exhaustive\",
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
    90
  MutabelleExtra.nitpick_mtd
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    91
]
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    92
*}
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    93
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    94
ML {*
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    95
fun mutation_testing_of thy =
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    96
  (MutabelleExtra.random_seed := 1.0;
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    97
  MutabelleExtra.thms_of false thy
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    98
  |> (fn thms => MutabelleExtra.mutate_theorems_and_write_report
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
    99
         @{theory} mtds thms (\"$MUTABELLE_OUTPUT_PATH/log\")))
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   100
*}
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   101
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   102
ML {*
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   103
  mutation_testing_of @{theory $MUTABELLE_TEST_THEORY}
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   104
*}
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   105
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
   106
end" > "$MUTABELLE_OUTPUT_PATH/Mutabelle_Test.thy"
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   107
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
   108
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   109
# execution
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   110
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
   111
"$ISABELLE_PROCESS" -e 'use_thy "$MUTABELLE_OUTPUT_PATH/Mutabelle_Test"' -q "$MUTABELLE_LOGIC" > /dev/null 2>&1
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
   112
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
   113
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
   114
[ $? -ne 0 ] && echo "isabelle processing of mutabelle failed"
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   115
41949
f9a2e10c49cb more conventional Mutabelle settings -- similar to Mirabelle;
wenzelm
parents: 41309
diff changeset
   116
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   117
# make statistics
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   118
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
   119
function count() {
41191
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
   120
  cat "$MUTABELLE_OUTPUT_PATH/log" | grep "$1: $2" | wc -l
41077
fd6f41d349ef improving the mutabelle script
bulwahn
parents: 41021
diff changeset
   121
}
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   122
41191
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
   123
echo "random      : C: $(count "quickcheck_random" "GenuineCex") N: $(count "quickcheck_random" "NoCex") \
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
   124
T: $(count "quickcheck_random" "Timeout") E: $(count "quickcheck_random" "Error")"
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
   125
echo "exhaustive  : C: $(count "quickcheck_exhaustive" "GenuineCex") N: $(count "quickcheck_exhaustive" "NoCex") \
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
   126
T: $(count "quickcheck_exhaustive" "Timeout") E: $(count "quickcheck_exhaustive" "Error")"
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
   127
echo "nitpick     : C: $(count "nitpick" "GenuineCex") N: $(count "nitpick" "NoCex") \
4aa6465fec65 added nitpick to mutabelle script
bulwahn
parents: 41077
diff changeset
   128
T: $(count "nitpick" "Timeout") E: $(count "nitpick" "Error")"
40975
498f272b4bcb adding mutabelle as a component and an isabelle tool to be used in regression testing
bulwahn
parents:
diff changeset
   129
42119
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
   130
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
   131
## cleanup
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
   132
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
   133
if [ -n "$PURGE_OUTPUT" ]; then
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
   134
  rm -rf "$MUTABELLE_OUTPUT_PATH"
21714b0de625 eliminated hardwired MUTABELLE_OUTPUT_PATH (cf. 6a147393c62a)
krauss
parents: 41949
diff changeset
   135
fi