1 // Copyright Louis Dionne 2013-2016
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
5 #ifndef BOOST_HANA_TEST_AUTO_TRANSFORM_HPP
6 #define BOOST_HANA_TEST_AUTO_TRANSFORM_HPP
8 #include <boost/hana/assert.hpp>
9 #include <boost/hana/equal.hpp>
10 #include <boost/hana/transform.hpp>
12 #include "test_case.hpp"
13 #include <laws/base.hpp>
16 TestCase test_transform{[] {
17 namespace hana = boost::hana;
18 using hana::test::ct_eq;
20 constexpr hana::test::_injection<0> f{};
22 BOOST_HANA_CONSTANT_CHECK(hana::equal(
23 hana::transform(MAKE_TUPLE(), undefined{}),
27 BOOST_HANA_CONSTANT_CHECK(hana::equal(
28 hana::transform(MAKE_TUPLE(ct_eq<1>{}), f),
29 MAKE_TUPLE(f(ct_eq<1>{}))
32 BOOST_HANA_CONSTANT_CHECK(hana::equal(
33 hana::transform(MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}), f),
34 MAKE_TUPLE(f(ct_eq<1>{}), f(ct_eq<2>{}))
37 BOOST_HANA_CONSTANT_CHECK(hana::equal(
38 hana::transform(MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}), f),
39 MAKE_TUPLE(f(ct_eq<1>{}), f(ct_eq<2>{}), f(ct_eq<3>{}))
42 BOOST_HANA_CONSTANT_CHECK(hana::equal(
43 hana::transform(MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}), f),
44 MAKE_TUPLE(f(ct_eq<1>{}), f(ct_eq<2>{}), f(ct_eq<3>{}), f(ct_eq<4>{}))
47 #ifndef MAKE_TUPLE_NO_CONSTEXPR
49 constexpr int operator()(int i) const { return i + 1; }
52 static_assert(hana::equal(
53 hana::transform(MAKE_TUPLE(1), incr{}),
57 static_assert(hana::equal(
58 hana::transform(MAKE_TUPLE(1, 2), incr{}),
62 static_assert(hana::equal(
63 hana::transform(MAKE_TUPLE(1, 2, 3), incr{}),
67 static_assert(hana::equal(
68 hana::transform(MAKE_TUPLE(1, 2, 3, 4), incr{}),
69 MAKE_TUPLE(2, 3, 4, 5)
74 #endif // !BOOST_HANA_TEST_AUTO_TRANSFORM_HPP