property-based-testing-with-kotest — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited property-based-testing-with-kotest (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
invariants, round-trip operations, or many parameter combinations. Keep example-based tests for specific business scenarios and regression pinning.
decode(encode(x)) == x. For serialize/parse/compress pairs.sort preserves size and elements).f(f(x)) == f(x). For trim, distinct, upsert, PUT.Always identify at least two complementary properties per function under test.
Arb for random+edge-case generation (default),Exhaustive for small finite domains. Constrain generators at construction — don't rely on filter() or assume() (keep discard rate under 10%). For domain types, compose with arbitrary { ... } using .bind().
checkAll with Kotest matchers (preferred overforAll with booleans). Default: 1,000 iterations.
permanent example-based regression test. Keep the property test running to find future failures.
// build.gradle.kts
dependencies {
testImplementation("io.kotest:kotest-property:$kotestVersion")
}checkAll — richer error messages via matchers.Arb unless the domain is small and finite (enums, boolean).Bounded(1000). Use Unbounded only when debugging..bind() inside arbitrary {}, never kotlin.random.Random.Float→Double). Verify losslessness or test a weaker property.assume() only when the constraint can't be expressed in the generator. Prefer restructuring (e.g., val (larger, smaller) = if (a > b) a to b else b to a).checkAll/forAll, Arb vs Exhaustivearbitrary {}, domain compositionassume()PropTestConfig, global settings, common mistakes~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.