During code development, you do a lot of small tests in order to test its functionality. This could be called manual testing. Typically, you would test if a given function does what it is supposed to do, by manually testing the function in an interactive environment. For instance, suppose that you implement the bisection algorithm. It is an algorithm that finds a zero (root) of a scalar non-linear function. To start the algorithm, an interval has to be given with the property that the function takes different signs on the interval boundaries (see Exercise 4 in Section 7.10: Exercises, for more information).
You will then test an implementation of that algorithm, typically by checking that:
- A solution is found when the function has opposite signs at the interval boundaries.
- An exception is raised when the function has the same sign at the interval boundaries.
Manual testing, as necessary as it may seem to be, is unsatisfactory. Once you have convinced yourself...