• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*=============================================================================
2     Copyright (c) 2017 Paul Fultz II
3     combine.cpp
4     Distributed under the Boost Software License, Version 1.0. (See accompanying
5     file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #include <boost/hof/combine.hpp>
8 #include "test.hpp"
9 
10 #include <boost/hof/construct.hpp>
11 #include <boost/hof/capture.hpp>
12 #include <utility>
13 #include <tuple>
14 
15 template<class T, class U>
16 struct mini_pair
17 {
18     T first;
19     U second;
20 
21     template<class X, class Y>
mini_pairmini_pair22     constexpr mini_pair(X&& x, Y&& y)
23     : first(boost::hof::forward<X>(x)), second(boost::hof::forward<Y>(y))
24     {}
25 };
26 
27 template<class T1, class U1, class T2, class U2>
operator ==(const mini_pair<T1,U1> & x,const mini_pair<T2,U2> & y)28 constexpr bool operator==(const mini_pair<T1, U1>& x, const mini_pair<T2, U2>& y)
29 {
30     return x.first == y.first && x.second == y.second;
31 }
32 
33 template<class T, class U>
make_mini_pair(T x,U y)34 constexpr mini_pair<T, U> make_mini_pair(T x, U y)
35 {
36     return mini_pair<T, U>(x, y);
37 }
38 
BOOST_HOF_TEST_CASE()39 BOOST_HOF_TEST_CASE()
40 {
41     BOOST_HOF_TEST_CHECK(
42         boost::hof::combine(
43             boost::hof::construct<std::tuple>(),
44             boost::hof::capture_basic(1)(boost::hof::construct<std::pair>()),
45             boost::hof::capture_basic(2)(boost::hof::construct<std::pair>())
46         )(2, 4)
47         == std::make_tuple(std::make_pair(1, 2), std::make_pair(2, 4)));
48 }
49 
BOOST_HOF_TEST_CASE()50 BOOST_HOF_TEST_CASE()
51 {
52     BOOST_HOF_TEST_CHECK(
53         boost::hof::combine(
54             boost::hof::construct<mini_pair>(),
55             boost::hof::capture_basic(1)(boost::hof::construct<mini_pair>()),
56             boost::hof::capture_basic(2)(boost::hof::construct<mini_pair>())
57         )(2, 4)
58         == make_mini_pair(make_mini_pair(1, 2), make_mini_pair(2, 4)));
59 
60     BOOST_HOF_STATIC_TEST_CHECK(
61         boost::hof::combine(
62             boost::hof::construct<mini_pair>(),
63             boost::hof::capture_basic(1)(boost::hof::construct<mini_pair>()),
64             boost::hof::capture_basic(2)(boost::hof::construct<mini_pair>())
65         )(2, 4)
66         == make_mini_pair(make_mini_pair(1, 2), make_mini_pair(2, 4)));
67 }
68 
69 
70 
71 
72