Ejemplo n.º 1
0
int main() {
    BOOST_HANA_CONSTANT_ASSERT(constant_bool<true, void>());
    BOOST_HANA_CONSTANT_ASSERT(constant_bool<true, void, void>());
    BOOST_HANA_CONSTANT_ASSERT(constant_bool<true, void, void, void>());

    BOOST_HANA_RUNTIME_ASSERT(runtime_bool<true, void>());
    BOOST_HANA_RUNTIME_ASSERT(runtime_bool<true, void, void>());
    BOOST_HANA_RUNTIME_ASSERT(runtime_bool<true, void, void, void>());

    BOOST_HANA_ASSERT(runtime_bool<true, void>());
    BOOST_HANA_ASSERT(runtime_bool<true, void, void>());
    BOOST_HANA_ASSERT(runtime_bool<true, void, void, void>());
    BOOST_HANA_ASSERT(constant_bool<true, void>());
    BOOST_HANA_ASSERT(constant_bool<true, void, void>());
    BOOST_HANA_ASSERT(constant_bool<true, void, void, void>());
}
Ejemplo n.º 2
0
int main()
{
  {
    constexpr auto xs = hana::to_tuple(hana::range_c<int, 1, 10>);
    constexpr auto pred = hana::demux(hana::not_)(hana::reverse_partial(hana::mod, hana::int_c<2>));
    constexpr auto result = hana::fold(xs, hana::make_tuple(), mpdef::append_if(pred));
    constexpr auto expected = hana::tuple_c<int, 2, 4, 6, 8>;
    BOOST_HANA_CONSTANT_ASSERT(result == expected);
  }
}
Ejemplo n.º 3
0
int main()
{
  {
    constexpr auto providers_meta = hana::make_tuple(
      builder::make_provider_meta_with_map(
        builder::provider_meta::provider     = names::Provider1,
        builder::provider_meta::name         = names::Provider1Name,
        builder::provider_meta::access_points = access_points_1
      ),
      builder::make_provider_meta_with_map(
        builder::provider_meta::provider     = names::Provider2,
        builder::provider_meta::name         = names::Provider2Name,
        builder::provider_meta::access_points = access_points_2
      )
    );

    constexpr auto result = nbdl_def::builder::provider_map(entity_map, providers_meta);

    BOOST_HANA_CONSTANT_ASSERT(
      result[
        hana::make_tuple(
          builder::path(entity_map, access_points_1[hana::int_c<0>]),
          builder::path(entity_map, access_points_1[hana::int_c<1>]),
          names::Provider1Name
        )
      ]
      == names::Provider1);

    BOOST_HANA_CONSTANT_ASSERT(
      result[
        hana::make_tuple(
          builder::path(entity_map, access_points_2[hana::int_c<0>]),
          names::Provider2Name
        )
      ]
      == names::Provider2);
  }
}
Ejemplo n.º 4
0
int main() {
    // Unsigned integral constants should hash to `unsigned long long`
    {
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<unsigned char, 10>),
            hana::type_c<hana::integral_constant<unsigned long long, 10>>
        ));
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<unsigned short, 10>),
            hana::type_c<hana::integral_constant<unsigned long long, 10>>
        ));
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<unsigned int, 10>),
            hana::type_c<hana::integral_constant<unsigned long long, 10>>
        ));
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<unsigned long, 10>),
            hana::type_c<hana::integral_constant<unsigned long long, 10>>
        ));
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<unsigned long long, 10>),
            hana::type_c<hana::integral_constant<unsigned long long, 10>>
        ));
    }

    // Signed integral constants should hash to `signed long long`
    {
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<signed char, 10>),
            hana::type_c<hana::integral_constant<signed long long, 10>>
        ));
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<signed short, 10>),
            hana::type_c<hana::integral_constant<signed long long, 10>>
        ));
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<signed int, 10>),
            hana::type_c<hana::integral_constant<signed long long, 10>>
        ));
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<signed long, 10>),
            hana::type_c<hana::integral_constant<signed long long, 10>>
        ));
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<signed long long, 10>),
            hana::type_c<hana::integral_constant<signed long long, 10>>
        ));
    }

    // `char` should hash to either `signed long long` or `unsigned long long`,
    // depending on its signedness
    {
        using T = std::conditional_t<
            std::is_signed<char>::value,
            signed long long,
            unsigned long long
        >;

        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::integral_c<char, 10>),
            hana::type_c<hana::integral_constant<T, 10>>
        ));
    }

    // Pointers to members should hash to themselves.
    // This test is disabled in pre-C++17, because pointers to non-static
    // data members can't be used as non-type template arguments before that.
    // See http://stackoverflow.com/q/35398848/627587.
    {
#if __cplusplus > 201402L

        struct Foo { int bar; };
        constexpr auto x = hana::integral_constant<int Foo::*, &Foo::bar>{};
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(x),
            hana::type_c<hana::integral_constant<int Foo::*, &Foo::bar>>
        ));

#endif
    }

    // Booleans should hash to themselves
    {
        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::true_c),
            hana::type_c<hana::true_>
        ));

        BOOST_HANA_CONSTANT_ASSERT(hana::equal(
            hana::hash(hana::false_c),
            hana::type_c<hana::false_>
        ));
    }
}