Range : add test coverage and fix bug in `union` constructor to make sure it does not mutate the input ranges