Mutation testing asks the question coverage cannot: if this code were wrong, would a test fail? A tool makes small changes to the code, one at a time, such as < to <= or - to +. Each changed version is a mutant. If your tests fail, the mutant is killed. If they pass, it survived, and you have found a bug your suite would miss.
It is the most honest review of a generated suite, because a suite that asserts nothing kills nothing. In Python the usual tool is mutmut (mutmut run, then mutmut results); Java teams use PIT, and JavaScript teams use Stryker. This lesson uses a small mutation tester with the same idea and a fixed list of mutants, so runs are fast and repeatable.
Your task
Add tests to test_pricing.py until the mutation score is at least 0.8. Run shows which mutants survived. On submit, your tests also face mutants you have not seen, and a completely broken version of the module that a real test must fail on.