• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright Louis Dionne 2013-2017
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
4 
5 #include <boost/hana/detail/variadic/foldl1.hpp>
6 
7 #include <boost/hana/assert.hpp>
8 #include <boost/hana/equal.hpp>
9 
10 #include <laws/base.hpp>
11 namespace hana = boost::hana;
12 
13 
14 struct undefined { };
15 
16 template <int i>
17 using x = hana::test::ct_eq<i>;
18 
main()19 int main() {
20     using hana::detail::variadic::foldl1;
21     hana::test::_injection<0> f{};
22 
23     BOOST_HANA_CONSTANT_CHECK(hana::equal(
24         foldl1(undefined{}, x<1>{}),
25         x<1>{}
26     ));
27 
28     BOOST_HANA_CONSTANT_CHECK(hana::equal(
29         foldl1(f, x<1>{}, x<2>{}),
30         f(x<1>{}, x<2>{})
31     ));
32 
33     BOOST_HANA_CONSTANT_CHECK(hana::equal(
34         foldl1(f, x<1>{}, x<2>{}, x<3>{}),
35         f(f(x<1>{}, x<2>{}), x<3>{})
36     ));
37 
38     BOOST_HANA_CONSTANT_CHECK(hana::equal(
39         foldl1(f, x<1>{}, x<2>{}, x<3>{}, x<4>{}),
40         f(f(f(x<1>{}, x<2>{}), x<3>{}), x<4>{})
41     ));
42 
43     BOOST_HANA_CONSTANT_CHECK(hana::equal(
44         foldl1(f, x<1>{}, x<2>{}, x<3>{}, x<4>{}, x<5>{}),
45         f(f(f(f(x<1>{}, x<2>{}), x<3>{}), x<4>{}), x<5>{})
46     ));
47 
48     BOOST_HANA_CONSTANT_CHECK(hana::equal(
49         foldl1(f, x<1>{}, x<2>{}, x<3>{}, x<4>{}, x<5>{}, x<6>{}),
50         f(f(f(f(f(x<1>{}, x<2>{}), x<3>{}), x<4>{}), x<5>{}), x<6>{})
51     ));
52 
53     BOOST_HANA_CONSTANT_CHECK(hana::equal(
54         foldl1(f, x<1>{}, x<2>{}, x<3>{}, x<4>{}, x<5>{}, x<6>{}, x<7>{}),
55         f(f(f(f(f(f(x<1>{}, x<2>{}), x<3>{}), x<4>{}), x<5>{}), x<6>{}), x<7>{})
56     ));
57 
58     BOOST_HANA_CONSTANT_CHECK(hana::equal(
59         foldl1(f, x<1>{}, x<2>{}, x<3>{}, x<4>{}, x<5>{}, x<6>{}, x<7>{}, x<8>{}),
60         f(f(f(f(f(f(f(x<1>{}, x<2>{}), x<3>{}), x<4>{}), x<5>{}), x<6>{}), x<7>{}), x<8>{})
61     ));
62 
63     BOOST_HANA_CONSTANT_CHECK(hana::equal(
64         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
65                   x<8>{},  x<9>{}
66         ),
67         f(f(f(f(f(f(f(f(
68             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
69             x<8>{}),  x<9>{})
70     ));
71 
72 
73     BOOST_HANA_CONSTANT_CHECK(hana::equal(
74         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
75                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}
76         ),
77         f(f(f(f(f(f(f(f(f(f(f(f(
78             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
79             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{})
80     ));
81 
82     BOOST_HANA_CONSTANT_CHECK(hana::equal(
83         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
84                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}, x<14>{}
85         ),
86         f(f(f(f(f(f(f(f(f(f(f(f(f(
87             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
88             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{}), x<14>{})
89     ));
90 
91     BOOST_HANA_CONSTANT_CHECK(hana::equal(
92         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
93                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}, x<14>{},
94                   x<15>{}
95         ),
96         f(f(f(f(f(f(f(f(f(f(f(f(f(f(
97             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
98             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{}), x<14>{}),
99             x<15>{})
100     ));
101 
102 
103     BOOST_HANA_CONSTANT_CHECK(hana::equal(
104         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
105                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}, x<14>{},
106                   x<15>{}, x<16>{}, x<17>{}, x<18>{}, x<19>{}, x<20>{}, x<21>{},
107                   x<22>{}, x<23>{}, x<24>{}, x<25>{}, x<26>{}, x<27>{}
108         ),
109         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
110             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
111             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{}), x<14>{}),
112             x<15>{}), x<16>{}), x<17>{}), x<18>{}), x<19>{}), x<20>{}), x<21>{}),
113             x<22>{}), x<23>{}), x<24>{}), x<25>{}), x<26>{}), x<27>{})
114     ));
115 
116     BOOST_HANA_CONSTANT_CHECK(hana::equal(
117         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
118                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}, x<14>{},
119                   x<15>{}, x<16>{}, x<17>{}, x<18>{}, x<19>{}, x<20>{}, x<21>{},
120                   x<22>{}, x<23>{}, x<24>{}, x<25>{}, x<26>{}, x<27>{}, x<28>{}
121         ),
122         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
123             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
124             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{}), x<14>{}),
125             x<15>{}), x<16>{}), x<17>{}), x<18>{}), x<19>{}), x<20>{}), x<21>{}),
126             x<22>{}), x<23>{}), x<24>{}), x<25>{}), x<26>{}), x<27>{}), x<28>{})
127     ));
128 
129     BOOST_HANA_CONSTANT_CHECK(hana::equal(
130         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
131                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}, x<14>{},
132                   x<15>{}, x<16>{}, x<17>{}, x<18>{}, x<19>{}, x<20>{}, x<21>{},
133                   x<22>{}, x<23>{}, x<24>{}, x<25>{}, x<26>{}, x<27>{}, x<28>{},
134                   x<29>{}
135         ),
136         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
137             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
138             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{}), x<14>{}),
139             x<15>{}), x<16>{}), x<17>{}), x<18>{}), x<19>{}), x<20>{}), x<21>{}),
140             x<22>{}), x<23>{}), x<24>{}), x<25>{}), x<26>{}), x<27>{}), x<28>{}),
141             x<29>{})
142     ));
143 
144 
145     BOOST_HANA_CONSTANT_CHECK(hana::equal(
146         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
147                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}, x<14>{},
148                   x<15>{}, x<16>{}, x<17>{}, x<18>{}, x<19>{}, x<20>{}, x<21>{},
149                   x<22>{}, x<23>{}, x<24>{}, x<25>{}, x<26>{}, x<27>{}, x<28>{},
150                   x<29>{}, x<30>{}, x<31>{}, x<32>{}, x<33>{}, x<34>{}, x<35>{},
151                   x<36>{}, x<37>{}, x<38>{}, x<39>{}, x<40>{}, x<41>{}, x<42>{},
152                   x<43>{}, x<44>{}, x<45>{}, x<46>{}, x<47>{}, x<48>{}, x<49>{},
153                   x<50>{}, x<51>{}, x<52>{}, x<53>{}, x<54>{}, x<55>{}
154         ),
155         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
156         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
157             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
158             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{}), x<14>{}),
159             x<15>{}), x<16>{}), x<17>{}), x<18>{}), x<19>{}), x<20>{}), x<21>{}),
160             x<22>{}), x<23>{}), x<24>{}), x<25>{}), x<26>{}), x<27>{}), x<28>{}),
161             x<29>{}), x<30>{}), x<31>{}), x<32>{}), x<33>{}), x<34>{}), x<35>{}),
162             x<36>{}), x<37>{}), x<38>{}), x<39>{}), x<40>{}), x<41>{}), x<42>{}),
163             x<43>{}), x<44>{}), x<45>{}), x<46>{}), x<47>{}), x<48>{}), x<49>{}),
164             x<50>{}), x<51>{}), x<52>{}), x<53>{}), x<54>{}), x<55>{})
165     ));
166 
167     BOOST_HANA_CONSTANT_CHECK(hana::equal(
168         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
169                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}, x<14>{},
170                   x<15>{}, x<16>{}, x<17>{}, x<18>{}, x<19>{}, x<20>{}, x<21>{},
171                   x<22>{}, x<23>{}, x<24>{}, x<25>{}, x<26>{}, x<27>{}, x<28>{},
172                   x<29>{}, x<30>{}, x<31>{}, x<32>{}, x<33>{}, x<34>{}, x<35>{},
173                   x<36>{}, x<37>{}, x<38>{}, x<39>{}, x<40>{}, x<41>{}, x<42>{},
174                   x<43>{}, x<44>{}, x<45>{}, x<46>{}, x<47>{}, x<48>{}, x<49>{},
175                   x<50>{}, x<51>{}, x<52>{}, x<53>{}, x<54>{}, x<55>{}, x<56>{}
176         ),
177         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
178         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
179             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
180             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{}), x<14>{}),
181             x<15>{}), x<16>{}), x<17>{}), x<18>{}), x<19>{}), x<20>{}), x<21>{}),
182             x<22>{}), x<23>{}), x<24>{}), x<25>{}), x<26>{}), x<27>{}), x<28>{}),
183             x<29>{}), x<30>{}), x<31>{}), x<32>{}), x<33>{}), x<34>{}), x<35>{}),
184             x<36>{}), x<37>{}), x<38>{}), x<39>{}), x<40>{}), x<41>{}), x<42>{}),
185             x<43>{}), x<44>{}), x<45>{}), x<46>{}), x<47>{}), x<48>{}), x<49>{}),
186             x<50>{}), x<51>{}), x<52>{}), x<53>{}), x<54>{}), x<55>{}), x<56>{})
187     ));
188 
189     BOOST_HANA_CONSTANT_CHECK(hana::equal(
190         foldl1(f, x<1>{},  x<2>{},  x<3>{},  x<4>{},  x<5>{},  x<6>{},  x<7>{},
191                   x<8>{},  x<9>{},  x<10>{}, x<11>{}, x<12>{}, x<13>{}, x<14>{},
192                   x<15>{}, x<16>{}, x<17>{}, x<18>{}, x<19>{}, x<20>{}, x<21>{},
193                   x<22>{}, x<23>{}, x<24>{}, x<25>{}, x<26>{}, x<27>{}, x<28>{},
194                   x<29>{}, x<30>{}, x<31>{}, x<32>{}, x<33>{}, x<34>{}, x<35>{},
195                   x<36>{}, x<37>{}, x<38>{}, x<39>{}, x<40>{}, x<41>{}, x<42>{},
196                   x<43>{}, x<44>{}, x<45>{}, x<46>{}, x<47>{}, x<48>{}, x<49>{},
197                   x<50>{}, x<51>{}, x<52>{}, x<53>{}, x<54>{}, x<55>{}, x<56>{},
198                   x<57>{}
199         ),
200         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
201         f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(f(
202             x<1>{},   x<2>{}),  x<3>{}),  x<4>{}),  x<5>{}),  x<6>{}),  x<7>{}),
203             x<8>{}),  x<9>{}),  x<10>{}), x<11>{}), x<12>{}), x<13>{}), x<14>{}),
204             x<15>{}), x<16>{}), x<17>{}), x<18>{}), x<19>{}), x<20>{}), x<21>{}),
205             x<22>{}), x<23>{}), x<24>{}), x<25>{}), x<26>{}), x<27>{}), x<28>{}),
206             x<29>{}), x<30>{}), x<31>{}), x<32>{}), x<33>{}), x<34>{}), x<35>{}),
207             x<36>{}), x<37>{}), x<38>{}), x<39>{}), x<40>{}), x<41>{}), x<42>{}),
208             x<43>{}), x<44>{}), x<45>{}), x<46>{}), x<47>{}), x<48>{}), x<49>{}),
209             x<50>{}), x<51>{}), x<52>{}), x<53>{}), x<54>{}), x<55>{}), x<56>{}),
210             x<57>{})
211     ));
212 }
213