ulib/3party/rxcpp/Rx/v2/examples/doxygen/blocking_observable.cpp
2024-01-10 09:33:36 +08:00

230 lines
7.4 KiB
C++

#include "rxcpp/rx.hpp"
#include "rxcpp/rx-test.hpp"
#include "catch.hpp"
SCENARIO("blocking first sample"){
printf("//! [blocking first sample]\n");
auto values = rxcpp::observable<>::range(1, 3).as_blocking();
auto first = values.first();
printf("first = %d\n", first);
printf("//! [blocking first sample]\n");
}
SCENARIO("blocking first empty sample"){
printf("//! [blocking first empty sample]\n");
auto values = rxcpp::observable<>::empty<int>().as_blocking();
try {
auto first = values.first();
printf("first = %d\n", first);
} catch (const rxcpp::empty_error& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking first empty sample]\n");
}
SCENARIO("blocking first error sample"){
printf("//! [blocking first error sample]\n");
auto values = rxcpp::observable<>::error<int>(std::runtime_error("Error from source")).
as_blocking();
try {
auto first = values.first();
printf("first = %d\n", first);
} catch (const std::exception& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking first error sample]\n");
}
SCENARIO("blocking last sample"){
printf("//! [blocking last sample]\n");
auto values = rxcpp::observable<>::range(1, 3).as_blocking();
auto last = values.last();
printf("last = %d\n", last);
printf("//! [blocking last sample]\n");
}
SCENARIO("blocking last empty sample"){
printf("//! [blocking last empty sample]\n");
auto values = rxcpp::observable<>::empty<int>().as_blocking();
try {
auto last = values.last();
printf("last = %d\n", last);
} catch (const rxcpp::empty_error& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking last empty sample]\n");
}
SCENARIO("blocking last error sample"){
printf("//! [blocking last error sample]\n");
auto values = rxcpp::observable<>::range(1, 3).
concat(rxcpp::observable<>::error<int>(std::runtime_error("Error from source"))).
as_blocking();
try {
auto last = values.last();
printf("last = %d\n", last);
} catch (const std::exception& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking last error sample]\n");
}
SCENARIO("blocking count sample"){
printf("//! [blocking count sample]\n");
auto values = rxcpp::observable<>::range(1, 3).as_blocking();
auto count = values.count();
printf("count = %d\n", count);
printf("//! [blocking count sample]\n");
}
SCENARIO("blocking count error sample"){
printf("//! [blocking count error sample]\n");
auto values = rxcpp::observable<>::range(1, 3).
concat(rxcpp::observable<>::error<int>(std::runtime_error("Error from source"))).
as_blocking();
try {
auto count = values.count();
printf("count = %d\n", count);
} catch (const std::exception& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking count error sample]\n");
}
SCENARIO("blocking sum sample"){
printf("//! [blocking sum sample]\n");
auto values = rxcpp::observable<>::range(1, 3).as_blocking();
auto sum = values.sum();
printf("sum = %d\n", sum);
printf("//! [blocking sum sample]\n");
}
SCENARIO("blocking sum empty sample"){
printf("//! [blocking sum empty sample]\n");
auto values = rxcpp::observable<>::empty<int>().as_blocking();
try {
auto sum = values.sum();
printf("sum = %d\n", sum);
} catch (const rxcpp::empty_error& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking sum empty sample]\n");
}
SCENARIO("blocking sum error sample"){
printf("//! [blocking sum error sample]\n");
auto values = rxcpp::observable<>::range(1, 3).
concat(rxcpp::observable<>::error<int>(std::runtime_error("Error from source"))).
as_blocking();
try {
auto sum = values.sum();
printf("sum = %d\n", sum);
} catch (const std::exception& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking sum error sample]\n");
}
SCENARIO("blocking average sample"){
printf("//! [blocking average sample]\n");
auto values = rxcpp::observable<>::range(1, 4).as_blocking();
auto average = values.average();
printf("average = %lf\n", average);
printf("//! [blocking average sample]\n");
}
SCENARIO("blocking average empty sample"){
printf("//! [blocking average empty sample]\n");
auto values = rxcpp::observable<>::empty<int>().as_blocking();
try {
auto average = values.average();
printf("average = %lf\n", average);
} catch (const rxcpp::empty_error& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking average empty sample]\n");
}
SCENARIO("blocking average error sample"){
printf("//! [blocking average error sample]\n");
auto values = rxcpp::observable<>::range(1, 4).
concat(rxcpp::observable<>::error<int>(std::runtime_error("Error from source"))).
as_blocking();
try {
auto average = values.average();
printf("average = %lf\n", average);
} catch (const std::exception& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking average error sample]\n");
}
SCENARIO("blocking max sample"){
printf("//! [blocking max sample]\n");
auto values = rxcpp::observable<>::range(1, 4).as_blocking();
auto max = values.max();
printf("max = %d\n", max);
printf("//! [blocking max sample]\n");
}
SCENARIO("blocking max empty sample"){
printf("//! [blocking max empty sample]\n");
auto values = rxcpp::observable<>::empty<int>().as_blocking();
try {
auto max = values.max();
printf("max = %d\n", max);
} catch (const rxcpp::empty_error& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking max empty sample]\n");
}
SCENARIO("blocking max error sample"){
printf("//! [blocking max error sample]\n");
auto values = rxcpp::observable<>::range(1, 4).
concat(rxcpp::observable<>::error<int>(std::runtime_error("Error from source"))).
as_blocking();
try {
auto max = values.max();
printf("max = %d\n", max);
} catch (const std::exception& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking max error sample]\n");
}
SCENARIO("blocking min sample"){
printf("//! [blocking min sample]\n");
auto values = rxcpp::observable<>::range(1, 4).as_blocking();
auto min = values.min();
printf("min = %d\n", min);
printf("//! [blocking min sample]\n");
}
SCENARIO("blocking min empty sample"){
printf("//! [blocking min empty sample]\n");
auto values = rxcpp::observable<>::empty<int>().as_blocking();
try {
auto min = values.min();
printf("min = %d\n", min);
} catch (const rxcpp::empty_error& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking min empty sample]\n");
}
SCENARIO("blocking min error sample"){
printf("//! [blocking min error sample]\n");
auto values = rxcpp::observable<>::range(1, 4).
concat(rxcpp::observable<>::error<int>(std::runtime_error("Error from source"))).
as_blocking();
try {
auto min = values.min();
printf("min = %d\n", min);
} catch (const std::exception& ex) {
printf("Exception: %s\n", ex.what());
}
printf("//! [blocking min error sample]\n");
}