Theory MutabelleExtra

theory MutabelleExtra
imports Complex_Main "HOL-Library.Refute"
(*  "~/repos/afp/thys/AVL-Trees/AVL"
  "~/repos/afp/thys/BinarySearchTree/BinaryTree"
  "~/repos/afp/thys/Huffman/Huffman"
  "~/repos/afp/thys/List-Index/List_Index"
  "~/repos/afp/thys/Matrix/Matrix"
  "~/repos/afp/thys/NormByEval/NBE"
  "~/repos/afp/thys/Polynomials/Polynomial"
  "~/repos/afp/thys/Presburger-Automata/Presburger_Automata"
  "~/repos/afp/thys/Abstract-Rewriting/Abstract_Rewriting"*)
begin

ML_file ‹mutabelle.ML›
ML_file ‹mutabelle_extra.ML›


section ‹configuration›

ML val log_directory = ""


quickcheck_params [quiet, finite_types = false, report = false, size = 5, iterations = 1000]

(*
nitpick_params [timeout = 5, sat_solver = MiniSat, no_overlord, verbose, card = 1-5, iter = 1,2,4,8,12]
refute_params [maxtime = 10, minsize = 1, maxsize = 5, satsolver = jerusat]
*)

ML val mtds = [
  MutabelleExtra.quickcheck_mtd (Config.put Quickcheck.finite_types false) "random",
  MutabelleExtra.quickcheck_mtd (Config.put Quickcheck.finite_types true) "random",
  MutabelleExtra.quickcheck_mtd (Config.put Quickcheck.finite_types false) "small",
  MutabelleExtra.quickcheck_mtd (Config.put Quickcheck.finite_types true) "small"
]

ML fun mutation_testing_of (name, thy) =
  (MutabelleExtra.init_random 1.0;
  MutabelleExtra.thms_of false thy
  |> MutabelleExtra.take_random 200
  |> (fn thms => MutabelleExtra.mutate_theorems_and_write_report
         theory (1, 50) mtds thms (log_directory ^ "/" ^ name)))
  

text ‹Uncomment the following ML code to check the counterexample generation with all theorems of Complex_Main.›

(*
ML {*

      MutabelleExtra.init_random 1.0;
      MutabelleExtra.thms_of true @{theory Complex_Main}
      |> MutabelleExtra.take_random 1000000
      |> (fn thms => List.drop (thms, 1000))
      |> (fn thms => MutabelleExtra.mutate_theorems_and_write_report
             @{theory} [
                        MutabelleExtra.quickcheck_mtd "code",
                        MutabelleExtra.smallcheck_mtd
                        (*MutabelleExtra.refute_mtd,
                        MutabelleExtra.nitpick_mtd*)] thms "/tmp/muta.out")

 *}
*)

section ‹Mutation testing Isabelle theories›

subsection ‹List theory›

(*
ML {*
mutation_testing_of ("List", @{theory List})
 *}
*)

section ‹Mutation testing AFP theories›

subsection ‹AVL-Trees›

(*
ML {*
mutation_testing_of ("AVL-Trees", @{theory AVL})
 *}
*)

subsection ‹BinaryTree›

(*
ML {*
mutation_testing_of ("BinaryTree", @{theory BinaryTree})
 *}
*)

subsection ‹Huffman›

(*
ML {*
mutation_testing_of ("Huffman", @{theory Huffman})
 *}
*)

subsection ‹List_Index›

(*
ML {*
mutation_testing_of ("List_Index", @{theory List_Index})
 *}
*)

subsection ‹Matrix›

(*
ML {*
mutation_testing_of ("Matrix", @{theory Matrix})
 *}
*)

subsection ‹NBE›

(*
ML {*
mutation_testing_of ("NBE", @{theory NBE})
 *}
*)

subsection ‹Polynomial›

(*
ML {*
mutation_testing_of ("Polynomial", @{theory Polynomial})
 *}
*)

subsection ‹Presburger Automata›

(*
ML {*
mutation_testing_of ("Presburger_Automata", @{theory Presburger_Automata})
 *}
*)

end