Replace PRNG assertions with PrngException

master
kwolekr 2015-04-27 01:24:37 -04:00
parent 732eb72a0c
commit cd1d625ab2
3 changed files with 13 additions and 4 deletions

View File

@ -120,6 +120,11 @@ public:
ClientStateError(std::string s): BaseException(s) {} ClientStateError(std::string s): BaseException(s) {}
}; };
class PrngException : public BaseException {
public:
PrngException(std::string s): BaseException(s) {}
};
/* /*
Some "old-style" interrupts: Some "old-style" interrupts:
*/ */

View File

@ -115,7 +115,9 @@ u32 PcgRandom::range(u32 bound)
s32 PcgRandom::range(s32 min, s32 max) s32 PcgRandom::range(s32 min, s32 max)
{ {
assert(max >= min); if (max < min)
throw PrngException("Invalid range (max < min)");
u32 bound = max - min + 1; u32 bound = max - min + 1;
return range(bound) + min; return range(bound) + min;
} }

View File

@ -26,8 +26,8 @@
#ifndef NOISE_HEADER #ifndef NOISE_HEADER
#define NOISE_HEADER #define NOISE_HEADER
#include "debug.h"
#include "irr_v3d.h" #include "irr_v3d.h"
#include "exceptions.h"
#include "util/string.h" #include "util/string.h"
extern FlagDesc flagdesc_noiseparams[]; extern FlagDesc flagdesc_noiseparams[];
@ -56,14 +56,16 @@ public:
inline int range(int min, int max) inline int range(int min, int max)
{ {
assert(max >= min); if (max < min)
throw PrngException("Invalid range (max < min)");
/* /*
Here, we ensure the range is not too large relative to RANDOM_MAX, Here, we ensure the range is not too large relative to RANDOM_MAX,
as otherwise the effects of bias would become noticable. Unlike as otherwise the effects of bias would become noticable. Unlike
PcgRandom, we cannot modify this RNG's range as it would change the PcgRandom, we cannot modify this RNG's range as it would change the
output of this RNG for reverse compatibility. output of this RNG for reverse compatibility.
*/ */
assert((u32)(max - min) <= (RANDOM_RANGE + 1) / 10); if ((u32)(max - min) > (RANDOM_RANGE + 1) / 10)
throw PrngException("Range too large");
return (next() % (max - min + 1)) + min; return (next() % (max - min + 1)) + min;
} }