Skip to content

Pup

Don’t just test it.
Prove it.

Pup turns your unit tests into proven guarantees.
Never miss an edge case again.

One test to rule them all.

Test infinite possibilities, all at once.

One test. Every possible input.
Proved across the whole codebase.

Meet Supertests.

A unit test checks examples. A supertest defines how your software must behave for every possible input.

tests/supertests.py PYTHON MODE
1 from schematic import *
55 @supertest
56 def reversing_twice_restores_text(text: str):
57 backward = reverse(text)
58 forward = reverse(backward)
59 assert forward == text
  1. 1
    Declare a supertest

    Adding @supertest turns a regular test into a supertest.

  2. 2
    Inputs represent every possible case

    The input text covers every possible string, not just a few examples.

  3. 3
    Assert as usual

    Assert or throw an exception just as you would in a regular unit test. Pup handles the rest.

See Pup in action

From supertest to certainty.

Pup is a developer CLI that checks supertests against exact commits. It follows each check live, surfaces problems with reproducible evidence, and helps you fix and recheck the affected behavior.

Pup
supertest-pythonmain

Run pup check supertests/normalize_spaces.py. The same live view changes from checking to fail for normalizing_twice_changes_nothing. The counterexample is a followed by three spaces and b: the first call leaves two spaces, and the second leaves one. Run pup fix --check 1 to review the patch, type y, and press Enter to apply it. The changes are uncommitted. Run pup check --problems, type y and press Enter to include the changes, and follow the checking progress until the result is pass.

Measured on real code

Test infinite possibilities, all at once.

Across nine open-source C, Rust, and Python case studies, supertests made the test suites smaller
while strengthening what they could guarantee.

In IndexMap, 7 supertests
replaced 130 tests and properties,
resulting in

18× test suite
compression
50%fewer test
lines overall
135supertests
written

Bugs were a way of life.
No longer.

Give Pup the behavior your software must preserve. Get a verified guarantee, or the exact input that breaks it.

Get access
Also from SchematicTurn written rules into guarantees with Quill. Explore Quill