1. Introduction
Numerical programs are vital to our daily lives. They have been used not only in various theoretical disciplines, but also engineering and medical practices including mission-critical and safety-critical applications. Unfortunately, despite the importance of the quality of numerical packages, we are far from doing a good job [17]. Like other testing contexts, we usually assume that we can verify the actual outputs of numerical software against some expected results. We call the mechanism of checking the correctness of the test output as a test oracle [5], [15]. Developers of numerical software generally adopt the following mechanisms as test oracles:
Comparing with analytical solutions, simulation results, tabulated values, or hand-calculations [15].
Verifying with standard mathematical libraries or reference software packages [7].