
Hi On Sat, 2010-04-24 at 19:25 +1000, Ivan Lazar Miljenovic wrote:
Roman Leshchinskiy
writes: John Goerzen gave one in the very first post of this thread: the fix to old-locale which didn't change any types but apparently changed the behaviour of a function quite drastically. Another example would be a change to the Ord instances for Float and Double which would have compare raise an exception on NaNs as discussed in a different thread on this list. Another one, which is admittedly silly but demonstrates my point, would be changing the implementation of map to
map _ _ = []
In general, any significant tightening/changing of preconditions and loosening/changing of postconditions would qualify.
OK, fair enough, I see how these can be considered changing the API. Thing is, whilst it would be possible in general to have a tool that determines if the API has changed based upon type signatures, etc. how would you go about automating the test for detecting if the "intention" of a function changes in this manner?
You could automatically generate QuickCheck tests for many pure functions. It will not catch every API change, but it would catch some. It would have caught the API change that John mentioned. But automatically generating QuickCheck tests to test if funOld == funNew, would require quite a bit work. But better than everybody having to write unit tests, as other have proposed. /Mads