summaryrefslogtreecommitdiffstats
path: root/src/boost/libs/hana/test/ext/std/integral_constant
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 18:45:59 +0000
commit19fcec84d8d7d21e796c7624e521b60d28ee21ed (patch)
tree42d26aa27d1e3f7c0b8bd3fd14e7d7082f5008dc /src/boost/libs/hana/test/ext/std/integral_constant
parentInitial commit. (diff)
downloadceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.tar.xz
ceph-19fcec84d8d7d21e796c7624e521b60d28ee21ed.zip
Adding upstream version 16.2.11+ds.upstream/16.2.11+dsupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/boost/libs/hana/test/ext/std/integral_constant')
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/arithmetic.cpp31
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/comparable.cpp27
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/constant.cpp33
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/interop.cpp22
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/logical.cpp63
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/orderable.cpp25
-rw-r--r--src/boost/libs/hana/test/ext/std/integral_constant/tag.cpp53
7 files changed, 254 insertions, 0 deletions
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/arithmetic.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/arithmetic.cpp
new file mode 100644
index 000000000..25372ddd5
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/arithmetic.cpp
@@ -0,0 +1,31 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/euclidean_ring.hpp>
+#include <laws/group.hpp>
+#include <laws/monoid.hpp>
+#include <laws/ring.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ std::integral_constant<int, -10>{},
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ );
+
+ hana::test::TestMonoid<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestGroup<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestRing<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestEuclideanRing<hana::ext::std::integral_constant_tag<int>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/comparable.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/comparable.cpp
new file mode 100644
index 000000000..d17b6d810
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/comparable.cpp
@@ -0,0 +1,27 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/comparable.hpp>
+#include <laws/hashable.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ std::integral_constant<int, -10>{},
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ );
+
+ hana::test::TestComparable<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestHashable<hana::ext::std::integral_constant_tag<void>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/constant.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/constant.cpp
new file mode 100644
index 000000000..f15fb8e80
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/constant.cpp
@@ -0,0 +1,33 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/tuple.hpp>
+#include <boost/hana/value.hpp>
+
+#include <laws/constant.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ // value
+ static_assert(hana::value(std::integral_constant<int, 0>{}) == 0, "");
+ static_assert(hana::value(std::integral_constant<int, 1>{}) == 1, "");
+ static_assert(hana::value(std::integral_constant<int, 3>{}) == 3, "");
+
+ // laws
+ hana::test::TestConstant<hana::ext::std::integral_constant_tag<int>>{
+ hana::make_tuple(
+ std::integral_constant<int, -10>{},
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ ),
+ hana::tuple_t<int, long, long long>
+ };
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/interop.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/interop.cpp
new file mode 100644
index 000000000..9b445f01b
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/interop.cpp
@@ -0,0 +1,22 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/integral_constant.hpp>
+#include <boost/hana/not_equal.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ // Interoperation with hana::integral_constant
+ BOOST_HANA_CONSTANT_CHECK(std::integral_constant<int, 1>{} == hana::int_c<1>);
+ BOOST_HANA_CONSTANT_CHECK(std::integral_constant<int, 1>{} == hana::long_c<1>);
+
+ BOOST_HANA_CONSTANT_CHECK(std::integral_constant<int, 2>{} != hana::int_c<3>);
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/logical.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/logical.cpp
new file mode 100644
index 000000000..38d8091c2
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/logical.cpp
@@ -0,0 +1,63 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/assert.hpp>
+#include <boost/hana/equal.hpp>
+#include <boost/hana/eval_if.hpp>
+#include <boost/hana/functional/always.hpp>
+#include <boost/hana/integral_constant.hpp>
+#include <boost/hana/not.hpp>
+#include <boost/hana/tuple.hpp>
+
+#include <laws/base.hpp>
+#include <laws/logical.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ // eval_if
+ {
+ auto t = hana::test::ct_eq<3>{};
+ auto e = hana::test::ct_eq<4>{};
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::eval_if(std::true_type{}, hana::always(t), hana::always(e)),
+ t
+ ));
+
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::eval_if(std::false_type{}, hana::always(t), hana::always(e)),
+ e
+ ));
+ }
+
+ // not_
+ {
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::not_(std::true_type{}),
+ std::false_type{}
+ ));
+ BOOST_HANA_CONSTANT_CHECK(hana::equal(
+ hana::not_(std::false_type{}),
+ std::true_type{}
+ ));
+ }
+
+ auto ints = hana::make_tuple(
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ );
+
+ auto bools = hana::make_tuple(std::true_type{}, std::false_type{});
+
+ // laws
+ hana::test::TestLogical<hana::ext::std::integral_constant_tag<int>>{ints};
+ hana::test::TestLogical<hana::ext::std::integral_constant_tag<bool>>{bools};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/orderable.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/orderable.cpp
new file mode 100644
index 000000000..6a14ad147
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/orderable.cpp
@@ -0,0 +1,25 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/tuple.hpp>
+
+#include <laws/orderable.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+int main() {
+ auto ints = hana::make_tuple(
+ std::integral_constant<int, -10>{},
+ std::integral_constant<int, -2>{},
+ std::integral_constant<int, 0>{},
+ std::integral_constant<int, 1>{},
+ std::integral_constant<int, 3>{}
+ );
+
+ hana::test::TestOrderable<hana::ext::std::integral_constant_tag<int>>{ints};
+}
diff --git a/src/boost/libs/hana/test/ext/std/integral_constant/tag.cpp b/src/boost/libs/hana/test/ext/std/integral_constant/tag.cpp
new file mode 100644
index 000000000..8a747e441
--- /dev/null
+++ b/src/boost/libs/hana/test/ext/std/integral_constant/tag.cpp
@@ -0,0 +1,53 @@
+// Copyright Louis Dionne 2013-2017
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
+
+#include <boost/hana/ext/std/integral_constant.hpp>
+
+#include <boost/hana/core/tag_of.hpp>
+
+#include <type_traits>
+namespace hana = boost::hana;
+
+
+struct inherit_simple : std::integral_constant<int, 3> { };
+struct inherit_no_default : std::integral_constant<int, 3> {
+ inherit_no_default() = delete;
+};
+
+struct incomplete;
+struct empty_type { };
+struct non_pod { virtual ~non_pod() { } };
+
+
+static_assert(std::is_same<
+ hana::tag_of_t<inherit_simple>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<inherit_no_default>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(std::is_same<
+ hana::tag_of_t<std::is_pointer<int*>>,
+ hana::ext::std::integral_constant_tag<bool>
+>{}, "");
+
+static_assert(!std::is_same<
+ hana::tag_of_t<incomplete>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(!std::is_same<
+ hana::tag_of_t<empty_type>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(!std::is_same<
+ hana::tag_of_t<non_pod>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+static_assert(!std::is_same<
+ hana::tag_of_t<void>,
+ hana::ext::std::integral_constant_tag<int>
+>{}, "");
+
+int main() { }