CtrlK
BlogDocsLog inGet started
Tessl Logo

evilissimo/property-based-testing

Generates **property-based tests** that use randomized input generation to validate invariants and contracts (rather than hand-picked examples). Triggers when the conversation involves: PBT frameworks (Hypothesis library for Python, fast-check for TypeScript, proptest for Rust, rapid for Go, RapidCheck for C++); concepts like invariants, contracts, round-trip symmetry, encode/decode, serialize/deserialize, generative testing, or shrinking; or requests to find edge cases that example-based tests miss — e.g., "find edge cases automatically", "test all possible inputs", "verify this property holds". Does NOT trigger for: writing regular example-based unit tests, debugging, CI/CD setup, UI/component testing, or integration/E2E testing. Identifies up to 7 property patterns (round-trip, idempotence, invariance, metamorphic, inverse, ordering, no-crash), designs input generators, writes property tests, and extracts regression tests from failures.

91

1.11x
Quality

90%

Does it follow best practices?

Impact

94%

1.11x

Average score across 5 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-3/

{
  "context": "Tests whether the agent uses Rust proptest correctly for serialization properties, including strategies, prop assertions, configuration, and shrink/regression handling.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Dependency note",
      "description": "Suggests adding proptest as a dev dependency if absent.",
      "max_score": 7
    },
    {
      "name": "Prelude import",
      "description": "Uses proptest::prelude::* in the Rust test code.",
      "max_score": 8
    },
    {
      "name": "proptest macro",
      "description": "Uses the proptest! macro or supported proptest invocation for generated tests.",
      "max_score": 9
    },
    {
      "name": "prop assertions",
      "description": "Uses prop_assert! or prop_assert_eq! inside property tests rather than ordinary assert macros.",
      "max_score": 10
    },
    {
      "name": "Config strategy",
      "description": "Defines a composed strategy for Config covering strings, u16 ports, u64 timeouts, vectors, booleans, and Option<u32>.",
      "max_score": 12
    },
    {
      "name": "Edge coverage",
      "description": "Strategy can produce empty strings, empty feature vectors, boundary numeric values, duplicates, and None/Some optional values unless explicitly constrained by contract.",
      "max_score": 10
    },
    {
      "name": "Round trip",
      "description": "Includes a serialize-then-deserialize property that checks equality with the original config.",
      "max_score": 12
    },
    {
      "name": "Valid no panic",
      "description": "Includes a property that valid generated configurations serialize/deserialize through Result handling without panicking.",
      "max_score": 8
    },
    {
      "name": "One per property",
      "description": "Separates distinct properties into separate tests or clearly separate proptest cases.",
      "max_score": 7
    },
    {
      "name": "Configurable cases",
      "description": "Mentions or uses ProptestConfig or PROPTEST_CASES to adjust the number of generated cases.",
      "max_score": 7
    },
    {
      "name": "Shrunk regression",
      "description": "Explains reading the minimal failing input and turning it into a deterministic regression test.",
      "max_score": 10
    }
  ]
}

evals

SKILL.md

tessl.json

tile.json