| 887 | }; |
| 888 | |
| 889 | TEST_F(SeqMergedGeneratorTestFixture, Basic) { |
| 890 | ASSERT_OK_AND_ASSIGN( |
| 891 | AsyncGenerator<TestInt> gen, |
| 892 | MakeSequencedMergedGenerator( |
| 893 | static_cast<AsyncGenerator<AsyncGenerator<TestInt>>>(tracked_source_), 4)); |
| 894 | // Should not initially ask for anything |
| 895 | ASSERT_EQ(0, NumSubsAskedFor()); |
| 896 | BeginCaptureOutput(gen); |
| 897 | // Should not read ahead async-reentrantly from source |
| 898 | ASSERT_EQ(1, NumSubsAskedFor()); |
| 899 | EmitSub(); |
| 900 | ASSERT_EQ(2, NumSubsAskedFor()); |
| 901 | // Should immediately start polling |
| 902 | ASSERT_EQ(1, NumItemsAskedFor(0)); |
| 903 | EmitSub(); |
| 904 | EmitSub(); |
| 905 | EmitSub(); |
| 906 | EmitSub(); |
| 907 | // Should limit how many subs it reads ahead |
| 908 | ASSERT_EQ(4, NumSubsAskedFor()); |
| 909 | // Should immediately start polling subs even if they aren't yet active |
| 910 | ASSERT_EQ(1, NumItemsAskedFor(1)); |
| 911 | ASSERT_EQ(1, NumItemsAskedFor(2)); |
| 912 | ASSERT_EQ(1, NumItemsAskedFor(3)); |
| 913 | // Items emitted on non-active subs should not be delivered and should not trigger |
| 914 | // further polling on the inactive sub |
| 915 | EmitItem(1, 0); |
| 916 | ASSERT_EQ(1, NumItemsAskedFor(1)); |
| 917 | AssertRead({}); |
| 918 | EmitItem(0, 1); |
| 919 | AssertRead({1}); |
| 920 | ASSERT_EQ(2, NumItemsAskedFor(0)); |
| 921 | EmitItem(0, 2); |
| 922 | AssertRead({1, 2}); |
| 923 | ASSERT_EQ(3, NumItemsAskedFor(0)); |
| 924 | // On finish it should move to the next sub and pull 1 item |
| 925 | FinishSub(0); |
| 926 | ASSERT_EQ(5, NumSubsAskedFor()); |
| 927 | ASSERT_EQ(2, NumItemsAskedFor(1)); |
| 928 | AssertRead({1, 2, 0}); |
| 929 | // Now finish all the subs and make sure an empty sub is ok |
| 930 | FinishSub(1); |
| 931 | FinishSub(2); |
| 932 | FinishSub(3); |
| 933 | FinishSub(4); |
| 934 | ASSERT_EQ(6, NumSubsAskedFor()); |
| 935 | FinishSubs(); |
| 936 | AssertFinishedOk(); |
| 937 | } |
| 938 | |
| 939 | TEST_F(SeqMergedGeneratorTestFixture, ErrorItem) { |
| 940 | ASSERT_OK_AND_ASSIGN( |
nothing calls this directly
no test coverage detected