00001 00034 #ifndef LL_LLTUT_H 00035 #define LL_LLTUT_H 00036 00037 #include <tut/tut.h> 00038 00039 #include "lldate.h" 00040 #include "lluri.h" 00041 #include "llmath.h" 00042 00043 class LLSD; 00044 00045 namespace tut 00046 { 00047 inline void ensure_approximately_equals(const char* msg, F64 actual, F64 expected, U32 frac_bits) 00048 { 00049 if(!is_approx_equal_fraction(actual, expected, frac_bits)) 00050 { 00051 std::stringstream ss; 00052 ss << (msg?msg:"") << (msg?": ":"") << "not equal actual: " << actual << " expected: " << expected; 00053 throw tut::failure(ss.str().c_str()); 00054 } 00055 } 00056 00057 inline void ensure_approximately_equals(const char* msg, F32 actual, F32 expected, U32 frac_bits) 00058 { 00059 if(!is_approx_equal_fraction(actual, expected, frac_bits)) 00060 { 00061 std::stringstream ss; 00062 ss << (msg?msg:"") << (msg?": ":"") << "not equal actual: " << actual << " expected: " << expected; 00063 throw tut::failure(ss.str().c_str()); 00064 } 00065 } 00066 00067 inline void ensure_approximately_equals(F32 actual, F32 expected, U32 frac_bits) 00068 { 00069 ensure_approximately_equals(NULL, actual, expected, frac_bits); 00070 } 00071 00072 inline void ensure_memory_matches(const char* msg,const void* actual, U32 actual_len, const void* expected,U32 expected_len) 00073 { 00074 if((expected_len != actual_len) || 00075 (memcmp(actual, expected, actual_len) != 0)) 00076 { 00077 std::stringstream ss; 00078 ss << (msg?msg:"") << (msg?": ":"") << "not equal"; 00079 throw tut::failure(ss.str().c_str()); 00080 } 00081 } 00082 00083 inline void ensure_memory_matches(const void* actual, U32 actual_len, const void* expected,U32 expected_len) 00084 { 00085 ensure_memory_matches(NULL, actual, actual_len, expected, expected_len); 00086 } 00087 00088 template <class T,class Q> 00089 void ensure_not_equals(const char* msg,const Q& actual,const T& expected) 00090 { 00091 if( expected == actual ) 00092 { 00093 std::stringstream ss; 00094 ss << (msg?msg:"") << (msg?": ":"") << "both equal " << expected; 00095 throw tut::failure(ss.str().c_str()); 00096 } 00097 } 00098 00099 template <class T,class Q> 00100 void ensure_not_equals(const Q& actual,const T& expected) 00101 { 00102 ensure_not_equals(NULL, actual, expected); 00103 } 00104 00105 00106 template <class T,class Q> 00107 void ensure_equals(const std::string& msg, 00108 const Q& actual,const T& expected) 00109 { ensure_equals(msg.c_str(), actual, expected); } 00110 00111 template<> 00112 void ensure_equals(const char* msg, 00113 const LLDate& actual, const LLDate& expected); 00114 00115 template<> 00116 void ensure_equals(const char* msg, 00117 const LLURI& actual, const LLURI& expected); 00118 00119 template<> 00120 void ensure_equals(const char* msg, 00121 const std::vector<U8>& actual, const std::vector<U8>& expected); 00122 00123 template<> 00124 void ensure_equals(const char* msg, 00125 const LLSD& actual, const LLSD& expected); 00126 00127 void ensure_starts_with(const std::string& msg, 00128 const std::string& actual, const std::string& expectedStart); 00129 00130 void ensure_ends_with(const std::string& msg, 00131 const std::string& actual, const std::string& expectedEnd); 00132 00133 void ensure_contains(const std::string& msg, 00134 const std::string& actual, const std::string& expectedSubString); 00135 00136 void ensure_does_not_contain(const std::string& msg, 00137 const std::string& actual, const std::string& expectedSubString); 00138 } 00139 00140 00141 #endif // LL_LLTUT_H