File tree Expand file tree Collapse file tree 5 files changed +104
-1
lines changed
Expand file tree Collapse file tree 5 files changed +104
-1
lines changed Original file line number Diff line number Diff line change @@ -25,7 +25,7 @@ auto compose(F f, Fs... fs) {
2525namespace operators {
2626template <class Xs , class F >
2727auto operator >> (Xs&& xs, F&& f)
28- -> decltype (xs.begin(), f(FWD(xs)).begin(), f(FWD(xs)) ) {
28+ -> decltype (xs.begin(), f(FWD(xs))) {
2929 return f (FWD (xs));
3030}
3131
Original file line number Diff line number Diff line change 1+ #ifndef CONDUIT_SUM_HPP
2+ #define CONDUIT_SUM_HPP
3+
4+ #include < conduit/meta.hpp>
5+ #include < conduit/seq.hpp>
6+
7+ namespace conduit {
8+
9+ static constexpr auto sum () {
10+ return [=](auto && xs) {
11+ using T = decltype (first (xs));
12+ T result = T{};
13+ for (auto &&x: xs) {
14+ result+=x;
15+ }
16+ return result;
17+ };
18+ };
19+
20+ } // namespace conduit
21+
22+ #endif
Original file line number Diff line number Diff line change 1+ #ifndef CONDUIT_TO_VECTOR_HPP
2+ #define CONDUIT_TO_VECTOR_HPP
3+
4+ #include < vector>
5+
6+ namespace conduit {
7+ auto toVector = [](std::size_t n=0 ) {
8+ return [n](auto && xs) -> std::vector<decltype (first (xs))> {
9+ using T = decltype (first (xs));
10+ auto vec = std::vector<T>();
11+ vec.reserve (n);
12+ for (auto &&x: xs) {
13+ vec.emplace_back (std::move (x));
14+ }
15+ return vec;
16+ };
17+ };
18+ }
19+
20+ #endif
Original file line number Diff line number Diff line change 1+ #include < gtest/gtest.h>
2+ #include < conduit/sum.hpp>
3+ #include < conduit/range.hpp>
4+ #include < conduit/compose.hpp>
5+ #include < conduit/map.hpp>
6+
7+ #include < conduit/allocators/terminate.hpp>
8+
9+ using namespace conduit ;
10+ using namespace operators ;
11+
12+ TEST (Seq, sum_some) {
13+ auto value = range (0 , 4 )
14+ >> sum ();
15+
16+ EXPECT_EQ (value, 6 );
17+ }
18+
19+
20+ TEST (Seq, sum_none) {
21+ auto value = range (0 , 0 )
22+ >> sum ();
23+
24+ EXPECT_EQ (value, 0 );
25+ }
26+
27+
28+ TEST (Seq, sum_floats) {
29+ auto value = range (0 , 4 )
30+ >> map ([](auto x) { return (float )x; })
31+ >> sum ();
32+
33+ EXPECT_EQ (value, 6 .0f );
34+ }
Original file line number Diff line number Diff line change 1+ #include < gtest/gtest.h>
2+ #include < conduit/to-vector.hpp>
3+ #include < conduit/range.hpp>
4+ #include < conduit/filter.hpp>
5+ #include < conduit/take.hpp>
6+ #include < conduit/compose.hpp>
7+
8+ using namespace conduit ;
9+ using namespace operators ;
10+
11+ TEST (Seq, toVector) {
12+
13+ auto items = range ()
14+ >> filter ([](auto x){ return x%2 ==0 ; })
15+ >> take (4 )
16+ >> toVector ();
17+
18+ int i = 0 ;
19+ for (auto x : items) {
20+ EXPECT_EQ (i*2 , x);
21+ ++i;
22+ }
23+
24+ EXPECT_EQ (i, 4 );
25+ }
26+
27+
You can’t perform that action at this time.
0 commit comments