1 #include "rxcpp/rx.hpp" 2 3 #include "rxcpp/rx-test.hpp" 4 #include "catch.hpp" 5 6 SCENARIO("Create sample"){ 7 printf("//! [Create sample]\n"); 8 auto ints = rxcpp::observable<>::create<int>( 9 [](rxcpp::subscriber<int> s){ 10 s.on_next(1); 11 s.on_next(2); 12 s.on_completed(); 13 }); 14 15 ints. 16 subscribe( 17 [](int v){printf("OnNext: %d\n", v);}, 18 [](){printf("OnCompleted\n");}); 19 printf("//! [Create sample]\n"); 20 } 21 22 SCENARIO("Create bad code"){ 23 printf("//! [Create bad code]\n"); 24 auto subscription = rxcpp::composite_subscription(); 25 auto subscriber = rxcpp::make_subscriber<int>( 26 subscription, 27 [&](int v){ 28 printf("OnNext: %d\n", v); 29 if (v == 2) 30 subscription.unsubscribe(); 31 }, 32 [](){ 33 printf("OnCompleted\n"); 34 }); 35 rxcpp::observable<>::create<int>( 36 [](rxcpp::subscriber<int> s){ 37 for (int i = 0; i < 5; ++i) { 38 s.on_next(i); 39 printf("Just sent: OnNext(%d)\n", i); 40 } 41 s.on_completed(); 42 printf("Just sent: OnCompleted()\n"); 43 }).subscribe(subscriber); 44 printf("//! [Create bad code]\n"); 45 } 46 47 SCENARIO("Create good code"){ 48 printf("//! [Create good code]\n"); 49 auto subscription = rxcpp::composite_subscription(); 50 auto subscriber = rxcpp::make_subscriber<int>( 51 subscription, 52 [&](int v){ 53 printf("OnNext: %d\n", v); 54 if (v == 2) 55 subscription.unsubscribe(); 56 }, 57 [](){ 58 printf("OnCompleted\n"); 59 }); 60 rxcpp::observable<>::create<int>( 61 [](rxcpp::subscriber<int> s){ 62 for (int i = 0; i < 5; ++i) { 63 if (!s.is_subscribed()) // Stop emitting if nobody is listening 64 break; 65 s.on_next(i); 66 printf("Just sent: OnNext(%d)\n", i); 67 } 68 s.on_completed(); 69 printf("Just sent: OnCompleted()\n"); 70 }).subscribe(subscriber); 71 printf("//! [Create good code]\n"); 72 } 73 74 SCENARIO("Create great code"){ 75 printf("//! [Create great code]\n"); 76 auto ints = rxcpp::observable<>::create<int>( 77 [](rxcpp::subscriber<int> s){ 78 for (int i = 0; i < 5; ++i) { 79 if (!s.is_subscribed()) // Stop emitting if nobody is listening 80 break; 81 s.on_next(i); 82 printf("Just sent: OnNext(%d)\n", i); 83 } 84 s.on_completed(); 85 printf("Just sent: OnCompleted()\n"); 86 }); 87 ints. 88 take(2). 89 subscribe( 90 [](int v){ 91 printf("OnNext: %d\n", v); 92 }, 93 [](rxcpp::util::error_ptr ep){ 94 printf("OnError: %s\n", rxcpp::util::what(ep).c_str()); 95 }, 96 [](){ 97 printf("OnCompleted\n"); 98 }); 99 printf("//! [Create great code]\n"); 100 } 101