summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/circular_buffer/test/test.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/boost/libs/circular_buffer/test/test.hpp')
-rw-r--r--src/boost/libs/circular_buffer/test/test.hpp145
1 files changed, 145 insertions, 0 deletions
diff --git a/src/boost/libs/circular_buffer/test/test.hpp b/src/boost/libs/circular_buffer/test/test.hpp
new file mode 100644
index 000000000..bbcc770ed
--- /dev/null
+++ b/src/boost/libs/circular_buffer/test/test.hpp
@@ -0,0 +1,145 @@
+// Header file for the test of the circular buffer library.
+
+// Copyright (c) 2003-2008 Jan Gaspar
+
+// Use, modification, and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#if !defined(BOOST_CIRCULAR_BUFFER_TEST_HPP)
+#define BOOST_CIRCULAR_BUFFER_TEST_HPP
+
+#if defined(_MSC_VER) && _MSC_VER >= 1200
+ #pragma once
+#endif
+
+#define BOOST_CB_TEST
+
+#include <boost/circular_buffer.hpp>
+#include <boost/core/lightweight_test.hpp>
+#include <iterator>
+#include <numeric>
+#include <vector>
+#if !defined(BOOST_NO_EXCEPTIONS)
+ #include <exception>
+#endif
+
+// Integer (substitute for int) - more appropriate for testing
+class MyInteger {
+private:
+ int* m_pValue;
+ static int ms_exception_trigger;
+ void check_exception() {
+ if (ms_exception_trigger > 0) {
+ if (--ms_exception_trigger == 0) {
+ delete m_pValue;
+ m_pValue = 0;
+#if !defined(BOOST_NO_EXCEPTIONS)
+ throw std::exception();
+#endif
+ }
+ }
+ }
+public:
+ MyInteger() : m_pValue(new int(0)) { check_exception(); }
+ MyInteger(int i) : m_pValue(new int(i)) { check_exception(); }
+ MyInteger(const MyInteger& src) : m_pValue(new int(src)) { check_exception(); }
+ ~MyInteger() { delete m_pValue; }
+ MyInteger& operator = (const MyInteger& src) {
+ if (this == &src)
+ return *this;
+ check_exception();
+ delete m_pValue;
+ m_pValue = new int(src);
+ return *this;
+ }
+ operator int () const { return *m_pValue; }
+ static void set_exception_trigger(int n) { ms_exception_trigger = n; }
+};
+
+// default constructible class
+class MyDefaultConstructible
+{
+public:
+ MyDefaultConstructible() : m_n(1) {}
+ MyDefaultConstructible(int n) : m_n(n) {}
+ int m_n;
+};
+
+// class counting instances of self
+class InstanceCounter {
+public:
+ InstanceCounter() { increment(); }
+ InstanceCounter(const InstanceCounter& y) { y.increment(); }
+ ~InstanceCounter() { decrement(); }
+ static int count() { return ms_count; }
+private:
+ void increment() const { ++ms_count; }
+ void decrement() const { --ms_count; }
+ static int ms_count;
+};
+
+// dummy class suitable for iterator referencing test
+class Dummy {
+public:
+ enum DummyEnum {
+ eVar,
+ eFnc,
+ eConst,
+ eVirtual
+ };
+ Dummy() : m_n(eVar) {}
+ virtual ~Dummy() {}
+ DummyEnum fnc() { return eFnc; }
+ DummyEnum const_fnc() const { return eConst; }
+ virtual DummyEnum virtual_fnc() { return eVirtual; }
+ DummyEnum m_n;
+};
+
+// simulator of an input iterator
+struct MyInputIterator {
+ typedef std::vector<int>::iterator vector_iterator;
+ typedef std::input_iterator_tag iterator_category;
+ typedef int value_type;
+ typedef int* pointer;
+ typedef int& reference;
+ typedef size_t size_type;
+ typedef ptrdiff_t difference_type;
+ explicit MyInputIterator(const vector_iterator& it) : m_it(it) {}
+ MyInputIterator& operator = (const MyInputIterator& it) {
+ if (this == &it)
+ return *this;
+ m_it = it.m_it;
+ return *this;
+ }
+ reference operator * () const { return *m_it; }
+ pointer operator -> () const { return &(operator*()); }
+ MyInputIterator& operator ++ () {
+ ++m_it;
+ return *this;
+ }
+ MyInputIterator operator ++ (int) {
+ MyInputIterator tmp = *this;
+ ++*this;
+ return tmp;
+ }
+ bool operator == (const MyInputIterator& it) const { return m_it == it.m_it; }
+ bool operator != (const MyInputIterator& it) const { return m_it != it.m_it; }
+private:
+ vector_iterator m_it;
+};
+
+#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR)
+
+inline std::input_iterator_tag iterator_category(const MyInputIterator&) {
+ return std::input_iterator_tag();
+}
+inline int* value_type(const MyInputIterator&) { return 0; }
+inline ptrdiff_t* distance_type(const MyInputIterator&) { return 0; }
+
+#endif // #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR)
+
+using namespace boost;
+using namespace std;
+
+#endif // #if !defined(BOOST_CIRCULAR_BUFFER_TEST_HPP)