Provides guidance for property-based testing across multiple languages and smart contracts. Use when writing tests, reviewing code with serialization/validation/parsing patterns, designing features, or when property-based testing would provide stronger coverage than example-based tests.
View on GitHubtrailofbits/skills
property-based-testing
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/trailofbits/skills/blob/main/plugins/property-based-testing/skills/property-based-testing/SKILL.md -a claude-code --skill property-based-testingInstallation paths:
.claude/skills/property-based-testing/# Property-Based Testing Guide Use this skill proactively during development when you encounter patterns where PBT provides stronger coverage than example-based tests. ## When to Invoke (Automatic Detection) **Invoke this skill when you detect:** - **Serialization pairs**: `encode`/`decode`, `serialize`/`deserialize`, `toJSON`/`fromJSON`, `pack`/`unpack` - **Parsers**: URL parsing, config parsing, protocol parsing, string-to-structured-data - **Normalization**: `normalize`, `sanitize`, `clean`, `canonicalize`, `format` - **Validators**: `is_valid`, `validate`, `check_*` (especially with normalizers) - **Data structures**: Custom collections with `add`/`remove`/`get` operations - **Mathematical/algorithmic**: Pure functions, sorting, ordering, comparators - **Smart contracts**: Solidity/Vyper contracts, token operations, state invariants, access control **Priority by pattern:** | Pattern | Property | Priority | |---------|----------|----------| | encode/decode pair | Roundtrip | HIGH | | Pure function | Multiple | HIGH | | Validator | Valid after normalize | MEDIUM | | Sorting/ordering | Idempotence + ordering | MEDIUM | | Normalization | Idempotence | MEDIUM | | Builder/factory | Output invariants | LOW | | Smart contract | State invariants | HIGH | ## When NOT to Use Do NOT use this skill for: - Simple CRUD operations without transformation logic - One-off scripts or throwaway code - Code with side effects that cannot be isolated (network calls, database writes) - Tests where specific example cases are sufficient and edge cases are well-understood - Integration or end-to-end testing (PBT is best for unit/component testing) ## Property Catalog (Quick Reference) | Property | Formula | When to Use | |----------|---------|-------------| | **Roundtrip** | `decode(encode(x)) == x` | Serialization, conversion pairs | | **Idempotence** | `f(f(x)) == f(x)` | Normalization, formatting, sorting | | **Invariant** | Property holds before/after | Any transformation | |