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 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(); } }
void subscribeImpl(uint iters, int N, bool countUnsubscribe) { 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()); } bs.dismiss(); for (int i = 0; i < N; i++) { subscriptions.push_back(subject.subscribe(std::move(observers[i]))); } if (countUnsubscribe) { subscriptions.clear(); } bs.rehire(); } }
void subscribe(Observer* view_object) { subject_->subscribe(view_object); }