If  `f_i > n_total_constants` is false, then we know that we have only constant features.

if `n_visited_features <= n_found_constants + n_drawn_constants` is true, then it means that all drawn features were constant and we require at least one non constant feature.

Maybe, the whole algorithm will be clearer if you remember that we do sample without replacement using a [Fisher-Yates algorithm](http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle). During the split search, we respect the following invariant with the `features` array:

- elements of `features` in `[:n_drawn_constant[` holds drawn and known constant features
- elements of `features` in `[n_drawn_constant:n_known_constant[` holds known constant features that haven't been drawn yet.
- elements of `features` in `[n_known_constant:n_total_constant[` holds newly found constant features
- elements of `features` in `[n_total_constant:f_i[` holds features that haven't been drawn yet and aren't constant apriori.
- elements of `features` in `[f_i:n_features[` holds features that have been drawn and and aren't constant.