Skip to content

Add zip operator#523

Merged
AlexInLog merged 10 commits into
AlexInLog:v2from
CorentinBT:zip_operator
Feb 16, 2024
Merged

Add zip operator#523
AlexInLog merged 10 commits into
AlexInLog:v2from
CorentinBT:zip_operator

Conversation

@CorentinBT

Copy link
Copy Markdown
Contributor

No description provided.

Comment thread src/rpp/rpp/operators/zip.hpp Outdated
Comment thread src/rpp/rpp/operators/zip.hpp Outdated
Comment thread src/rpp/rpp/operators/combine_latest.hpp Outdated
Comment thread src/rpp/rpp/operators/zip.hpp Outdated
Comment thread src/rpp/rpp/operators/zip.hpp Outdated
Comment thread src/rpp/rpp/operators/details/combining_strategy.hpp
Comment thread src/rpp/rpp/operators/details/combining_strategy.hpp Outdated
Comment thread src/rpp/rpp/operators/combine_latest.hpp Outdated
Comment thread src/tests/rpp/test_zip.cpp Outdated
@github-actions

github-actions Bot commented Feb 15, 2024

Copy link
Copy Markdown
Contributor

BENCHMARK RESULTS (AUTOGENERATED)

ci-ubuntu-gcc

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 305.29 ns 2.16 ns 2.16 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 301.85 ns 2.16 ns 2.16 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 686.53 ns 0.31 ns 0.31 ns 1.00
from array of 1 - create + subscribe + current_thread 1017.70 ns 4.63 ns 4.63 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 2263.52 ns 114.88 ns 120.06 ns 0.96
defer from array of 1 - defer + create + subscribe + immediate 726.42 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 2157.49 ns 57.96 ns 57.99 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3050.36 ns 32.11 ns 32.12 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1103.74 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 859.22 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 1003.00 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 870.41 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1250.58 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 947.56 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 1113.15 ns 19.14 ns 19.13 ns 1.00

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 265.14 ns 2.16 ns 2.16 ns 1.00
current_thread scheduler create worker + schedule 368.46 ns 6.49 ns 6.48 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 807.09 ns 65.95 ns 64.27 ns 1.03

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 867.26 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 891.62 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 2334.63 ns 153.41 ns 159.98 ns 0.96
immediate_just+buffer(2)+subscribe 1557.58 ns 14.82 ns 14.82 ns 1.00
immediate_just+window(2)+subscribe + subscsribe inner 2407.71 ns 1019.07 ns 1051.24 ns 0.97

Conditional Operators

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

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 1950.05 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 3509.47 ns 203.18 ns 177.12 ns 1.15
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3615.83 ns 165.43 ns 166.76 ns 0.99
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 146.25 ns 138.95 ns 1.05
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3607.57 ns 1147.88 ns 1155.91 ns 0.99
immediate_just(1) + zip(immediate_just(2)) + subscribe 2130.08 ns 207.68 ns - 0.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 34.52 ns 12.03 ns 11.71 ns 1.03

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1385.43 ns 13.58 ns 13.90 ns 0.98
basic sample with immediate scheduler 1406.02 ns 5.55 ns 5.55 ns 1.00

Aggregating Operators

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

ci-macos

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 1325.06 ns 5.59 ns 3.94 ns 1.42
Subscribe empty callbacks to empty observable via pipe operator 1331.17 ns 5.69 ns 5.71 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 2642.39 ns 0.38 ns 0.24 ns 1.57
from array of 1 - create + subscribe + current_thread 3310.96 ns 34.09 ns 25.62 ns 1.33
concat_as_source of just(1 immediate) create + subscribe 7430.14 ns 441.15 ns 331.04 ns 1.33
defer from array of 1 - defer + create + subscribe + immediate 2722.64 ns 0.32 ns 0.24 ns 1.35
interval - interval + take(3) + subscribe + immediate 7012.49 ns 160.51 ns 126.21 ns 1.27
interval - interval + take(3) + subscribe + current_thread 8491.92 ns 164.33 ns 107.58 ns 1.53

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 3910.73 ns 0.32 ns 0.23 ns 1.35
immediate_just+filter(true)+subscribe 2887.91 ns 0.32 ns 0.23 ns 1.35
immediate_just(1,2)+skip(1)+subscribe 4235.24 ns 0.32 ns 0.23 ns 1.35
immediate_just(1,1,2)+distinct_until_changed()+subscribe 2948.52 ns 0.73 ns 0.47 ns 1.54
immediate_just(1,2)+first()+subscribe 4471.96 ns 0.32 ns 0.23 ns 1.35
immediate_just(1,2)+last()+subscribe 3296.91 ns 0.32 ns 0.23 ns 1.36
immediate_just+take_last(1)+subscribe 4139.85 ns 94.84 ns 69.14 ns 1.37

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 1302.24 ns 6.45 ns 4.05 ns 1.59
current_thread scheduler create worker + schedule 1692.71 ns 52.25 ns 49.03 ns 1.07
current_thread scheduler create worker + schedule + recursive schedule 2759.08 ns 311.63 ns 320.59 ns 0.97

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 2885.37 ns 0.32 ns 0.23 ns 1.35
immediate_just+scan(10, std::plus)+subscribe 3186.77 ns 0.63 ns 0.47 ns 1.35
immediate_just+flat_map(immediate_just(v*2))+subscribe 7204.98 ns 562.74 ns 415.27 ns 1.36
immediate_just+buffer(2)+subscribe 3381.55 ns 92.24 ns 68.56 ns 1.35
immediate_just+window(2)+subscribe + subscsribe inner 7300.26 ns 2954.90 ns 2178.12 ns 1.36

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 18217.17 ns - - 0.00
immediate_just+take_while(true)+subscribe 2887.53 ns 0.32 ns 0.23 ns 1.36

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 6809.66 ns 0.32 ns 0.23 ns 1.35

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 10438.65 ns 625.13 ns 479.69 ns 1.30
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 42379.97 ns 1897.10 ns 447.15 ns 4.24
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 1843.03 ns 481.30 ns 3.83
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 34678.22 ns 10337.76 ns 1955.79 ns 5.29
immediate_just(1) + zip(immediate_just(2)) + subscribe 26357.82 ns 3965.82 ns - 0.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 104.96 ns 67.79 ns 50.37 ns 1.35

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 3852.47 ns 142.53 ns 112.12 ns 1.27
basic sample with immediate scheduler 3821.95 ns 21.59 ns 14.04 ns 1.54

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 3289.93 ns 0.32 ns 0.23 ns 1.37

ci-ubuntu-clang

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 276.65 ns 1.56 ns 0.88 ns 1.78
Subscribe empty callbacks to empty observable via pipe operator 270.67 ns 1.57 ns 0.88 ns 1.78

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 566.54 ns 0.31 ns 0.31 ns 1.00
from array of 1 - create + subscribe + current_thread 789.93 ns 5.56 ns 5.55 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 1920.20 ns 113.39 ns 112.89 ns 1.00
defer from array of 1 - defer + create + subscribe + immediate 587.55 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 1525.06 ns 57.09 ns 57.03 ns 1.00
interval - interval + take(3) + subscribe + current_thread 2055.22 ns 30.88 ns 30.86 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 931.48 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 659.27 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 848.03 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 686.68 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1104.37 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 767.75 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 986.68 ns 0.31 ns 0.31 ns 1.01

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 201.08 ns 1.58 ns 0.88 ns 1.80
current_thread scheduler create worker + schedule 303.78 ns 5.58 ns 5.89 ns 0.95
current_thread scheduler create worker + schedule + recursive schedule 635.58 ns 59.37 ns 58.55 ns 1.01

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 655.97 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 717.63 ns 0.31 ns 0.32 ns 0.96
immediate_just+flat_map(immediate_just(v*2))+subscribe 1811.03 ns 121.68 ns 119.17 ns 1.02
immediate_just+buffer(2)+subscribe 1376.00 ns 13.58 ns 15.12 ns 0.90
immediate_just+window(2)+subscribe + subscsribe inner 2172.45 ns 780.10 ns 773.64 ns 1.01

Conditional Operators

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

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 1609.17 ns 0.31 ns 0.31 ns 1.01

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 2594.26 ns 125.80 ns 125.63 ns 1.00
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3004.49 ns 122.59 ns 121.84 ns 1.01
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 113.72 ns 113.12 ns 1.01
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 2723.17 ns 733.09 ns 722.92 ns 1.01
immediate_just(1) + zip(immediate_just(2)) + subscribe 1824.23 ns 169.78 ns - 0.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 23.14 ns 14.49 ns 12.66 ns 1.14

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1024.95 ns 13.58 ns 14.19 ns 0.96
basic sample with immediate scheduler 1032.89 ns 6.17 ns 6.17 ns 1.00

Aggregating Operators

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

ci-windows

General

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

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1191.60 ns 5.24 ns 4.93 ns 1.06
from array of 1 - create + subscribe + current_thread 1454.97 ns 20.38 ns 19.74 ns 1.03
concat_as_source of just(1 immediate) create + subscribe 4738.01 ns 176.19 ns 172.62 ns 1.02
defer from array of 1 - defer + create + subscribe + immediate 1205.79 ns 5.24 ns 4.93 ns 1.06
interval - interval + take(3) + subscribe + immediate 3122.94 ns 129.71 ns 129.67 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3469.75 ns 60.75 ns 60.75 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1866.77 ns 12.87 ns 12.87 ns 1.00
immediate_just+filter(true)+subscribe 1705.68 ns 12.37 ns 12.40 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 1780.43 ns 13.06 ns 13.03 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 1372.92 ns 16.08 ns 15.94 ns 1.01
immediate_just(1,2)+first()+subscribe 2110.14 ns 12.64 ns 12.95 ns 0.98
immediate_just(1,2)+last()+subscribe 1494.83 ns 14.13 ns 14.10 ns 1.00
immediate_just+take_last(1)+subscribe 2084.69 ns 58.91 ns 59.40 ns 0.99

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 491.92 ns 7.40 ns 7.29 ns 1.02
current_thread scheduler create worker + schedule 663.14 ns 17.58 ns 17.90 ns 0.98
current_thread scheduler create worker + schedule + recursive schedule 1102.76 ns 107.88 ns 110.23 ns 0.98

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 1329.48 ns 12.34 ns 12.37 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 1493.98 ns 21.58 ns 21.27 ns 1.01
immediate_just+flat_map(immediate_just(v*2))+subscribe 3966.06 ns 219.28 ns 228.52 ns 0.96
immediate_just+buffer(2)+subscribe 2353.91 ns 59.83 ns 61.22 ns 0.98
immediate_just+window(2)+subscribe + subscsribe inner 4072.52 ns 1503.14 ns 1126.29 ns 1.33

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 1323.11 ns 11.45 ns 11.47 ns 1.00
immediate_just+take_while(true)+subscribe 1332.72 ns 12.40 ns 12.37 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 4168.44 ns 7.71 ns 7.40 ns 1.04

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 5578.26 ns 237.06 ns 243.15 ns 0.97
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 6537.18 ns 233.14 ns 238.62 ns 0.98
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 232.17 ns 221.19 ns 1.05
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 6334.91 ns 1002.88 ns 970.32 ns 1.03
immediate_just(1) + zip(immediate_just(2)) + subscribe 3916.91 ns 549.64 ns - 0.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 38.62 ns 27.07 ns 25.28 ns 1.07

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1873.72 ns 60.12 ns 59.34 ns 1.01
basic sample with immediate scheduler 1872.60 ns 39.17 ns 37.03 ns 1.06

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 1481.62 ns 19.96 ns 19.97 ns 1.00

@codecov

codecov Bot commented Feb 15, 2024

Copy link
Copy Markdown

Codecov Report

All modified and coverable lines are covered by tests ✅

Comparison is base (721b469) 95.53% compared to head (2548ba0) 94.63%.
Report is 6 commits behind head on v2.

Additional details and impacted files
@@            Coverage Diff             @@
##               v2     #523      +/-   ##
==========================================
- Coverage   95.53%   94.63%   -0.91%     
==========================================
  Files          80       85       +5     
  Lines        2105     1528     -577     
==========================================
- Hits         2011     1446     -565     
+ Misses         94       82      -12     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Comment thread src/rpp/rpp/operators/combine_latest.hpp Outdated

template<typename TSelector, rpp::constraint::observable... TObservables>
struct combine_latest_t
struct combine_latest_t final : public combining_operator_t<combine_latest_disposable, combine_latest_observer_strategy, TSelector, TObservables...>

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.

using?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

you mean to remove final?

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.

no, i mean we don't need struct in this case, just using to combining_operator_t...

@sonarqubecloud

Copy link
Copy Markdown

@AlexInLog AlexInLog merged commit b3a9d90 into AlexInLog:v2 Feb 16, 2024
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