Table-driven testing
The idea behind table-driven tests is similar to property-based testing. The difference here is that instead of generators providing random values, the set of input values is manually specified. The way we do this is by declaring a table structure that can be hardcoded into the test or loaded from a file.
The easiest approach is to simply hardcode the table, and this works fine if we have a small range of input values or edge cases we want to test. For example, we may have a function with three Boolean input values and want to test the combinations. The first step is to define the table that contains the combinations we want to test:
val table = table( headers("a", "b", "c"), row(true, true, true), row(true, false, true), row(true, false, false) )
Notice that we use the headers and row helper functions. The header is important. It is not used for the input but is used to label the values that will...