Skip to content

Commit

Permalink
refs #139 burst::to_vector
Browse files Browse the repository at this point in the history
  • Loading branch information
izvolov committed Oct 25, 2020
1 parent 82f62f5 commit c31105a
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 0 deletions.
40 changes: 40 additions & 0 deletions include/burst/range/adaptor/to_vector.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#ifndef BURST_RANGE_ADAPTOR_TO_VECTOR_HPP
#define BURST_RANGE_ADAPTOR_TO_VECTOR_HPP

#include <burst/range/adaptor/adaptor.hpp>
#include <burst/container/make_vector.hpp>

namespace burst
{
struct make_vector_t
{
template <typename... Xs>
constexpr auto operator () (Xs &&... xs) const
{
return make_vector(std::forward<Xs>(xs)...);
}
};

/*!
\brief
Инструмент для конструирования вектора через конвейер
\details
Вызов
\code{.cpp}
range | to_vector
\endcode
эквивалентен вызову
\code{.cpp}
make_vector(range)
\endcode
\see make_vector
*/
constexpr auto to_vector = make_adaptor_trigger(make_vector_t{});
} // namespace burst

#endif // BURST_RANGE_ADAPTOR_TO_VECTOR_HPP
1 change: 1 addition & 0 deletions test/burst/range/adaptor/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,6 @@ target_sources(burst-unit-tests PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/symmetric_differenced.cpp
${CMAKE_CURRENT_SOURCE_DIR}/taken_at_most.cpp
${CMAKE_CURRENT_SOURCE_DIR}/taken_exactly.cpp
${CMAKE_CURRENT_SOURCE_DIR}/to_vector.cpp
${CMAKE_CURRENT_SOURCE_DIR}/united.cpp
)
33 changes: 33 additions & 0 deletions test/burst/range/adaptor/to_vector.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
#include <burst/range/adaptor/to_vector.hpp>

#include <doctest/doctest.h>

#include <boost/range/irange.hpp>

#include <forward_list>
#include <initializer_list>
#include <vector>

TEST_SUITE("to_vector")
{
TEST_CASE("Может работать с rvalue-диапазоном")
{
const auto v = boost::irange<int>(0, 10) | burst::to_vector;
CHECK(v == std::vector<int>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9});
}

TEST_CASE("Может работать с lvalue-диапазоном")
{
const auto fl = std::forward_list<char>{'a', 'b', 'c'};

const auto v = fl | burst::to_vector;
CHECK(v == std::vector<char>{'a', 'b', 'c'});
}

TEST_CASE("Может работать со списком инициализации")
{
auto l = {'a', 'b', 'c'};
const auto v = l | burst::to_vector;
CHECK(v == std::vector<char>{'a', 'b', 'c'});
}
}

0 comments on commit c31105a

Please sign in to comment.