openMSX
enumerate_test.cc
Go to the documentation of this file.
1#include "catch.hpp"
2#include "enumerate.hh"
3#include "narrow.hh"
4#include <type_traits>
5#include <vector>
6
7TEST_CASE("enumerate: basic")
8{
9 char in[3] = {'a', 'd', 'z'};
10 std::vector<size_t> out1;
11 std::vector<char> out2;
12
13 for (auto [i, e] : enumerate(in)) {
14 static_assert(std::is_same_v<decltype(i), const size_t&>);
15 static_assert(std::is_same_v<decltype(e), char&>);
16 out1.push_back(i);
17 out2.push_back(e);
18 }
19
20 CHECK(out1 == std::vector<size_t>{0, 1, 2});
21 CHECK(out2 == std::vector{'a', 'd', 'z'});
22}
23
24TEST_CASE("enumerate: transform")
25{
26 std::vector in{3, 9, 11};
27 std::vector<size_t> out;
28
29 for (auto [i, e] : enumerate(in)) {
30 static_assert(std::is_same_v<decltype(i), const size_t&>);
31 static_assert(std::is_same_v<decltype(e), int&>);
32 out.push_back(i);
33 e = narrow_cast<int>(2 * e + i);
34 }
35
36 CHECK(in == std::vector{6, 19, 24});
37 CHECK(out == std::vector<size_t>{0, 1, 2});
38}
constexpr auto enumerate(Iterable &&iterable)
Heavily inspired by Nathan Reed's blog post: Python-Like enumerate() In C++17 http://reedbeta....
Definition: enumerate.hh:28
TEST_CASE("enumerate: basic")
CHECK(m3==m3)
constexpr double e
Definition: Math.hh:21