// Copyright Louis Dionne 2013-2016 // 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 using namespace 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 { test::_injection<0> f{}; BOOST_HANA_RUNTIME_CHECK(equal( unpack(a, f), f(1) )); BOOST_HANA_RUNTIME_CHECK(equal( unpack(b, f), f(1, 2) )); BOOST_HANA_RUNTIME_CHECK(equal( unpack(c, f), f(1, 2, 3) )); BOOST_HANA_RUNTIME_CHECK(equal( unpack(d, f), f(1, 2, 3, 4) )); } static_assert(Foldable::value, ""); } ////////////////////////////////////////////////////////////////////////// // Searchable ////////////////////////////////////////////////////////////////////////// { // any_of { static_assert( not_(any_of(array{0}, _ == 1)) , ""); static_assert( any_of(array{0, 1}, _ == 0) , ""); static_assert( any_of(array{0, 1}, _ == 1) , ""); static_assert( not_(any_of(array{0, 1}, _ == 2)) , ""); static_assert( any_of(array{0, 1, 2}, _ == 0) , ""); static_assert( any_of(array{0, 1, 2}, _ == 1) , ""); static_assert( any_of(array{0, 1, 2}, _ == 2) , ""); static_assert( not_(any_of(array{0, 1, 2}, _ == 3)) , ""); } // find_if // Note: Because we need the predicate to return a Constant, this // is incredibly not powerful. { static_assert(equal( find_if(array{0}, always(true_c)), just(0) ), ""); BOOST_HANA_CONSTANT_CHECK(equal( find_if(array{0}, always(false_c)), nothing )); } static_assert(Searchable::value, ""); } }