18 static vector<int> getVector(
int n)
30 SECTION(
"non-empty") {
31 vector<int> v = {1, 2, 3, 4, 5};
53 SECTION(
"non-empty") {
54 std::list<int> l = {1, 2, 3, 4, 5};
68 REQUIRE(
sizeof(vector<int>*) !=
sizeof(vector<int>));
70 vector<int> v = {0, 1, 2, 3};
73 CHECK(
sizeof(d) == (
sizeof(vector<int>*) +
sizeof(
size_t)));
76 auto d =
drop(getVector(4), 1);
78 CHECK(
sizeof(d) == (
sizeof(vector<int>) +
sizeof(
size_t)));
90 SECTION(
"non-empty") {
91 vector<int> v = {1, 2, 3, 4, 5};
113 SECTION(
"non-empty") {
114 std::list<int> l = {1, 2, 3, 4, 5};
131 vector<int> in = {1, 2, 3, 4};
132 for (
auto& e :
reverse(in)) out.push_back(e);
133 CHECK(out == vector<int>{4, 3, 2, 1});
136 for (
auto& e :
reverse(getVector(3))) out.push_back(e);
137 CHECK(out == vector<int>{2, 1, 0});
139 SECTION(
"2 x reverse") {
141 CHECK(out == vector<int>{0, 1, 2, 3});
147 auto square = [](
auto&
x) {
return x *
x; };
149 auto plus_i = [&](
auto&
x) {
return int(
x + i); };
152 vector<int> v = {1, 2, 3, 4};
193 template<
typename RANGE,
typename T>
194 static void check(
const RANGE& range,
const vector<T>& expected)
196 CHECK(equal(range.begin(), range.end(), expected.begin(), expected.end()));
199 template<
typename RANGE,
typename T>
200 static void check_unordered(
const RANGE& range,
const vector<T>& expected_)
202 auto result = to_vector<T>(range);
203 auto expected = expected_;
206 CHECK(result == expected);
210 SECTION(
"std::map") {
211 std::map<int, int> m = {{1, 2}, {3, 4}, {5, 6}, {7, 8}};
212 check(
keys (m), vector<int>{1, 3, 5, 7});
213 check(
values(m), vector<int>{2, 4, 6, 8});
215 SECTION(
"std::vector<std::pair>") {
216 vector<std::pair<int, int>> v = {{1, 2}, {3, 4}, {5, 6}, {7, 8}};
217 check(
keys (v), vector<int>{1, 3, 5, 7});
218 check(
values(v), vector<int>{2, 4, 6, 8});
220 SECTION(
"hash_map") {
222 {{
"foo", 1}, {
"bar", 2}, {
"qux", 3},
223 {
"baz", 4}, {
"a", 5}, {
"z", 6}};
224 check_unordered(
keys(m), vector<std::string>{
225 "foo",
"bar",
"qux",
"baz",
"a",
"z"});
226 check_unordered(
values(m), vector<int>{1, 2, 3, 4, 5, 6});
228 SECTION(
"std::vector<std::tuple>") {
229 vector<std::tuple<int, char, double, std::string>> v = {
230 std::tuple(1, 2, 1.2,
"foo"),
231 std::tuple(3, 4, 3.4,
"bar"),
232 std::tuple(5, 6, 5.6,
"qux")
234 check(
keys (v), vector<int>{1, 3, 5});
235 check(
values(v), vector<char>{2, 4, 6});
242 operator int()
const {
return i; }
243 bool isOdd()
const {
return i & 1; }
247 vector v = {1, 2, 3, 4, 5, 6, 7, 8, 9};
249 SECTION(
"removed front") {
253 SECTION(
"removed back") {
257 SECTION(
"keep front and back") {
259 vector{1, 3, 5, 7, 9});
261 SECTION(
"remove front and back") {
262 check(
view::filter(v, [](
int i) {
return (i & 1) == 0; }),
266 SECTION(
"projection") {
267 vector<F> f = {1, 2, 3, 4, 5};
269 auto it =
view.begin();
270 auto et =
view.end();
constexpr KeyMatrixPosition x
Keyboard bindings.
void sort(RandomAccessRange &&range)
auto filter(ForwardRange &&range, Predicate pred)
constexpr auto transform(Range &&range, UnaryOp op)
constexpr auto reverse(Range &&range)
constexpr auto drop(Range &&range, size_t n)
constexpr auto drop_back(Range &&range, size_t n)
constexpr auto keys(Map &&map)
constexpr auto values(Map &&map)
auto to_vector(Range &&range) -> std::vector< detail::ToVectorType< T, decltype(std::begin(range))>>
TEST_CASE("view::drop random-access-range")
constexpr auto xrange(T e)