Skip to main content

Crate chaos_theory

Crate chaos_theory 

Source
Expand description

chaos_theory is a modern property-based testing and structure-aware fuzzing library.

You drive tests using Source to get structured pseudo-random values and control flow, chaos_theory ensures that this exploration is efficient and any failures found are automatically minimized.

§Quickstart

use chaos_theory::check;

#[test]
fn sort_strings() {
    check(|src| {
        let mut strings: Vec<String> = src.any("strings");
        strings.sort();
        assert!(strings.is_sorted(), "unsorted after sort: {strings:?}");
    });
}

More complete examples:

When a failure happens, chaos_theory prints a CHAOS_THEORY_REPLAY=... string you can use to reproduce the case.

§Highlights

  • Property testing and structure-aware fuzzing in one library
  • Efficient state space exploration:
    • bias towards small values and edge cases
    • structural mutations and crossover
    • example-guided generation
    • built-in swarm testing
  • Macro-free, immediate-mode API: generate values and control flow as the test runs
  • Zero unsafe code, zero required dependencies and no_std-compatible

§Documentation

Modules§

_docs
Additional documentation.
_examples
Complete examples.
make
Collection of built-in generator implementations.

Macros§

assume
Mark the current test case as invalid if the expression is false.
fuzz_target_libfuzzer
Define a libfuzzer_sys fuzz target compatible with cargo-fuzz.
vdbg
dbg wrapper that only outputs values for visible test case runs.
veprintln
eprintln wrapper that only outputs values for visible test case runs.
vprintln
println wrapper that only outputs values for visible test case runs.

Structs§

Config
Builder for a customized Env.
Env
Structural pseudo-random generation and property-checking environment.
Gen
Type-erased generator of T, implemented as a boxed trait object.
GenShared
Thread-safe type-erased generator of T, implemented as a boxed trait object.
Source
Primary interface for working with pseudo-random data and control flow.
SourceEx
Lower-level variant of Source with explicit example threading and structural control.

Enums§

Effect
Result of the Source::repeat or SourceEx::repeat step.
MaybeOwned
Type that represents either owned or borrowed values.

Traits§

Arbitrary
A trait for types that have a default Generator implementation.
Generator
A trait for types that describe composable generation of values.
OptionExt
Utility trait to give Option an OptionExt::assume_some helper.

Functions§

checkstd
Check that property holds (does not panic).
should_log
Determine whether debug output should be emitted for the current test-case run.

Derive Macros§

Arbitraryderive
Derives an implementation of chaos_theory::Arbitrary.