summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/unittest-cpp/UnitTest++/MemoryOutStream.cpp
diff options
context:
space:
mode:
author Miodrag Milanovic <mmicko@gmail.com>2015-05-27 15:00:06 +0200
committer Miodrag Milanovic <mmicko@gmail.com>2015-05-27 15:00:06 +0200
commitee4adf600bdd3aa60cc0e92a39f2111be0a90bc6 (patch)
tree5ecb86b72eef1c19ad3ab6c7ba8d8b2a964e0cb9 /3rdparty/unittest-cpp/UnitTest++/MemoryOutStream.cpp
parent55fa9840f263361efc73126c3f41be606fea7168 (diff)
Added library for supporting unit tests (nw)
Diffstat (limited to '3rdparty/unittest-cpp/UnitTest++/MemoryOutStream.cpp')
-rw-r--r--3rdparty/unittest-cpp/UnitTest++/MemoryOutStream.cpp218
1 files changed, 218 insertions, 0 deletions
diff --git a/3rdparty/unittest-cpp/UnitTest++/MemoryOutStream.cpp b/3rdparty/unittest-cpp/UnitTest++/MemoryOutStream.cpp
new file mode 100644
index 00000000000..319dfda9c74
--- /dev/null
+++ b/3rdparty/unittest-cpp/UnitTest++/MemoryOutStream.cpp
@@ -0,0 +1,218 @@
+#include "MemoryOutStream.h"
+
+#ifdef UNITTEST_MEMORYOUTSTREAM_IS_STD_OSTRINGSTREAM
+
+namespace UnitTest {
+
+char const* MemoryOutStream::GetText() const
+{
+ m_text = this->str();
+ return m_text.c_str();
+}
+
+void MemoryOutStream::Clear()
+{
+ this->str(std::string());
+ m_text = this->str();
+}
+
+#ifdef UNITTEST_COMPILER_IS_MSVC6
+
+#define snprintf _snprintf
+
+template<typename ValueType>
+std::ostream& FormatToStream(std::ostream& stream, char const* format, ValueType const& value)
+{
+ using namespace std;
+
+ const size_t BUFFER_SIZE=32;
+ char txt[BUFFER_SIZE];
+ snprintf(txt, BUFFER_SIZE, format, value);
+ return stream << txt;
+}
+
+std::ostream& operator<<(std::ostream& stream, __int64 const n)
+{
+ return FormatToStream(stream, "%I64d", n);
+}
+
+std::ostream& operator<<(std::ostream& stream, unsigned __int64 const n)
+{
+ return FormatToStream(stream, "%I64u", n);
+}
+
+#endif
+
+}
+
+#else
+
+#include <cstring>
+#include <cstdio>
+
+#if _MSC_VER
+#define snprintf _snprintf
+#endif
+
+namespace UnitTest {
+
+namespace {
+
+template<typename ValueType>
+void FormatToStream(MemoryOutStream& stream, char const* format, ValueType const& value)
+{
+ using namespace std;
+
+ const size_t BUFFER_SIZE=32;
+ char txt[BUFFER_SIZE];
+ snprintf(txt, BUFFER_SIZE, format, value);
+ stream << txt;
+}
+
+int RoundUpToMultipleOfPow2Number (int n, int pow2Number)
+{
+ return (n + (pow2Number - 1)) & ~(pow2Number - 1);
+}
+
+}
+
+
+MemoryOutStream::MemoryOutStream(int const size)
+ : m_capacity (0)
+ , m_buffer (0)
+
+{
+ GrowBuffer(size);
+}
+
+MemoryOutStream::~MemoryOutStream()
+{
+ delete [] m_buffer;
+}
+
+void MemoryOutStream::Clear()
+{
+ m_buffer[0] = '\0';
+}
+
+char const* MemoryOutStream::GetText() const
+{
+ return m_buffer;
+}
+
+MemoryOutStream& MemoryOutStream::operator <<(char const* txt)
+{
+ using namespace std;
+
+ int const bytesLeft = m_capacity - (int)strlen(m_buffer);
+ int const bytesRequired = (int)strlen(txt) + 1;
+
+ if (bytesRequired > bytesLeft)
+ {
+ int const requiredCapacity = bytesRequired + m_capacity - bytesLeft;
+ GrowBuffer(requiredCapacity);
+ }
+
+ strcat(m_buffer, txt);
+ return *this;
+}
+
+MemoryOutStream& MemoryOutStream::operator <<(int const n)
+{
+ FormatToStream(*this, "%i", n);
+ return *this;
+}
+
+MemoryOutStream& MemoryOutStream::operator <<(long const n)
+{
+ FormatToStream(*this, "%li", n);
+ return *this;
+}
+
+MemoryOutStream& MemoryOutStream::operator <<(unsigned long const n)
+{
+ FormatToStream(*this, "%lu", n);
+ return *this;
+}
+
+#ifdef UNITTEST_COMPILER_IS_MSVC6
+MemoryOutStream& MemoryOutStream::operator <<(__int64 const n)
+#else
+MemoryOutStream& MemoryOutStream::operator <<(long long const n)
+#endif
+{
+#ifdef UNITTEST_WIN32
+ FormatToStream(*this, "%I64d", n);
+#else
+ FormatToStream(*this, "%lld", n);
+#endif
+
+ return *this;
+}
+
+#ifdef UNITTEST_COMPILER_IS_MSVC6
+MemoryOutStream& MemoryOutStream::operator <<(unsigned __int64 const n)
+#else
+MemoryOutStream& MemoryOutStream::operator <<(unsigned long long const n)
+#endif
+{
+#ifdef UNITTEST_WIN32
+ FormatToStream(*this, "%I64u", n);
+#else
+ FormatToStream(*this, "%llu", n);
+#endif
+
+ return *this;
+}
+
+MemoryOutStream& MemoryOutStream::operator <<(float const f)
+{
+ FormatToStream(*this, "%0.6f", f);
+ return *this;
+}
+
+MemoryOutStream& MemoryOutStream::operator <<(void const* p)
+{
+ FormatToStream(*this, "%p", p);
+ return *this;
+}
+
+MemoryOutStream& MemoryOutStream::operator <<(unsigned int const s)
+{
+ FormatToStream(*this, "%u", s);
+ return *this;
+}
+
+MemoryOutStream& MemoryOutStream::operator <<(double const d)
+{
+ FormatToStream(*this, "%0.6f", d);
+ return *this;
+}
+
+int MemoryOutStream::GetCapacity() const
+{
+ return m_capacity;
+}
+
+
+void MemoryOutStream::GrowBuffer(int const desiredCapacity)
+{
+ int const newCapacity = RoundUpToMultipleOfPow2Number(desiredCapacity, GROW_CHUNK_SIZE);
+
+ using namespace std;
+
+ char* buffer = new char[newCapacity];
+ if (m_buffer)
+ strcpy(buffer, m_buffer);
+ else
+ strcpy(buffer, "");
+
+ delete [] m_buffer;
+ m_buffer = buffer;
+ m_capacity = newCapacity;
+}
+
+}
+
+
+#endif