TEST(TestEnumIterator, explict_iterator) { using Range = EnumRange<ExplicitTest>; using Iterator = EnumIterator<ExplicitTest>;
constexpr Range range{};
EXPECT_EQ(range.first(), *range.begin());
EXPECT_EQ(Iterator(range.first()), range.begin());
EnumIterator<ExplicitTest> it = range.begin();
++it;
EXPECT_EQ(ExplicitTest::value2, *it);
it = range.begin(); for (int i = explicit_start; i < explicit_end; ++i, ++it) {
ExplicitTest value = static_cast<ExplicitTest>(i);
EXPECT_EQ(value, *it);
EXPECT_EQ(Iterator(value), it);
EXPECT_EQ(size_t(i - explicit_start), range.index(value));
}
EXPECT_EQ(it, range.end());
}
TEST(TestEnumIterator, implicit_iterator) { using Range = EnumRange<ImplicitTest>; using Iterator = EnumIterator<ImplicitTest>;
constexpr Range range{};
EXPECT_EQ(range.first(), *range.begin());
EXPECT_EQ(Iterator(range.first()), range.begin());
EnumIterator<ImplicitTest> it = range.begin(); for (int i = implicit_start; i < implicit_end; ++i, ++it) {
ImplicitTest value = static_cast<ImplicitTest>(i);
EXPECT_EQ(value, *it);
EXPECT_EQ(Iterator(value), it);
EXPECT_EQ(size_t(i - implicit_start), range.index(value));
}
EXPECT_EQ(it, range.end());
}
TEST(TestEnumIterator, explict_range_based_for_loop_full) { int i = explicit_start; for (ExplicitTest value : EnumRange<ExplicitTest>{}) {
EXPECT_EQ(size_t(i - explicit_start), EnumRange<ExplicitTest>{}.index(value));
EXPECT_TRUE(value == ExplicitTest::value1 ||
value == ExplicitTest::value2 ||
value == ExplicitTest::value3);
++i;
}
}
TEST(TestEnumIterator, explict_range_based_for_loop_start) {
constexpr EnumRange<ExplicitTest> range{ExplicitTest::value2}; int start = explicit_start + 2; int i = start; for (ExplicitTest value : range) {
EXPECT_EQ(size_t(i - start), range.index(value));
EXPECT_TRUE(value == ExplicitTest::value2 || value == ExplicitTest::value3);
EXPECT_TRUE(value != ExplicitTest::value1);
++i;
}
}
TEST(TestEnumIterator, explict_range_based_for_loop_start_end) {
constexpr EnumRange<ExplicitTest> range{ExplicitTest::value1, ExplicitTest::value2}; int start = explicit_start + 1; int i = start; for (ExplicitTest value : range) {
EXPECT_EQ(size_t(i - start), range.index(value));
EXPECT_TRUE(value == ExplicitTest::value1 || value == ExplicitTest::value2);
EXPECT_TRUE(value != ExplicitTest::value3);
++i;
}
}
TEST(TestEnumIterator, implicit_range_based_for_loop) { int i = implicit_start; for (ImplicitTest value : EnumRange<ImplicitTest>{}) {
EXPECT_EQ(size_t(i - implicit_start), EnumRange<ImplicitTest>{}.index(value));
++i;
}
}
TEST(TestEnumIterator, implicit_range_based_for_loop_start) { int start = implicit_start + 1;
EnumRange<ImplicitTest> range{static_cast<ImplicitTest>(start)}; int i = start; for (ImplicitTest value : range) {
EXPECT_EQ(size_t(i - start), range.index(value)); int iv = static_cast<int>(value);
EXPECT_TRUE(start <= iv && iv <= implicit_end);
++i;
}
}
TEST(TestEnumIterator, implicit_range_based_for_loop_start_end) { int start = implicit_start + 1; int end = implicit_end - 1;
EnumRange<ImplicitTest> range{static_cast<ImplicitTest>(start), static_cast<ImplicitTest>(end)}; int i = start; for (ImplicitTest value : range) {
EXPECT_EQ(size_t(i - start), range.index(value)); int iv = static_cast<int>(value);
EXPECT_TRUE(start <= iv && iv <= end);
++i;
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.