TEST(RxTest, SubscribeDuringCallback) { // A subscriber who was subscribed in the course of a callback should get // subsequent updates but not the current update. Subject<int> subject; int outerCount = 0; int innerCount = 0; subject.subscribe(Observer<int>::create([&] (int x) { outerCount++; subject.subscribe(Observer<int>::create([&] (int y) { innerCount++; })); })); subject.onNext(42); subject.onNext(0xDEADBEEF); EXPECT_EQ(2, outerCount); EXPECT_EQ(1, innerCount); }
void notifyInlineObservers(uint iters, int N) { for (uint iter = 0; iter < iters; iter++) { BenchmarkSuspender bs; Subject<int> subject; std::vector<Observer<int>*> observers; for (int i = 0; i < N; i++) { observers.push_back(makeObserver().release()); } for (int i = 0; i < N; i++) { subject.observe(observers[i]); } bs.dismiss(); subject.onNext(42); bs.rehire(); } }
void notifySubscribers(uint iters, int N) { for (uint iter = 0; iter < iters; iter++) { BenchmarkSuspender bs; Subject<int> subject; std::vector<std::unique_ptr<Observer<int>>> observers; std::vector<Subscription<int>> subscriptions; subscriptions.reserve(N); for (int i = 0; i < N; i++) { observers.push_back(makeObserver()); } for (int i = 0; i < N; i++) { subscriptions.push_back(subject.subscribe(std::move(observers[i]))); } bs.dismiss(); subject.onNext(42); bs.rehire(); } }