Use testing iterator wrappers to ensure that algorithms support their stated requirements
Since InputIterators can't be dereferenced multiple times we shouldn't implement algorithms like copy_if(first, last, output, pred) with copy_if(first, last, first, output, pred).
In general the unit tests should check InputIterator semantic correctness.
Forwarded from http://code.google.com/p/thrust/issues/detail?id=419
This will require that #902 is addressed first.
@upsj added an implementation of a forward_iterator_wrapper in #1619 that restricts an iterator's API to match the forward iterator concept. It ended up getting reverted due to #902, but remains in the git history and may be useful as a starting point for this enhancement.