MyNixOS website logo
Description

coverage driven random testing framework.

Kudzu is a coverage driven random testing framework

KUDZU will slowly grow to cover all of your code

Kudzu is a library that throws test cases at your property tests until the code coverage no longer increases.

WHY?

Property testing has no feedback loop, you randomly choose a number of test cases and hope for the best.

How do you know if your property tests were any good? The best feedback I know is to use hpc and look at the pretty colored HTML output to see what code was exercised.

But wait, why do I have to look at the output? Isn't that why we have computers?

HOW?

In Haskell, you can get code coverage results while your program is running!

WHAT FEEDBACK LOOP?

The simplest feedback loop is to keep running random tests until new code coverage stops increasing.

HOW DO I MAKE IT GO?

  1. add kudzu to your test-suite depends,
  2. import the Kudzu module
  3. call the testUntil function of your choice
    1. testUntilSameQCMany or testUntilSameQC
    2. testUntilSameHHMany or testUntilSameHH
    3. testUntilSameLCMany or testUntilsameLC
  4. run with cabal test --enable-coverage

TELL ME MORE

The best write up of this idea is Random Test Generation, Coverage Based.

TODO

  • [x] support HedgeHog
  • [x] support QuickCheck
  • [x] support LeanCheck
  • [ ] figure out how to use Kudzu on Kudzu without looping forever

EXAMPLE

You can see kudzu in use in the tests for takedouble.

Metadata

Version

0.1.1.0

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows