template <typename T, typename Min, typename Max>
inline void Fuzz::nextRange(T* n, Min min, Max max) {
this->next<T>(n);
- T range = max - min + 1;
- if (0 == range) {
- return;
- } else {
- if (*n < 0) { // Handle negatives
- if (*n != std::numeric_limits<T>::lowest()) {
- *n *= -1;
- }
- else {
- *n = std::numeric_limits<T>::max();
- }
- }
- *n = min + (*n % range);
+ if (min >= max) {
+ // Avoid misuse of nextRange
+ this->signalBug();
+ }
+ if (*n < 0) { // Handle negatives
+ if (*n != std::numeric_limits<T>::lowest()) {
+ *n *= -1;
+ }
+ else {
+ *n = std::numeric_limits<T>::max();
+ }
}
+ *n = min + (*n % ((size_t)max - min + 1));
}
template <typename T>
fuzz->nextRange(&reps, 0, 2);
for (uint8_t rep = 0; rep < reps; ++rep) {
uint8_t index;
- fuzz->nextRange(&index, 0, SK_ARRAY_COUNT(gWhiteSpace) - 1);
+ fuzz->nextRange(&index, 0, (int) SK_ARRAY_COUNT(gWhiteSpace) - 1);
if (gWhiteSpace[index]) {
atom->append(&gWhiteSpace[index], 1);
}
SkString MakeRandomParsePathPiece(Fuzz* fuzz) {
SkString atom;
uint8_t index;
- fuzz->nextRange(&index, 0, SK_ARRAY_COUNT(gLegal) - 1);
+ fuzz->nextRange(&index, 0, (int) SK_ARRAY_COUNT(gLegal) - 1);
const Legal& legal = gLegal[index];
gEasy ? atom.append("\n") : add_white(fuzz, &atom);
bool b;