Testing algorithmically complex software using model programs