19
19
#include < set>
20
20
#include < optional>
21
21
#include < chrono>
22
+ #include < ranges> // std::views::iota
22
23
#include < type_traits> // std::is_arithmetic
23
24
24
25
#include < thread>
@@ -45,12 +46,12 @@ void non_threaded_push_test(Q& wq, const typename Q::value_type& val, int count)
45
46
REQUIRE (wq.empty ());
46
47
REQUIRE (wq.size () == 0 );
47
48
48
- for (int i { 0 }; i < count; ++i ) {
49
+ for (int i : std::ranges::iota_view{ 0 , count} ) {
49
50
REQUIRE (wq.push (val));
50
51
}
51
52
REQUIRE_FALSE (wq.empty ());
52
53
REQUIRE (wq.size () == count);
53
- for (int i { 0 }; i < count; ++i ) {
54
+ for (int i : std::ranges::iota_view{ 0 , count} ) {
54
55
auto ret = wq.try_pop ();
55
56
REQUIRE (*ret == val);
56
57
}
@@ -69,22 +70,22 @@ void non_threaded_arithmetic_test(Q& wq, int count) {
69
70
70
71
REQUIRE (wq.empty ());
71
72
72
- for (int i { 0 }; i < count; ++i ) {
73
+ for (int i : std::ranges::iota_view{ 0 , count} ) {
73
74
REQUIRE (wq.push (base_val));
74
75
}
75
76
val_type sum { 0 };
76
77
wq.apply ( [&sum] (const val_type& x) { sum += x; } );
77
78
REQUIRE (sum == expected_sum);
78
79
79
- for (int i { 0 }; i < count; ++i ) {
80
+ for (int i : std::ranges::iota_view{ 0 , count} ) {
80
81
REQUIRE (*(wq.try_pop ()) == base_val);
81
82
}
82
83
REQUIRE (wq.empty ());
83
84
84
- for (int i { 0 }; i < count; ++i ) {
85
+ for (int i : std::ranges::iota_view{ 0 , count} ) {
85
86
wq.push (base_val+i);
86
87
}
87
- for (int i { 0 }; i < count; ++i ) {
88
+ for (int i : std::ranges::iota_view{ 0 , count} ) {
88
89
REQUIRE (*(wq.try_pop ()) == (base_val+i));
89
90
}
90
91
REQUIRE (wq.size () == 0 );
@@ -389,25 +390,25 @@ TEST_CASE ( "Fixed size ring_span, testing wrap around with int type",
389
390
constexpr int Answer = 42 ;
390
391
constexpr int AnswerPlus = 42 +5 ;
391
392
392
- for (int i { 0 }; i < N; ++i ) {
393
+ for (int i : std::ranges::iota_view{ 0 , N} ) {
393
394
wq.push (Answer);
394
395
}
395
396
REQUIRE (wq.size () == N);
396
397
wq.apply ([Answer] (const int & i) { REQUIRE (i == Answer); } );
397
398
398
- for (int i { 0 }; i < N; ++i ) {
399
+ for (int i : std::ranges::iota_view{ 0 , N} ) {
399
400
wq.push (Answer);
400
401
}
401
- for (int i { 0 }; i < ( N/2 ); ++i ) {
402
+ for (int i : std::ranges::iota_view{ 0 , N/2 } ) {
402
403
wq.push (AnswerPlus);
403
404
}
404
405
// the size is full but half match answer and half answer plus, since there's been wrap
405
406
REQUIRE (wq.size () == N);
406
407
// wait_pop should immediately return if the queue is non empty
407
- for (int i { 0 }; i < ( N/2 ); ++i ) {
408
+ for (int i : std::ranges::iota_view{ 0 , N/2 } ) {
408
409
REQUIRE (wq.wait_and_pop () == Answer);
409
410
}
410
- for (int i { 0 }; i < ( N/2 ); ++i ) {
411
+ for (int i : std::ranges::iota_view{ 0 , N/2 } ) {
411
412
REQUIRE (wq.wait_and_pop () == AnswerPlus);
412
413
}
413
414
REQUIRE (wq.empty ());
0 commit comments