diff options
| author | Lexi Winter <lexi@le-fay.org> | 2025-07-01 21:40:28 +0100 |
|---|---|---|
| committer | Lexi Winter <lexi@le-fay.org> | 2025-07-01 21:40:28 +0100 |
| commit | 762fdfaa953b35ed4c402c74890c5c30155a5dab (patch) | |
| tree | c2fcc4272d7d7739fdbfb45cadf4c9ba6a7581e3 | |
| parent | 85baf16dd366fb501dc522a0957ec680dc9478f0 (diff) | |
| download | nihil-762fdfaa953b35ed4c402c74890c5c30155a5dab.tar.gz nihil-762fdfaa953b35ed4c402c74890c5c30155a5dab.tar.bz2 | |
add some more generator tests
| -rw-r--r-- | nihil.generator/generator.test.cc | 64 |
1 files changed, 52 insertions, 12 deletions
diff --git a/nihil.generator/generator.test.cc b/nihil.generator/generator.test.cc index 59a2c45..1782dfb 100644 --- a/nihil.generator/generator.test.cc +++ b/nihil.generator/generator.test.cc @@ -5,23 +5,62 @@ import nihil.std; import nihil.generator; -TEST_CASE("generator: basic", "[generator]") +namespace { +inline auto constexpr test_tags = "[nihil][nihil.generator]"; + +SCENARIO("A generator that yields values", test_tags) { - auto fn = [] () -> nihil::generator<int> { - co_yield 1; - co_yield 2; - co_yield 3; - }; + GIVEN ("A generator that yields values") { + auto fn = [&]() -> nihil::generator<int> { + co_yield 1; + co_yield 2; + }; - auto values = std::vector<int>(); - std::ranges::copy(fn(), std::back_inserter(values)); + THEN ("The generator yields the original values") { + REQUIRE(std::ranges::equal(fn(), std::vector{1, 2})); + } + } +} - REQUIRE(values == std::vector{1, 2, 3}); +SCENARIO("A generator that yields references", test_tags) +{ + GIVEN ("A generator that yields references") { + auto one = 1, two = 2; + auto fn = [&]() -> nihil::generator<int &> { + co_yield one; + co_yield two; + }; + auto range = fn(); + + THEN ("The references refer to the original values") { + auto it = std::ranges::begin(range); + REQUIRE(&*it == &one); + ++it; + REQUIRE(&*it == &two); + ++it; + REQUIRE(it == std::ranges::end(range)); + } + } +} + +SCENARIO("A generator that yields pointers", test_tags) +{ + GIVEN ("A generator that yields pointers") { + auto one = 1, two = 2; + auto fn = [&]() -> nihil::generator<int *> { + co_yield &one; + co_yield &two; + }; + + THEN ("The pointers point to the original values") { + REQUIRE(std::ranges::equal(fn(), std::vector{&one, &two})); + } + } } -TEST_CASE("generator: exceptions", "[generator]") +TEST_CASE("generator: exceptions", "[generator]") { - auto fn = [] () -> nihil::generator<int> { + auto fn = []() -> nihil::generator<int> { co_yield 1; throw std::runtime_error("test"); }; @@ -32,7 +71,7 @@ TEST_CASE("generator: exceptions", "[generator]") REQUIRE_THROWS_AS(it++, std::runtime_error); } -TEST_CASE("generator: elements_of", "[generator]") +TEST_CASE("generator: elements_of", "[generator]") { auto fn1 = [] -> nihil::generator<int> { co_yield 1; @@ -49,3 +88,4 @@ TEST_CASE("generator: elements_of", "[generator]") REQUIRE(values == std::vector{1, 2, 3}); } +} // anonymous namespace |
