Algebraic program testing