Skip to content

Add "switch_map" operator - #175

Merged
AlexInLog merged 3 commits into
AlexInLog:mainfrom
tcw165:op/switch_map
Jul 16, 2022
Merged

Add "switch_map" operator#175
AlexInLog merged 3 commits into
AlexInLog:mainfrom
tcw165:op/switch_map

Conversation

@tcw165

@tcw165 tcw165 commented Jul 15, 2022

Copy link
Copy Markdown
Contributor

No description provided.

@codecov

codecov Bot commented Jul 15, 2022

Copy link
Copy Markdown

Codecov Report

Merging #175 (8e0ec1e) into main (90921f3) will increase coverage by 0.00%.
The diff coverage is 100.00%.

@@           Coverage Diff           @@
##             main     #175   +/-   ##
=======================================
  Coverage   99.67%   99.67%           
=======================================
  Files          68       70    +2     
  Lines         926      932    +6     
=======================================
+ Hits          923      929    +6     
  Misses          3        3           
Impacted Files Coverage Δ
src/rpp/rpp/observables/interface_observable.hpp 100.00% <ø> (ø)
src/rpp/rpp/operators/fwd/switch_map.hpp 100.00% <100.00%> (ø)
src/rpp/rpp/operators/switch_map.hpp 100.00% <100.00%> (ø)

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 90921f3...8e0ec1e. Read the comment docs.

@github-actions

github-actions Bot commented Jul 15, 2022

Copy link
Copy Markdown
Contributor

Linux CLANG

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 0.33ns 0.360492 0.92 0.38ns
Dynamic observable construction 28.76ns 26.2351 1.10 21.06ns
Specific observable construction + as_dynamic 28.05ns 27.7527 1.01 22.23ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 72.36ns 63.3023 1.14 317.47ns
Specific observable lift dynamic observer 121.31ns 86.9631 1.39 384.05ns
Dynamic observable lift specific observer 172.81ns 149.59 1.16 355.42ns
Dynamic observable lift dynamic observer 204.31ns 150.221 1.36 332.54ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 55.52ns 40.489 1.37 284.18ns
Specific observable subscribe dynamic observer 74.29ns 67.5455 1.10 342.94ns
Dynamic observable subscribe specific observer 109.23ns 113.809 0.96 406.30ns
Dynamic observable subscribe dynamic observer 181.39ns 94.984 1.91 324.74ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 46.08ns 38.1755 1.21 315.85ns
Dynamic observable subscribe lambda 104.08ns 104.045 1.00 280.67ns
Specific observable subscribe lambda without subscription 46.77ns 38.2032 1.22 359.36ns
Dynamic observable subscribe lambda without subscription 111.28ns 102.519 1.09 413.20ns
Specific observable subscribe specific subscriber 16.99ns 23.0398 0.74 277.25ns
Dynamic observable subscribe specific subscriber 71.13ns 118.093 0.60 283.98ns
Specific observable subscribe dynamic observer 18.61ns 15.2502 1.22 260.35ns
Dynamic observable subscribe dynamic observer 71.09ns 82.3999 0.86 341.51ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 0.82ns 0.611739 1.34 0.37ns
Dynamic observer construction 31.56ns 33.6574 0.94 19.89ns
Specific observer construction + as_dynamic 31.83ns 33.3386 0.95 23.38ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.73ns 0.632146 1.16 0.73ns
Dynamic observer OnNext 2.03ns 1.67467 1.21 2.35ns

Operators

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 91.73ns 67.1143 1.37 259.03ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 33.89ns 27.6446 1.23 66.35ns
Make copy of subscriber 18.76ns 14.5044 1.29 5.01ns
Transform subsriber to dynamic 45.17ns 40.4972 1.12 31.02ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 38.28ns 29.9484 1.28 47.50ns
composite_subscription add 43.37ns 43.1771 1.00 26.13ns
composite_subscription unsubscribe 6.42ns 5.29704 1.21 13.31ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 16.75ns 14.52 1.15 34.88ns
error 47.51ns 43.87 1.08 84.81ns
never 21.00ns 15.6323 1.34 233.87ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 31.57ns 37.0482 0.85 62.30ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 20.31ns 19.7055 1.03 31.43ns
just send variadic 16.07ns 17.1101 0.94 46.48ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 20.11ns 15.2927 1.31 120.20ns
merge_with 84.67ns 62.6123 1.35 350.47ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 30.32ns 21.3338 1.42 9.19ns
on_error 3.04ns 1.93765 1.57 19.83ns
on_completed 2.67ns 2.90653 0.92 0.58ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 215.15ns 161.942 1.33 182.99ns
get_observable 31.52ns 25.0119 1.26 53.19ns
get_subscriber 70.88ns 55.8784 1.27 11.37ns

Linux GCC

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 0.33ns 0.335226 1.00 0.33ns
Dynamic observable construction 18.66ns 18.7462 1.00 23.54ns
Specific observable construction + as_dynamic 19.11ns 18.8704 1.01 23.17ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 27.49ns 27.2536 1.01 359.88ns
Specific observable lift dynamic observer 31.17ns 31.6856 0.98 376.78ns
Dynamic observable lift specific observer 81.16ns 74.3549 1.09 414.28ns
Dynamic observable lift dynamic observer 74.74ns 69.6963 1.07 395.39ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 23.43ns 23.1351 1.01 350.34ns
Specific observable subscribe dynamic observer 24.10ns 24.1964 1.00 362.35ns
Dynamic observable subscribe specific observer 59.65ns 52.5566 1.14 402.22ns
Dynamic observable subscribe dynamic observer 41.84ns 39.3128 1.06 377.83ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 23.55ns 23.9718 0.98 348.74ns
Dynamic observable subscribe lambda 57.66ns 57.3806 1.00 423.44ns
Specific observable subscribe lambda without subscription 23.28ns 22.8854 1.02 350.68ns
Dynamic observable subscribe lambda without subscription 51.83ns 51.9105 1.00 424.98ns
Specific observable subscribe specific subscriber 3.68ns 3.69637 1.00 293.92ns
Dynamic observable subscribe specific subscriber 32.69ns 31.147 1.05 344.70ns
Specific observable subscribe dynamic observer 3.67ns 3.69722 0.99 295.76ns
Dynamic observable subscribe dynamic observer 15.33ns 15.325 1.00 320.83ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 0.34ns 0.33558 1.00 0.33ns
Dynamic observer construction 19.13ns 19.5128 0.98 20.45ns
Specific observer construction + as_dynamic 19.31ns 19.2897 1.00 21.18ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.34ns 0.335521 1.00 0.34ns
Dynamic observer OnNext 1.68ns 1.67573 1.00 1.79ns

Operators

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 14.82ns 14.9284 0.99 362.84ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 21.75ns 21.3626 1.02 57.71ns
Make copy of subscriber 3.71ns 3.71706 1.00 4.50ns
Transform subsriber to dynamic 21.75ns 21.7668 1.00 29.10ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 21.83ns 21.8138 1.00 54.17ns
composite_subscription add 21.84ns 22.0836 0.99 17.54ns
composite_subscription unsubscribe 8.36ns 8.35695 1.00 10.03ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 3.48ns 3.54094 0.98 46.36ns
error 35.78ns 35.8364 1.00 82.40ns
never 3.58ns 3.55749 1.01 300.24ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 22.50ns 22.543 1.00 70.08ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 3.65ns 3.65168 1.00 50.81ns
just send variadic 4.08ns 4.07759 1.00 47.07ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 3.95ns 3.95167 1.00 147.12ns
merge_with 42.96ns 43.0936 1.00 357.79ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 17.04ns 17.0997 1.00 11.69ns
on_error 1.34ns 1.34238 1.00 16.82ns
on_completed 1.34ns 1.34346 1.00 1.35ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 126.19ns 116.267 1.09 167.33ns
get_observable 5.70ns 5.73585 0.99 46.53ns
get_subscriber 11.53ns 11.638 0.99 22.39ns

Windows MSVC

Observable construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable construction 1.51ns 1.32869 1.13 0.67ns
Dynamic observable construction 82.28ns 72.48 1.14 123.44ns
Specific observable construction + as_dynamic 81.98ns 73.4174 1.12 123.38ns

Observable lift

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable lift specific observer 137.33ns 120.102 1.14 1219.62ns
Specific observable lift dynamic observer 167.49ns 146.887 1.14 1267.81ns
Dynamic observable lift specific observer 265.49ns 266.461 1.00 1406.37ns
Dynamic observable lift dynamic observer 219.77ns 220.496 1.00 1305.75ns

Observable subscribe

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe specific observer 105.57ns 91.8938 1.15 1182.05ns
Specific observable subscribe dynamic observer 121.98ns 102.096 1.19 1210.64ns
Dynamic observable subscribe specific observer 218.36ns 219.257 1.00 1361.00ns
Dynamic observable subscribe dynamic observer 186.81ns 163.247 1.14 1246.48ns

Observable subscribe #2

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observable subscribe lambda 104.56ns 104.868 1.00 1175.32ns
Dynamic observable subscribe lambda 216.74ns 191.034 1.13 1357.63ns
Specific observable subscribe lambda without subscription 104.66ns 92.6522 1.13 1176.91ns
Dynamic observable subscribe lambda without subscription 217.10ns 193.275 1.12 1357.37ns
Specific observable subscribe specific subscriber 20.32ns 14.8608 1.37 853.67ns
Dynamic observable subscribe specific subscriber 132.84ns 116.155 1.14 1032.64ns
Specific observable subscribe dynamic observer 16.74ns 14.794 1.13 884.07ns
Dynamic observable subscribe dynamic observer 64.88ns 57.2961 1.13 913.11ns

Observer construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer construction 0.67ns 0.672761 1.00 1.52ns
Dynamic observer construction 92.01ns 81.8129 1.12 112.61ns
Specific observer construction + as_dynamic 81.67ns 81.7191 1.00 114.43ns

OnNext

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Specific observer OnNext 0.67ns 0.591753 1.13 0.67ns
Dynamic observer OnNext 2.02ns 2.02005 1.00 2.01ns

Operators

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
map construction from observable via dot + subscribe 80.60ns 67.435 1.20 991.46ns

Subscriber construction

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
Make subsriber 87.80ns 76.9771 1.14 349.62ns
Make copy of subscriber 16.75ns 16.7832 1.00 31.56ns
Transform subsriber to dynamic 96.66ns 85.3566 1.13 156.65ns

Subscription

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
composite_subscription create 88.29ns 86.9024 1.02 378.16ns
composite_subscription add 64.38ns 65.9366 0.98 67.65ns
composite_subscription unsubscribe 8.42ns 7.3871 1.14 23.29ns

foundamental sources

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
empty 16.79ns 14.8062 1.13 190.66ns
error 47.12ns 47.0862 1.00 207.37ns
never 16.78ns 16.8156 1.00 842.90ns

from

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
from vector with int 84.13ns 73.2893 1.15 263.22ns

just

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
just send int 19.80ns 17.5296 1.13 191.56ns
just send variadic 21.27ns 18.0861 1.18 194.15ns

merge

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
merge 35.34ns 30.7774 1.15 677.59ns
merge_with 300.57ns 268.128 1.12 1427.46ns

publish_subject callbacks

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
on_next 20.23ns 17.7264 1.14 32.59ns
on_error 2.37ns 2.08932 1.13 17.36ns
on_completed 2.52ns 2.08705 1.21 1.36ns

publish_subject routines

Table
Test Name Current, ns Prev, ns Ratio RxCpp current, ns
construct 290.94ns 302.125 0.96 604.91ns
get_observable 25.90ns 25.865 1.00 159.03ns
get_subscriber 50.61ns 50.3075 1.01 92.13ns

Comment thread src/rpp/rpp/operators/fwd/switch_map.hpp Outdated
Comment thread src/rpp/rpp/operators/fwd/switch_map.hpp Outdated
Comment thread src/rpp/rpp/operators/fwd/switch_map.hpp
Comment thread src/rpp/rpp/operators/fwd/switch_map.hpp Outdated
Comment thread src/rpp/rpp/operators/switch_map.hpp Outdated
Comment thread src/samples/doxygen/switch_map.cpp Outdated
Comment thread src/tests/test_switch_map.cpp Outdated
Comment thread src/tests/test_switch_map.cpp Outdated
Comment thread src/tests/test_switch_map.cpp Outdated
Comment thread src/tests/test_switch_map.cpp Outdated
@tcw165
tcw165 force-pushed the op/switch_map branch 4 times, most recently from 7d52995 to e6d3f9a Compare July 16, 2022 07:01
@tcw165
tcw165 requested a review from AlexInLog July 16, 2022 07:17
Make mock_observer ctor explicit


Call on_next in copy_count_tracker when it's still subscribed
Comment thread src/tests/test_switch_map.cpp Outdated
}
WHEN("subscribe on it via switch_map with [never, just...]")
{
std::atomic_size_t count_of_unsubscribed{0};

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Not sure if it should be atomic due to you don't have any threading there =)

@AlexInLog
AlexInLog merged commit 67e60ce into AlexInLog:main Jul 16, 2022
@tcw165
tcw165 deleted the op/switch_map branch July 17, 2022 04:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants