detail_argument_traits_test.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright 2019 Hans Dembinski
  2. //
  3. // Distributed under the Boost Software License, Version 1.0.
  4. // (See accompanying file LICENSE_1_0.txt
  5. // or copy at http://www.boost.org/LICENSE_1_0.txt)
  6. #include <boost/core/lightweight_test.hpp>
  7. #include <boost/core/lightweight_test_trait.hpp>
  8. #include <boost/histogram/detail/argument_traits.hpp>
  9. #include <boost/histogram/sample.hpp>
  10. #include <boost/histogram/weight.hpp>
  11. namespace dtl = boost::histogram::detail;
  12. int main() {
  13. using boost::histogram::sample;
  14. using boost::histogram::weight;
  15. // is_weight
  16. {
  17. struct A {};
  18. using B = int;
  19. BOOST_TEST_NOT(dtl::is_weight<A>::value);
  20. BOOST_TEST_NOT(dtl::is_weight<B>::value);
  21. BOOST_TEST_NOT(dtl::is_weight<decltype(sample(0))>::value);
  22. BOOST_TEST(dtl::is_weight<decltype(weight(0))>::value);
  23. }
  24. // is_sample
  25. {
  26. struct A {};
  27. using B = int;
  28. BOOST_TEST_NOT(dtl::is_sample<A>::value);
  29. BOOST_TEST_NOT(dtl::is_sample<B>::value);
  30. BOOST_TEST_NOT(dtl::is_sample<decltype(weight(0))>::value);
  31. BOOST_TEST(dtl::is_sample<decltype(sample(0))>::value);
  32. BOOST_TEST(dtl::is_sample<decltype(sample(0, A{}))>::value);
  33. }
  34. using T1 = dtl::argument_traits<int>;
  35. using E1 = dtl::argument_traits_holder<1, 0, -1, -1, std::tuple<>>;
  36. BOOST_TEST_TRAIT_SAME(T1, E1);
  37. using T2 = dtl::argument_traits<int, int>;
  38. using E2 = dtl::argument_traits_holder<2, 0, -1, -1, std::tuple<>>;
  39. BOOST_TEST_TRAIT_SAME(T2, E2);
  40. using T3 = dtl::argument_traits<decltype(weight(0)), int, int>;
  41. using E3 = dtl::argument_traits_holder<2, 1, 0, -1, std::tuple<>>;
  42. BOOST_TEST_TRAIT_SAME(T3, E3);
  43. using T4 = dtl::argument_traits<decltype(weight(0)), int, int, decltype(sample(0))>;
  44. using E4 = dtl::argument_traits_holder<2, 1, 0, 3, std::tuple<int>>;
  45. BOOST_TEST_TRAIT_SAME(T4, E4);
  46. using T5 = dtl::argument_traits<int, decltype(sample(0, 0.0))>;
  47. using E5 = dtl::argument_traits_holder<1, 0, -1, 1, std::tuple<int, double>>;
  48. BOOST_TEST_TRAIT_SAME(T5, E5);
  49. return boost::report_errors();
  50. }