Seems hard to prove that an algorithm works by finding counterexamples.
Then again proving code works isn't everything either. There's a reason Knuth once stated "Beware of bugs in the above code; I have only proved it correct, not tried it."
Type checking is a nice intermediate, though not all languages allow all properties you care about to be encoded in types.