Very interesting stuff. I did notice that this bug was due to a broken test procedure, a simple test loop during the initial write would have brought this problem out instantly.<p>If your code has an integer range of several 10's of thousands of input possibilities and it costs you next to nothing to run it why not exhaustively test that function?<p>That way your confidence goes up tremendously, just a couple of edge cases vs the whole range, I know which one I'd pick.<p>The run output would simply be two columns of integers, very easy to scan for errors. (the output should be equal or monotonous increase from day by day, and should not hang...).<p>Of course that's after the fact, but there is really no routine so trivial that you can get away without really testing if it does what you intended.
Westley Weimer has a presentation on the same @ Stanford University today at 2pm (1 hr from now) in Gates 104<p>Map - <a href="http://maps.google.com/maps?f=q&source=s_q&hl=en&geocode=&q=Gates+104,+stanford&sll=37.0625,-95.677068&sspn=45.957536,93.076172&ie=UTF8&ll=37.430173,-122.172963&spn=0.001414,0.00284&t=h&z=19" rel="nofollow">http://maps.google.com/maps?f=q&source=s_q&hl=en&...</a>
Don't get too excited, this requires unit tests to detect the bug. In other words, if you already have a pretty good understanding of the bug, this thing will evolve a fix for you instead of having to write it yourself.<p>If you can write an algorithm that <i>finds</i> bugs, then you've really got something.