Home | History | Annotate | Download | only in doxygen
      1 #include "rxcpp/rx.hpp"
      2 
      3 #include "rxcpp/rx-test.hpp"
      4 #include "catch.hpp"
      5 
      6 SCENARIO("reduce sample"){
      7     printf("//! [reduce sample]\n");
      8     auto values = rxcpp::observable<>::range(1, 7).
      9         reduce(
     10             std::make_pair(0, 1.0),
     11             [](std::pair<int, double> seed, int v){
     12                 seed.first += 1;
     13                 seed.second *= v;
     14                 return seed;
     15             },
     16             [](std::pair<int, double> res){
     17                 return std::pow(res.second, 1.0 / res.first);
     18             });
     19     values.
     20         subscribe(
     21             [](double v){printf("OnNext: %lf\n", v);},
     22             [](){printf("OnCompleted\n");});
     23     printf("//! [reduce sample]\n");
     24 }
     25 
     26 SCENARIO("reduce empty sample"){
     27     printf("//! [reduce empty sample]\n");
     28     auto values = rxcpp::observable<>::empty<int>().
     29         reduce(
     30             1,
     31             [](int,int){return 0;},
     32             [](int res){return res;});
     33     values.
     34         subscribe(
     35             [](int v){printf("OnNext: %d\n", v);},
     36             [](){printf("OnCompleted\n");});
     37     printf("//! [reduce empty sample]\n");
     38 }
     39 
     40 SCENARIO("reduce exception from accumulator sample"){
     41     printf("//! [reduce exception from accumulator sample]\n");
     42     auto values = rxcpp::observable<>::range(1, 3).
     43         reduce(
     44             0,
     45             [](int seed, int v){
     46                 if (v == 2)
     47                     throw std::runtime_error("Exception from accumulator");
     48                 return seed;
     49             },
     50             [](int res){return res;});
     51     values.
     52         subscribe(
     53             [](int v){printf("OnNext: %d\n", v);},
     54             [](std::exception_ptr ep){
     55                 try {std::rethrow_exception(ep);}
     56                 catch (const std::exception& ex) {
     57                     printf("OnError: %s\n", ex.what());
     58                 }
     59             },
     60             [](){printf("OnCompleted\n");});
     61     printf("//! [reduce exception from accumulator sample]\n");
     62 }
     63 
     64 SCENARIO("reduce exception from result selector sample"){
     65     printf("//! [reduce exception from result selector sample]\n");
     66     auto values = rxcpp::observable<>::range(1, 3).
     67         reduce(
     68             0,
     69             [](int seed, int v){return seed + v;},
     70             [](int res){
     71                 throw std::runtime_error("Exception from result selector");
     72                 return res;
     73             });
     74     values.
     75         subscribe(
     76             [](int v){printf("OnNext: %d\n", v);},
     77             [](std::exception_ptr ep){
     78                 try {std::rethrow_exception(ep);}
     79                 catch (const std::exception& ex) {
     80                     printf("OnError: %s\n", ex.what());
     81                 }
     82             },
     83             [](){printf("OnCompleted\n");});
     84     printf("//! [reduce exception from result selector sample]\n");
     85 }
     86