00001
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef MOCKPP_RANDOMSTUB_H
00031 #define MOCKPP_RANDOMSTUB_H
00032
00033 #include <mockpp/mockpp.h>
00034
00035 #include <cstdlib>
00036
00037 #include <mockpp/compat/Formatter.h>
00038 #include <mockpp/compat/Asserter.h>
00039 #include <mockpp/stub/TypelessStub.h>
00040
00041
00042 MOCKPP_NS_START
00043
00048 template <typename R, typename T = int>
00049 class RandomStub : public mockpp::TypelessStub<R>
00050 {
00051 public:
00052
00057 RandomStub(T low, T high)
00058 : lower(low)
00059 , higher(high)
00060 {
00061 }
00062
00066 RandomStub(T high)
00067 : lower(0)
00068 , higher(high)
00069 {
00070 }
00071
00076 static R getNumber(T low, T high)
00077 {
00078 MOCKPP_ASSERT_TRUE(low < high);
00079 return low + (R) (float(high - low) * (MOCKPP_STD_NS::rand() / (RAND_MAX + 1.0)));
00080 }
00081
00085 virtual R typelessInvoke()
00086 {
00087 return getNumber(lower, higher);
00088 }
00089
00094 virtual mockpp::String describeTo( mockpp::String &buffer ) const
00095 {
00096 mockpp::String fmt = MOCKPP_PCHAR("returns random {%1 .. %2}");
00097 fmt << lower << higher;
00098 buffer += fmt;
00099 return buffer;
00100 }
00101
00102 private:
00103
00104 T lower;
00105 T higher;
00106 };
00107
00108
00109
00110 MOCKPP_NS_END
00111
00112
00113 #endif // MOCKPP_RANDOMSTUB_H
00114
00115