January 2019
Intermediate to advanced
376 pages
8h 49m
English
The first property doesn’t have to be fancy. In fact, it’s better if it’s simple. Start with something trivial-looking that represents how we want to use the program. Then, our job as developers is to make sure we can write code that matches our expectations, or to change them. Of our two properties, the simplest one concerns counting sums without caring about specials.
You’ll want to avoid a property definition such as sum(ItemList, PriceList) =:= checkout:total(ItemList, PriceList, []) since that would risk making the test similar to the implementation. A good approach to try here is generalizing regular example-based tests. Let’s imagine a few cases:
| | 20 = checkout:total(["A","B","A"], [{"A",5},{"B",10}], ... |