// 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace hana = boost::hana; template using array = T[n]; int main() { // We can't check the laws because builtin arrays can't be passed // to functions. ////////////////////////////////////////////////////////////////////////// // Foldable ////////////////////////////////////////////////////////////////////////// { int a[] = {1}; int b[] = {1, 2}; int c[] = {1, 2, 3}; int d[] = {1, 2, 3, 4}; // unpack { hana::test::_injection<0> f{}; BOOST_HANA_RUNTIME_CHECK(hana::equal( hana::unpack(a, f), f(1) )); BOOST_HANA_RUNTIME_CHECK(hana::equal( hana::unpack(b, f), f(1, 2) )); BOOST_HANA_RUNTIME_CHECK(hana::equal( hana::unpack(c, f), f(1, 2, 3) )); BOOST_HANA_RUNTIME_CHECK(hana::equal( hana::unpack(d, f), f(1, 2, 3, 4) )); } static_assert(hana::Foldable::value, ""); } ////////////////////////////////////////////////////////////////////////// // Searchable ////////////////////////////////////////////////////////////////////////// { // any_of { static_assert( hana::not_(hana::any_of(array{0}, hana::equal.to(1))) , ""); static_assert( hana::any_of(array{0, 1}, hana::equal.to(0)) , ""); static_assert( hana::any_of(array{0, 1}, hana::equal.to(1)) , ""); static_assert( hana::not_(hana::any_of(array{0, 1}, hana::equal.to(2))) , ""); static_assert( hana::any_of(array{0, 1, 2}, hana::equal.to(0)) , ""); static_assert( hana::any_of(array{0, 1, 2}, hana::equal.to(1)) , ""); static_assert( hana::any_of(array{0, 1, 2}, hana::equal.to(2)) , ""); static_assert( hana::not_(hana::any_of(array{0, 1, 2}, hana::equal.to(3))) , ""); } // find_if // Note: Because we need the predicate to return a Constant, this // is incredibly not powerful. { static_assert(hana::equal( hana::find_if(array{0}, hana::always(hana::true_c)), hana::just(0) ), ""); BOOST_HANA_CONSTANT_CHECK(hana::equal( hana::find_if(array{0}, hana::always(hana::false_c)), hana::nothing )); } static_assert(hana::Searchable::value, ""); } }