Exemplo n.º 1
0
int main() {
    // Interoperation with hana::integral_constant
    BOOST_HANA_CONSTANT_CHECK(mpl::integral_c<int, 1>{} == hana::int_c<1>);
    BOOST_HANA_CONSTANT_CHECK(mpl::integral_c<int, 1>{} == hana::long_c<1>);

    BOOST_HANA_CONSTANT_CHECK(mpl::integral_c<int, 2>{} != hana::int_c<3>);
}
Exemplo n.º 2
0
int main() {
    auto container = ::seq;

    {
        auto storage = container();
        auto transformed = hana::experimental::transformed(storage, undefined<99>{});
        BOOST_HANA_CONSTANT_CHECK(hana::equal(
            hana::length(transformed),
            hana::size_c<0>
        ));
    }{
        auto storage = container(undefined<0>{});
        auto transformed = hana::experimental::transformed(storage, undefined<99>{});
        BOOST_HANA_CONSTANT_CHECK(hana::equal(
            hana::length(transformed),
            hana::size_c<1>
        ));
    }{
        auto storage = container(undefined<0>{}, undefined<1>{});
        auto transformed = hana::experimental::transformed(storage, undefined<99>{});
        BOOST_HANA_CONSTANT_CHECK(hana::equal(
            hana::length(transformed),
            hana::size_c<2>
        ));
    }{
        auto storage = container(undefined<0>{}, undefined<1>{}, undefined<2>{});
        auto transformed = hana::experimental::transformed(storage, undefined<99>{});
        BOOST_HANA_CONSTANT_CHECK(hana::equal(
            hana::length(transformed),
            hana::size_c<3>
        ));
    }
}
Exemplo n.º 3
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(hana::length(hana::make_tuple()) == hana::size_c<0>);
    BOOST_HANA_CONSTANT_CHECK(hana::length(hana::make_tuple(1, '2', 3.0)) == hana::size_c<3>);

    BOOST_HANA_CONSTANT_CHECK(hana::length(hana::nothing) == hana::size_c<0>);
    BOOST_HANA_CONSTANT_CHECK(hana::length(hana::just('x')) == hana::size_c<1>);
}
Exemplo n.º 4
0
int main() {
    // Conversion from any `Foldable` containing `type`s
    auto foldable = ::seq;
    auto to_list = hana::to<hana::ext::boost::mpl::list_tag>;
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        to_list(foldable()),
        mpl::list<>{}
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        to_list(foldable(hana::type_c<t1>)),
        mpl::list<t1>{}
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        to_list(foldable(hana::type_c<t1>, hana::type_c<t2>)),
        mpl::list<t1, t2>{}
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        to_list(foldable(hana::type_c<t1>, hana::type_c<t2>, hana::type_c<t3>)),
        mpl::list<t1, t2, t3>{}
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        to_list(foldable(hana::type_c<t1>, hana::type_c<t2>, hana::type_c<t3>, hana::type_c<t4>)),
        mpl::list<t1, t2, t3, t4>{}
    ));
}
Exemplo n.º 5
0
int main() {
    auto container = ::seq;

    {
        auto storage1 = container();
        auto storage2 = container();
        auto joined = hana::experimental::joined(storage1, storage2);
        BOOST_HANA_CONSTANT_CHECK(hana::is_empty(joined));
    }
    {
        auto storage1 = container(undefined<0>{});
        auto storage2 = container();
        auto joined = hana::experimental::joined(storage1, storage2);
        BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(joined)));
    }
    {
        auto storage1 = container(undefined<0>{});
        auto storage2 = container(undefined<1>{});
        auto joined = hana::experimental::joined(storage1, storage2);
        BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(joined)));
    }
    {
        auto storage1 = container();
        auto storage2 = container(undefined<0>{});
        auto joined = hana::experimental::joined(storage1, storage2);
        BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::is_empty(joined)));
    }
}
Exemplo n.º 6
0
int main() {
    // works with elements whose `less` does not return a Constant
    {
        constexpr auto xs = hana::make_tuple(1, 2, 3, 4);
        constexpr auto ys = hana::make_tuple(1, 6, 3, 4);
        static_assert(hana::lexicographical_compare(xs, ys), "");
    }

    // and with those that do
    {
        auto xs = hana::make_tuple(hana::int_<1>, hana::int_<2>, hana::int_<3>);
        auto ys = hana::make_tuple(hana::int_<1>, hana::int_<5>, hana::int_<3>);
        BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(xs, ys));
    }

    // it also accepts a custom predicate
    {
        auto xs = hana::make_tuple(hana::type<int>, hana::type<char>, hana::type<void*>);
        auto ys = hana::make_tuple(hana::type<int>, hana::type<long>, hana::type<void*>);
        BOOST_HANA_CONSTANT_CHECK(
            hana::lexicographical_compare(xs, ys, [](auto t, auto u) {
                return hana::sizeof_(t) < hana::sizeof_(u);
            })
        );
    }
}
Exemplo n.º 7
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::make<hana::type_tag>(T{}),
        hana::decltype_(T{})
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::make<hana::type_tag>(hana::type_c<T>),
        hana::decltype_(hana::type_c<T>)
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::make_type(T{}),
        hana::make<hana::type_tag>(T{})
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::make_type(hana::type_c<T>),
        hana::make<hana::type_tag>(hana::type_c<T>)
    ));

    // make sure we don't read from non-constexpr variables
    {
        auto t = hana::type_c<T>;
        auto x = 1;
        constexpr auto r1 = hana::make<hana::type_tag>(t); (void)r1;
        constexpr auto r2 = hana::make<hana::type_tag>(x); (void)r2;
    }
}
Exemplo n.º 8
0
int main() {
    auto deref = [](auto x) { return *x; };
    auto deref3 = hana::compose(deref, deref, deref);

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        *hana::type_c<char*>,
        hana::type_c<char&>
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        deref(hana::type_c<int*>),
        hana::type_c<int&>
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        deref3(hana::type_c<int***>),
        hana::type_c<int&>
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::type_c<int> + hana::type_c<float>,
        hana::type_c<float>
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        ++hana::type_c<int&>,
        hana::type_c<int&>
    ));
}
Exemplo n.º 9
0
int main() {
    hana::test::_injection<0> f{};

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::unpack(hana::make_range(hana::int_c<0>, hana::int_c<0>), f),
        f()
    ));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::unpack(hana::make_range(hana::int_c<0>, hana::int_c<1>), f),
        f(hana::int_c<0>)
    ));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::unpack(hana::make_range(hana::int_c<0>, hana::int_c<2>), f),
        f(hana::int_c<0>, hana::int_c<1>)
    ));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::unpack(hana::make_range(hana::int_c<0>, hana::int_c<3>), f),
        f(hana::int_c<0>, hana::int_c<1>, hana::int_c<2>)
    ));

    // Previously, we would only unpack with `std::size_t`s. Make
    // sure this does not happen.
    hana::unpack(hana::make_range(hana::int_c<0>, hana::int_c<1>), [](auto x) {
        using T = hana::tag_of_t<decltype(x)>;
        static_assert(std::is_same<typename T::value_type, int>{}, "");
    });
}
Exemplo n.º 10
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(hana::char_c<'c'> ^hana::in^ BOOST_HANA_STRING("abcde"));
    BOOST_HANA_CONSTANT_CHECK(!(hana::char_c<'z'> ^hana::in^ BOOST_HANA_STRING("abcde")));

    BOOST_HANA_CONSTANT_CHECK(
        hana::find(BOOST_HANA_STRING("abcxefg"), hana::char_c<'x'>) == hana::just(hana::char_c<'x'>)
    );
}
Exemplo n.º 11
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(
        hana::to<hana::tuple_tag>(hana::tuple_c<int, 0, 1, 2>)
            ==
        hana::make_tuple(hana::int_c<0>, hana::int_c<1>, hana::int_c<2>)
    );

    BOOST_HANA_CONSTANT_CHECK(hana::front(hana::tuple_c<int, 0, 1, 2>) == hana::int_c<0>);
}
Exemplo n.º 12
0
int main() {
    constexpr auto ints = hana::tuple_c<int, 1, 2, 3, 2, 2, 4, 2>;
    BOOST_HANA_CONSTANT_CHECK(hana::count(ints, hana::int_<2>) == hana::size_t<4>);
    static_assert(hana::count(ints, 2) == 4, "");


    constexpr auto types = hana::tuple_t<int, char, long, short, char, double>;
    BOOST_HANA_CONSTANT_CHECK(hana::count(types, hana::type<char>) == hana::size_t<2>);
}
Exemplo n.º 13
0
int main() {
    constexpr auto x = hana::make<hana::optional_tag>();
    BOOST_HANA_CONSTANT_CHECK(x == hana::make_optional());
    BOOST_HANA_CONSTANT_CHECK(hana::is_nothing(x));

    constexpr auto just_x = hana::make<hana::optional_tag>('x');
    static_assert(just_x == hana::make_optional('x'), "");
    BOOST_HANA_CONSTANT_CHECK(hana::is_just(just_x));
}
Exemplo n.º 14
0
int main() {
    static_assert(hana::to<hana::tuple_tag>(hana::just(1)) == hana::make_tuple(1), "");
    BOOST_HANA_CONSTANT_CHECK(hana::to<hana::tuple_tag>(hana::nothing) == hana::make_tuple());

    BOOST_HANA_CONSTANT_CHECK(
        hana::to<hana::tuple_tag>(hana::make_range(hana::int_c<3>, hana::int_c<6>))
            ==
        hana::tuple_c<int, 3, 4, 5>
    );
}
Exemplo n.º 15
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::at_key(hana::make_map(p<0, 0>()), key<0>()),
        val<0>()
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::at_key(hana::make_map(p<0, 0>(), p<1,1>()), key<0>()),
        val<0>()
    ));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::at_key(hana::make_map(p<0, 0>(), p<1,1>()), key<1>()),
        val<1>()
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::at_key(hana::make_map(p<0, 0>(), p<1,1>(), p<2,2>()), key<0>()),
        val<0>()
    ));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::at_key(hana::make_map(p<0, 0>(), p<1,1>(), p<2,2>()), key<1>()),
        val<1>()
    ));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::at_key(hana::make_map(p<0, 0>(), p<1,1>(), p<2,2>()), key<2>()),
        val<2>()
    ));

    // check operators
    auto m = hana::make_map(p<2, 2>(), p<1, 1>());
    auto const const_m = hana::make_map(p<2, 2>(), p<1, 1>());
    BOOST_HANA_CONSTANT_CHECK(hana::equal(m[key<1>()], val<1>()));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(const_m[key<1>()], val<1>()));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(std::move(m)[key<1>()], val<1>()));
}
Exemplo n.º 16
0
int main() {
    constexpr auto xs = hana::make_set(hana::int_c<0>, hana::int_c<1>, hana::int_c<2>);
    BOOST_HANA_CONSTANT_CHECK(hana::find(xs, hana::int_c<0>) == hana::just(hana::int_c<0>));
    BOOST_HANA_CONSTANT_CHECK(hana::find(xs, hana::int_c<3>) == hana::nothing);

    // operator[] is equivalent to at_key
    BOOST_HANA_CONSTANT_CHECK(xs[hana::int_c<2>] == hana::int_c<2>);

    // long_c<0> == int_<0>, and therefore int_<0> is found
    BOOST_HANA_CONSTANT_CHECK(xs[hana::long_c<0>] == hana::int_c<0>);
}
Exemplo n.º 17
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(!hana::is_empty(BOOST_HANA_STRING("abcd")));
    BOOST_HANA_CONSTANT_CHECK(hana::is_empty(BOOST_HANA_STRING("")));

    BOOST_HANA_CONSTANT_CHECK(BOOST_HANA_STRING("abcd")[hana::size_c<2>] == hana::char_c<'c'>);

    auto is_vowel = [](auto c) {
        return c ^hana::in^ BOOST_HANA_STRING("aeiouy");
    };
    BOOST_HANA_CONSTANT_CHECK(
        hana::drop_while(BOOST_HANA_STRING("aioubcd"), is_vowel) == BOOST_HANA_STRING("bcd")
    );
}
Exemplo n.º 18
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(
        hana::make_set(hana::int_c<0>, hana::type_c<char>, hana::int_c<1>)
        ==
        hana::make_set(hana::int_c<1>, hana::int_c<0>, hana::type_c<char>)
    );

    BOOST_HANA_CONSTANT_CHECK(
        hana::make_set(hana::int_c<0>, hana::type_c<char>)
        !=
        hana::make_set(hana::int_c<1>)
    );
}
Exemplo n.º 19
0
Arquivo: maybe.cpp Projeto: jinby/hana
int main() {
    hana::test::_injection<0> f{};
    hana::test::ct_eq<2> x{};

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::maybe(x, undefined{}, hana::nothing),
        x
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::maybe(undefined{}, f, hana::just(x)),
        f(x)
    ));
}
Exemplo n.º 20
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::minimum(hana::make_range(hana::int_c<3>, hana::int_c<4>)),
        hana::int_c<3>
    ));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::minimum(hana::make_range(hana::int_c<3>, hana::int_c<5>)),
        hana::int_c<3>
    ));
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::minimum(hana::make_range(hana::int_c<-1>, hana::int_c<5>)),
        hana::int_c<-1>
    ));
}
Exemplo n.º 21
0
int main() {
    hana::test::ct_eq<2> x{};
    hana::test::ct_eq<3> s{};
    hana::test::_injection<0> f{};

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::fold_left(hana::just(x), s, f),
        f(s, x)
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::fold_left(hana::nothing, s, f),
        s
    ));
}
Exemplo n.º 22
0
int main() {
    // with tuples
    static_assert(
        hana::ap(hana::make_tuple(std::plus<>{}), hana::make_tuple(1, 2),
                                                  hana::make_tuple(3, 4, 5))
            ==
        hana::make_tuple(
            1 + 3,      1 + 4,      1 + 5,
            2 + 3,      2 + 4,      2 + 5
        )
    , "");

    // with optional values
    BOOST_HANA_CONSTEXPR_LAMBDA auto multiply = [](auto a, auto b, auto c) {
        return a * b * c;
    };

    BOOST_HANA_CONSTEXPR_CHECK(
        hana::ap(hana::just(multiply), hana::just(1),
                                       hana::just(2),
                                       hana::just(3))
            ==
        hana::just(1 * 2 * 3)
    );

    BOOST_HANA_CONSTANT_CHECK(
        hana::ap(hana::just(multiply), hana::just(1),
                                       hana::nothing,
                                       hana::just(3))
            ==
        hana::nothing
    );
}
Exemplo n.º 23
0
int main() {
    constexpr auto sequence = hana::test::seq;

    // Use pointers to workaround a Clang ICE
    hana::test::_injection<0> f{};
    auto* fp = &f;

    hana::test::ct_eq<999> state{};
    auto* statep = &state;

    auto check = [=](auto ...pairs) {
        auto possible_results = hana::transform(hana::permutations(sequence(pairs...)),
            [=](auto xs) {
                return hana::fold_left(xs, *statep, *fp);
            }
        );

        BOOST_HANA_CONSTANT_CHECK(hana::contains(
            possible_results,
            hana::fold_left(hana::make_map(pairs...), state, f)
        ));
    };

    check();
    check(p<1, 1>());
    check(p<1, 1>(), p<2, 2>());
    check(p<1, 1>(), p<2, 2>(), p<3, 3>());
    check(p<1, 1>(), p<2, 2>(), p<3, 3>(), p<4, 4>());
}
Exemplo n.º 24
0
int main() {
    static_assert(hana::equal(hana::make_tuple(1, 2), hana::make_tuple(1, 2)), "");
    static_assert(!hana::equal('x', 'y'), "");
    BOOST_HANA_CONSTANT_CHECK(!hana::equal(hana::make_tuple(1, 2), 'y'));

    static_assert(hana::any_of(hana::make_tuple(1, 2, 3), hana::equal.to(2)), "");
}
Exemplo n.º 25
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(hana::any_of(
        BOOST_HANA_STRING("abcd"),
        hana::equal.to(hana::char_c<'b'>)
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::any_of(
        BOOST_HANA_STRING(""),
        hana::always(hana::true_c)
    )));

    BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::any_of(
        BOOST_HANA_STRING("abcd"),
        hana::equal.to(hana::char_c<'z'>)
    )));
}
Exemplo n.º 26
0
Arquivo: value.cpp Projeto: npk48/hana
int main() {
    static_assert(hana::just('x').value() == 'x', "");
    BOOST_HANA_CONSTANT_CHECK(*hana::just(hana::type_c<int>) == hana::type_c<int>);
    BOOST_HANA_RUNTIME_CHECK(hana::just(std::string{"abcd"})->size() == 4);

    // hana::nothing.value(); // compile-time error
}
Exemplo n.º 27
0
int main() {
    // make sure to_tuple == to<tuple_tag>
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::to<hana::tuple_tag>(hana::tuple_t<int, char, void, int(float)>),
        hana::to_tuple(hana::tuple_t<int, char, void, int(float)>)
    ));
}
Exemplo n.º 28
0
int main() {
    // make sure make<range_tag> works with arbitrary Constants
    BOOST_HANA_CONSTANT_CHECK(hana::equal(
        hana::make<hana::range_tag>(hana::test::_constant<1>{}, hana::test::_constant<4>{}),
        hana::make_range(hana::integral_c<int, 1>, hana::integral_c<int, 4>)
    ));
}
Exemplo n.º 29
0
int main() {
    static_assert(hana::not_equal(hana::make_tuple(1, 2), hana::make_tuple(3)), "");
    static_assert(hana::not_equal('x', 'y'), "");
    BOOST_HANA_CONSTANT_CHECK(hana::not_equal(hana::make_tuple(1, 2), 'y'));

    static_assert(hana::all_of(hana::make_tuple(1, 2, 3), hana::not_equal.to(5)), "");
}
Exemplo n.º 30
0
int main() {
    BOOST_HANA_CONSTANT_CHECK(hana::less(
        std::ratio<1>{},
        std::ratio<3>{}
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::less(
        std::ratio<4, 10>{},
        std::ratio<3, 5>{}
    ));

    BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::less(
        std::ratio<3, 5>{},
        std::ratio<4, 10>{}
    )));
}