summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorManoj Srivastava <srivasta@debian.org>2020-05-27 16:31:00 -0700
committerManoj Srivastava <srivasta@debian.org>2020-05-27 16:31:00 -0700
commitd7533e931cfb49a68dc8e6e3f524d49e364cef83 (patch)
tree06d31523b9647d3de8ce8888f6e83d24f046aa82 /tests
parent4e9b9c402ed95bf9a17fd6d795bc49bb4128a6fa (diff)
New upstream version 2.41-ah~0.git.20200131
Diffstat (limited to 'tests')
-rw-r--r--tests/arbitrary/boost_optional.cc1
-rw-r--r--tests/arbitrary/boost_optional.hpp60
2 files changed, 61 insertions, 0 deletions
diff --git a/tests/arbitrary/boost_optional.cc b/tests/arbitrary/boost_optional.cc
new file mode 100644
index 00000000..36b0b770
--- /dev/null
+++ b/tests/arbitrary/boost_optional.cc
@@ -0,0 +1 @@
+#include "boost_optional.hpp"
diff --git a/tests/arbitrary/boost_optional.hpp b/tests/arbitrary/boost_optional.hpp
new file mode 100644
index 00000000..445e8aca
--- /dev/null
+++ b/tests/arbitrary/boost_optional.hpp
@@ -0,0 +1,60 @@
+#pragma once
+
+#include <boost/optional.hpp>
+#include <boost/optional/optional_io.hpp>
+#include <cppqc/Arbitrary.h>
+
+namespace cppqc {
+
+template<typename T>
+boost::optional<T> arbitraryBoostOptional(RngEngine &rng, std::size_t size)
+{
+ std::uniform_int_distribution<> distribution(0, 4);
+
+ if (distribution(rng) == 0)
+ {
+ return boost::none;
+ }
+ else
+ {
+ return Arbitrary<T>::unGen(rng, size);
+ }
+}
+
+template<typename T>
+std::vector<boost::optional<T>> shrinkBoostOptional(boost::optional<T> shrinkInput)
+{
+ std::vector<boost::optional<T>> result;
+
+ if (shrinkInput)
+ {
+ result.push_back(boost::none);
+
+ for (auto const &t: Arbitrary<T>::shrink(*shrinkInput))
+ {
+ result.push_back(t);
+ }
+ }
+
+ return result;
+}
+
+template <typename T>
+class ArbitraryImpl<boost::optional<T>> {
+
+public:
+ static const typename Arbitrary<boost::optional<T>>::unGenType unGen;
+
+ static const typename Arbitrary<boost::optional<T>>::shrinkType shrink;
+
+};
+
+template <typename T>
+const typename Arbitrary<boost::optional<T>>::unGenType
+ArbitraryImpl<boost::optional<T>>::unGen = arbitraryBoostOptional<T>;
+
+template <typename T>
+const typename Arbitrary<boost::optional<T>>::shrinkType
+ArbitraryImpl<boost::optional<T>>::shrink = shrinkBoostOptional<T>;
+
+} // namespace cppqc