Skip to content

Commit

Permalink
Expose observable strategy_type (#567)
Browse files Browse the repository at this point in the history
* Expose observable strategy_type

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Aleksey Loginov <[email protected]>
  • Loading branch information
3 people authored Apr 30, 2024
1 parent 47701fd commit abc99a8
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/rpp/rpp/observables.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@
#include <rpp/observables/blocking_observable.hpp>
#include <rpp/observables/connectable_observable.hpp>
#include <rpp/observables/dynamic_observable.hpp>
#include <rpp/observables/grouped_observable.hpp>
#include <rpp/observables/observable.hpp>
3 changes: 2 additions & 1 deletion src/rpp/rpp/observables/observable.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ namespace rpp
class observable
{
public:
using value_type = Type;
using value_type = Type;
using strategy_type = Strategy;

using expected_disposable_strategy = rpp::details::observables::deduce_disposable_strategy_t<Strategy>;

Expand Down
21 changes: 21 additions & 0 deletions src/tests/rpp/test_observables.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include <rpp/sources/empty.hpp>
#include <rpp/sources/error.hpp>
#include <rpp/sources/never.hpp>
#include <rpp/subjects/replay_subject.hpp>

#include "rpp/disposables/fwd.hpp"
#include "rpp/operators/fwd.hpp"
Expand Down Expand Up @@ -241,3 +242,23 @@ TEST_CASE("create observable works properly as observable")
CHECK(pipe_operator_observer.get_on_completed_count() == pipe_function_observer.get_on_completed_count());
}
}

TEMPLATE_TEST_CASE(
"observable has type traits defined",
"",
rpp::empty_observable<int>,
rpp::dynamic_observable<int>,
rpp::blocking_observable<int, rpp::details::empty_strategy<int>>,
rpp::connectable_observable<rpp::empty_observable<int>, rpp::subjects::replay_subject<int>>,
rpp::grouped_observable<int, int, rpp::details::empty_strategy<int>>)
{
SECTION("value_type defined")
{
CONSTEVAL_CHECK(requires { typename TestType::value_type; });
CONSTEVAL_CHECK(std::is_same_v<typename TestType::value_type, int>);
}
SECTION("strategy_type defined")
{
CONSTEVAL_CHECK(requires { typename TestType::strategy_type; });
}
}

1 comment on commit abc99a8

@github-actions
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

BENCHMARK RESULTS (AUTOGENERATED)

ci-ubuntu-gcc

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 308.92 ns 2.19 ns 2.20 ns 0.99
Subscribe empty callbacks to empty observable via pipe operator 353.03 ns 2.16 ns 2.16 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 706.35 ns 0.32 ns 0.31 ns 1.03
from array of 1 - create + subscribe + current_thread 1043.35 ns 3.42 ns 3.42 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 2232.65 ns 135.73 ns 115.85 ns 1.17
defer from array of 1 - defer + create + subscribe + immediate 721.47 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 2157.03 ns 59.23 ns 59.19 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3058.95 ns 32.42 ns 32.45 ns 1.00
from array of 1 - create + as_blocking + subscribe + new_thread 28657.44 ns 27580.12 ns 28082.11 ns 0.98
from array of 1000 - create + as_blocking + subscribe + new_thread 38564.81 ns 51183.30 ns 52442.36 ns 0.98

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1103.47 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 871.59 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 1003.22 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 861.84 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1232.42 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 931.30 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 1111.09 ns 17.29 ns 17.29 ns 1.00

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 282.62 ns 2.16 ns 2.17 ns 1.00
current_thread scheduler create worker + schedule 374.92 ns 5.87 ns 5.86 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 828.42 ns 55.79 ns 55.85 ns 1.00

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 832.65 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 907.99 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 2360.17 ns 179.51 ns 171.47 ns 1.05
immediate_just+buffer(2)+subscribe 1597.72 ns 13.59 ns 13.58 ns 1.00
immediate_just+window(2)+subscribe + subscsribe inner 2392.96 ns 1051.15 ns 1096.13 ns 0.96

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 820.73 ns - - 0.00
immediate_just+take_while(true)+subscribe 838.82 ns 0.31 ns 0.31 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 1980.68 ns 0.31 ns 0.31 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3446.97 ns 197.07 ns 185.39 ns 1.06
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3693.73 ns 184.60 ns 185.85 ns 0.99
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 145.54 ns 132.85 ns 1.10
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3516.11 ns 1145.18 ns 987.81 ns 1.16
immediate_just(1) + zip(immediate_just(2)) + subscribe 2104.23 ns 206.09 ns 206.01 ns 1.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 34.54 ns 16.86 ns 16.87 ns 1.00

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1369.33 ns 13.90 ns 13.89 ns 1.00
basic sample with immediate scheduler 1382.32 ns 5.55 ns 5.55 ns 1.00

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 913.79 ns 0.31 ns 0.31 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 1078.76 ns 129.96 ns 130.64 ns 0.99

ci-macos

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 1088.86 ns 5.40 ns 5.55 ns 0.97
Subscribe empty callbacks to empty observable via pipe operator 1080.53 ns 5.39 ns 5.50 ns 0.98

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 2437.32 ns 0.43 ns 0.44 ns 0.98
from array of 1 - create + subscribe + current_thread 4422.36 ns 10.85 ns 10.93 ns 0.99
concat_as_source of just(1 immediate) create + subscribe 7069.92 ns 412.20 ns 418.27 ns 0.99
defer from array of 1 - defer + create + subscribe + immediate 2504.02 ns 0.28 ns 0.29 ns 0.95
interval - interval + take(3) + subscribe + immediate 6592.02 ns 92.66 ns 94.01 ns 0.99
interval - interval + take(3) + subscribe + current_thread 7735.93 ns 62.80 ns 59.62 ns 1.05
from array of 1 - create + as_blocking + subscribe + new_thread 70529.13 ns 63115.64 ns 54175.95 ns 1.17
from array of 1000 - create + as_blocking + subscribe + new_thread 83640.73 ns 74572.64 ns 64937.44 ns 1.15

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 3698.12 ns 0.28 ns 0.28 ns 0.99
immediate_just+filter(true)+subscribe 2503.96 ns 0.29 ns 0.29 ns 1.02
immediate_just(1,2)+skip(1)+subscribe 3291.99 ns 0.28 ns 0.28 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 2556.77 ns 0.56 ns 0.56 ns 0.99
immediate_just(1,2)+first()+subscribe 3869.52 ns 0.28 ns 0.29 ns 0.97
immediate_just(1,2)+last()+subscribe 2936.95 ns 0.28 ns 0.28 ns 0.99
immediate_just+take_last(1)+subscribe 3645.49 ns 77.95 ns 72.76 ns 1.07

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 1024.71 ns 5.96 ns 5.77 ns 1.03
current_thread scheduler create worker + schedule 1322.40 ns 15.90 ns 15.93 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 2338.87 ns 175.25 ns 156.71 ns 1.12

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 2475.07 ns 0.28 ns 0.28 ns 0.99
immediate_just+scan(10, std::plus)+subscribe 2962.48 ns 0.56 ns 0.57 ns 0.98
immediate_just+flat_map(immediate_just(v*2))+subscribe 6802.83 ns 467.89 ns 467.64 ns 1.00
immediate_just+buffer(2)+subscribe 3252.00 ns 74.10 ns 73.95 ns 1.00
immediate_just+window(2)+subscribe + subscsribe inner 6693.55 ns 2761.99 ns 2763.58 ns 1.00

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 2489.14 ns - - 0.00
immediate_just+take_while(true)+subscribe 2482.03 ns 0.28 ns 0.29 ns 0.97

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 6320.25 ns 0.28 ns 0.28 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 10617.38 ns 545.53 ns 511.71 ns 1.07
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 10427.71 ns 534.23 ns 526.07 ns 1.02
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 511.13 ns 525.72 ns 0.97
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 10720.25 ns 2337.98 ns 2421.80 ns 0.97
immediate_just(1) + zip(immediate_just(2)) + subscribe 6407.47 ns 937.27 ns 928.89 ns 1.01

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 98.69 ns 61.99 ns 62.31 ns 0.99

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 3422.99 ns 52.96 ns 40.25 ns 1.32
basic sample with immediate scheduler 3530.19 ns 7.04 ns 7.15 ns 0.98

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 2849.51 ns 0.28 ns 0.28 ns 0.99

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 8251.14 ns 4890.28 ns 5040.16 ns 0.97

ci-ubuntu-clang

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 271.63 ns 0.90 ns 1.54 ns 0.58
Subscribe empty callbacks to empty observable via pipe operator 271.62 ns 0.88 ns 1.54 ns 0.57

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 574.29 ns 0.31 ns 0.31 ns 1.00
from array of 1 - create + subscribe + current_thread 791.66 ns 4.01 ns 4.01 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 2381.25 ns 136.68 ns 135.20 ns 1.01
defer from array of 1 - defer + create + subscribe + immediate 780.90 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 2194.88 ns 58.30 ns 58.26 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3133.75 ns 31.17 ns 31.19 ns 1.00
from array of 1 - create + as_blocking + subscribe + new_thread 28103.03 ns 27483.16 ns 27608.56 ns 1.00
from array of 1000 - create + as_blocking + subscribe + new_thread 39853.68 ns 36651.55 ns 33669.24 ns 1.09

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1170.62 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 843.55 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 1100.77 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 868.02 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1381.30 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 999.61 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 1192.32 ns 0.31 ns 0.31 ns 1.00

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 276.62 ns 0.88 ns 1.54 ns 0.57
current_thread scheduler create worker + schedule 399.83 ns 4.02 ns 4.01 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 862.44 ns 56.44 ns 56.13 ns 1.01

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 841.49 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 969.95 ns 0.62 ns 0.62 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 2257.15 ns 137.85 ns 138.74 ns 0.99
immediate_just+buffer(2)+subscribe 1527.77 ns 13.89 ns 14.20 ns 0.98
immediate_just+window(2)+subscribe + subscsribe inner 2434.83 ns 869.93 ns 881.33 ns 0.99

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 833.48 ns - - 0.00
immediate_just+take_while(true)+subscribe 857.09 ns 0.31 ns 0.31 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 1990.07 ns 0.31 ns 0.31 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3275.52 ns 161.11 ns 160.33 ns 1.00
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3775.15 ns 149.05 ns 149.26 ns 1.00
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 142.20 ns 142.09 ns 1.00
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3403.90 ns 839.43 ns 841.63 ns 1.00
immediate_just(1) + zip(immediate_just(2)) + subscribe 2242.05 ns 204.82 ns 205.37 ns 1.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 53.90 ns 19.10 ns 18.98 ns 1.01

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1290.40 ns 11.12 ns 11.12 ns 1.00
basic sample with immediate scheduler 1300.08 ns 6.17 ns 6.17 ns 1.00

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 1023.13 ns 0.31 ns 0.31 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 1051.91 ns 139.50 ns 134.65 ns 1.04

ci-windows

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 578.91 ns 4.01 ns 4.01 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 587.41 ns 4.02 ns 4.01 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1167.21 ns 5.55 ns 5.55 ns 1.00
from array of 1 - create + subscribe + current_thread 1435.32 ns 15.43 ns 15.45 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 3801.67 ns 187.62 ns 187.21 ns 1.00
defer from array of 1 - defer + create + subscribe + immediate 1215.00 ns 5.24 ns 5.24 ns 1.00
interval - interval + take(3) + subscribe + immediate 2996.34 ns 134.30 ns 134.27 ns 1.00
interval - interval + take(3) + subscribe + current_thread 4094.94 ns 53.26 ns 52.96 ns 1.01
from array of 1 - create + as_blocking + subscribe + new_thread 120044.44 ns 112570.00 ns 112100.00 ns 1.00
from array of 1000 - create + as_blocking + subscribe + new_thread 130750.00 ns 129055.56 ns 133937.50 ns 0.96

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1876.05 ns 12.87 ns 12.87 ns 1.00
immediate_just+filter(true)+subscribe 1348.24 ns 12.40 ns 12.39 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 2303.82 ns 13.05 ns 13.00 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 1377.50 ns 15.95 ns 15.95 ns 1.00
immediate_just(1,2)+first()+subscribe 2098.15 ns 12.62 ns 12.64 ns 1.00
immediate_just(1,2)+last()+subscribe 1812.54 ns 14.12 ns 14.11 ns 1.00
immediate_just+take_last(1)+subscribe 2069.15 ns 59.13 ns 61.27 ns 0.97

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 488.80 ns 6.18 ns 6.17 ns 1.00
current_thread scheduler create worker + schedule 667.17 ns 13.37 ns 13.37 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 1107.31 ns 104.79 ns 104.71 ns 1.00

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 1339.81 ns 12.33 ns 12.41 ns 0.99
immediate_just+scan(10, std::plus)+subscribe 1467.59 ns 21.29 ns 21.29 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 3592.98 ns 224.53 ns 241.25 ns 0.93
immediate_just+buffer(2)+subscribe 2371.69 ns 58.36 ns 60.89 ns 0.96
immediate_just+window(2)+subscribe + subscsribe inner 4416.05 ns 1237.02 ns 1215.47 ns 1.02

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 1326.81 ns 11.47 ns 11.47 ns 1.00
immediate_just+take_while(true)+subscribe 1630.05 ns 12.40 ns 12.39 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 3231.53 ns 7.71 ns 7.71 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 5709.64 ns 238.49 ns 234.36 ns 1.02
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 5680.65 ns 232.66 ns 230.87 ns 1.01
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 216.67 ns 218.59 ns 0.99
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 5601.47 ns 929.89 ns 972.46 ns 0.96
immediate_just(1) + zip(immediate_just(2)) + subscribe 3640.97 ns 529.11 ns 528.98 ns 1.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 36.35 ns 25.59 ns 25.59 ns 1.00

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1909.09 ns 56.70 ns 57.30 ns 0.99
basic sample with immediate scheduler 2181.43 ns 35.79 ns 37.06 ns 0.97

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 1475.10 ns 17.82 ns 17.81 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 1951.91 ns 344.06 ns 334.20 ns 1.03

Please sign in to comment.