/* @copyright Louis Dionne 2014 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 using namespace boost::hana; #define BOOST_HANA_TEST_BINARY_OP(op, x, y) \ BOOST_HANA_STATIC_ASSERT((_ op _)(x, y) == (x op y)); \ BOOST_HANA_STATIC_ASSERT((_ op y)(x) == (x op y)); \ BOOST_HANA_STATIC_ASSERT((x op _)(y) == (x op y)); \ /**/ #define BOOST_HANA_TEST_UNARY_OP(op, x) \ BOOST_HANA_STATIC_ASSERT((op _)(x) == (op x)); \ /**/ int main() { // Arithmetic BOOST_HANA_TEST_UNARY_OP(+, 1) BOOST_HANA_TEST_UNARY_OP(-, 1) BOOST_HANA_TEST_BINARY_OP(+, 6, 3) BOOST_HANA_TEST_BINARY_OP(-, 6, 3) BOOST_HANA_TEST_BINARY_OP(*, 6, 3) BOOST_HANA_TEST_BINARY_OP(/, 6, 3) BOOST_HANA_TEST_BINARY_OP(%, 6, 3) BOOST_HANA_TEST_UNARY_OP(~, 5) BOOST_HANA_TEST_BINARY_OP(&, 6, 3) BOOST_HANA_TEST_BINARY_OP(|, 6, 3) BOOST_HANA_TEST_BINARY_OP(^, 6, 3) BOOST_HANA_TEST_BINARY_OP(<<, 6, 3) BOOST_HANA_TEST_BINARY_OP(>>, 6, 3) // Comparison BOOST_HANA_TEST_BINARY_OP(==, 6, 3) BOOST_HANA_TEST_BINARY_OP(!=, 6, 3) BOOST_HANA_TEST_BINARY_OP(<, 6, 3) BOOST_HANA_TEST_BINARY_OP(<=, 6, 3) BOOST_HANA_TEST_BINARY_OP(>, 6, 3) BOOST_HANA_TEST_BINARY_OP(>=, 6, 3) // Logical BOOST_HANA_TEST_BINARY_OP(||, true, false) BOOST_HANA_TEST_BINARY_OP(&&, true, true) BOOST_HANA_TEST_UNARY_OP(!, true) // Member access constexpr int i = 4; BOOST_HANA_TEST_UNARY_OP(*, &i) }