There is major a bug found in iterator modeling: upon adding a value to or subtracting a value from an iterator the position of the original iterator is also changed beside the result. This patch fixes this bug.
To catch such bugs in the future we also changed the tests to look for regular expressions including an end-of-line symbol ($) so we can prevent false matches where only the tested prefix matches.
Another minor bug is that when printing the state, all the iterator positions are printed in a single line. This patch also fixes this.
I fear this might be a stupid question, but what's up with 5 + it? Why does the LHS have to be the iterator? Am I missing something here?