This chapter covers:
- Writing code and development process with testing in mind
- Unit-testing, property-testing and other approaches to testing
- Improving code quality
Every customer is happy to get a correct software. It is often claimed that Haskell type system provides software correctness. Unfortunately, there are some limitations to what the current type system is able to guarantee. That’s why we still need to test our code. Haskell supports many approaches to code correctness assurance ranging from unit-testing and property testing to lightweight formal verification. We don’t have to apply all of them, but it’s a good idea to apply at least some. Once we have tests, it’s much easier to refactor the code or make it run faster.
In this chapter, I present testing with an example of IP addresses processing built from scratch. We’ll continue working with this example later in this book, to explore code behavior and tune performance.
We work on a small utility program, namely an IPv4 filtering application. It should check whether a given IPv4 address falls into some range from a large IP addresses range database (given as a text file). This utility may be a part of a large project on implementing IP firewall in Haskell.
![]() |
Example: IPv4 filtering application |
---|---|
🗋 ip/lookup/ ⚡ iplookup 👉 It’s too easy to introduce errors into the code without tests |