Skip to content

Commit 62c8e92

Browse files
avdgrintenno92
authored andcommitted
tests: add generator testcases
1 parent cfc1b2c commit 62c8e92

2 files changed

Lines changed: 77 additions & 0 deletions

File tree

tests/generator.cpp

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
#include <async/generator.hpp>
2+
#include <async/basic.hpp>
3+
#include <async/result.hpp>
4+
#include <gtest/gtest.h>
5+
#include <memory>
6+
7+
namespace {
8+
9+
async::generator<int> generate_nothing() {
10+
co_return;
11+
}
12+
13+
async::generator<int> generate_ints() {
14+
co_yield 1;
15+
co_yield 2;
16+
co_yield 3;
17+
}
18+
19+
async::generator<std::unique_ptr<int>> generate_unique_ptrs() {
20+
co_yield std::make_unique<int>(1);
21+
co_yield std::make_unique<int>(2);
22+
co_yield std::make_unique<int>(3);
23+
}
24+
25+
} // anonymous namespace
26+
27+
TEST(Generator, YieldNothing) {
28+
async::run([]() -> async::result<void> {
29+
auto gen = generate_nothing();
30+
31+
auto v = co_await gen.next();
32+
EXPECT_FALSE(v.has_value());
33+
}());
34+
}
35+
36+
TEST(Generator, YieldInts) {
37+
async::run([]() -> async::result<void> {
38+
auto gen = generate_ints();
39+
40+
auto v1 = co_await gen.next();
41+
EXPECT_TRUE(v1.has_value());
42+
EXPECT_EQ(*v1, 1);
43+
44+
auto v2 = co_await gen.next();
45+
EXPECT_TRUE(v2.has_value());
46+
EXPECT_EQ(*v2, 2);
47+
48+
auto v3 = co_await gen.next();
49+
EXPECT_TRUE(v3.has_value());
50+
EXPECT_EQ(*v3, 3);
51+
52+
auto v4 = co_await gen.next();
53+
EXPECT_FALSE(v4.has_value());
54+
}());
55+
}
56+
57+
TEST(Generator, YieldMoveOnly) {
58+
async::run([]() -> async::result<void> {
59+
auto gen = generate_unique_ptrs();
60+
61+
auto v1 = co_await gen.next();
62+
EXPECT_TRUE(v1.has_value());
63+
EXPECT_EQ(**v1, 1);
64+
65+
auto v2 = co_await gen.next();
66+
EXPECT_TRUE(v2.has_value());
67+
EXPECT_EQ(**v2, 2);
68+
69+
auto v3 = co_await gen.next();
70+
EXPECT_TRUE(v3.has_value());
71+
EXPECT_EQ(**v3, 3);
72+
73+
auto v4 = co_await gen.next();
74+
EXPECT_FALSE(v4.has_value());
75+
}());
76+
}

tests/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ sources = files(
2323
'sequenced.cpp',
2424
'post-ack.cpp',
2525
'with_cancel_cb.cpp',
26+
'generator.cpp',
2627
)
2728

2829
exe = executable('gtests',

0 commit comments

Comments
 (0)