diff options
author | Kirk Shoop <kirk.shoop@microsoft.com> | 2017-02-01 08:58:39 -0800 |
---|---|---|
committer | Grigoriy Chudnov <g.chudnov@gmail.com> | 2017-02-03 09:08:56 +0300 |
commit | 6245a18869836ef29f9116808435cefac0eebcb7 (patch) | |
tree | 7c42f28dfc2df14930bc11d97fcb5324f3c45ee3 /Rx/v2/test/operators/concat_map.cpp | |
parent | 07d5e235baabc841d01bfeac6d4476deda0a1bb0 (diff) | |
download | RxCpp-6245a18869836ef29f9116808435cefac0eebcb7.tar.gz |
move sources docs out of observable
shift tests to include aliases
Diffstat (limited to 'Rx/v2/test/operators/concat_map.cpp')
-rw-r--r-- | Rx/v2/test/operators/concat_map.cpp | 116 |
1 files changed, 94 insertions, 22 deletions
diff --git a/Rx/v2/test/operators/concat_map.cpp b/Rx/v2/test/operators/concat_map.cpp index 0a3ee6b..e6551d6 100644 --- a/Rx/v2/test/operators/concat_map.cpp +++ b/Rx/v2/test/operators/concat_map.cpp @@ -8,7 +8,7 @@ static const int static_tripletCount = 100; -SCENARIO("concat_map pythagorian ranges", "[hide][range][concat_map][pythagorian][perf]"){ +SCENARIO("concat_transform pythagorian ranges", "[hide][range][concat_transform][pythagorian][perf]"){ const int& tripletCount = static_tripletCount; GIVEN("some ranges"){ WHEN("generating pythagorian triplets"){ @@ -25,14 +25,14 @@ SCENARIO("concat_map pythagorian ranges", "[hide][range][concat_map][pythagorian auto start = clock::now(); auto triples = rxs::range(1, so) - .concat_map( + .concat_transform( [&c, so](int z){ return rxs::range(1, z, 1, so) - .concat_map( + .concat_transform( [&c, so, z](int x){ return rxs::range(x, z, 1, so) .filter([&c, z, x](int y){++c; return x*x + y*y == z*z;}) - .map([z, x](int y){return std::make_tuple(x, y, z);}) + .transform([z, x](int y){return std::make_tuple(x, y, z);}) // forget type to workaround lambda deduction bug on msvc 2013 .as_dynamic();}, [](int /*x*/, std::tuple<int,int,int> triplet){return triplet;}) @@ -53,7 +53,7 @@ SCENARIO("concat_map pythagorian ranges", "[hide][range][concat_map][pythagorian } } -SCENARIO("synchronize concat_map pythagorian ranges", "[hide][range][concat_map][synchronize][pythagorian][perf]"){ +SCENARIO("synchronize concat_transform pythagorian ranges", "[hide][range][concat_transform][synchronize][pythagorian][perf]"){ const int& tripletCount = static_tripletCount; GIVEN("some ranges"){ WHEN("generating pythagorian triplets"){ @@ -67,10 +67,10 @@ SCENARIO("synchronize concat_map pythagorian ranges", "[hide][range][concat_map] auto start = clock::now(); auto triples = rxs::range(1, so) - .concat_map( + .concat_transform( [&c, so](int z){ return rxs::range(1, z, 1, so) - .concat_map( + .concat_transform( [&c, so, z](int x){ return rxs::range(x, z, 1, so) .filter([&c, z, x](int y){ @@ -79,7 +79,7 @@ SCENARIO("synchronize concat_map pythagorian ranges", "[hide][range][concat_map] return true;} else { return false;}}) - .map([z, x](int y){return std::make_tuple(x, y, z);}) + .transform([z, x](int y){return std::make_tuple(x, y, z);}) // forget type to workaround lambda deduction bug on msvc 2013 .as_dynamic();}, [](int /*x*/, std::tuple<int,int,int> triplet){return triplet;}, @@ -101,7 +101,7 @@ SCENARIO("synchronize concat_map pythagorian ranges", "[hide][range][concat_map] } } -SCENARIO("observe_on concat_map pythagorian ranges", "[hide][range][concat_map][observe_on][pythagorian][perf]"){ +SCENARIO("observe_on concat_transform pythagorian ranges", "[hide][range][concat_transform][observe_on][pythagorian][perf]"){ const int& tripletCount = static_tripletCount; GIVEN("some ranges"){ WHEN("generating pythagorian triplets"){ @@ -115,10 +115,10 @@ SCENARIO("observe_on concat_map pythagorian ranges", "[hide][range][concat_map][ auto start = clock::now(); auto triples = rxs::range(1, so) - .concat_map( + .concat_transform( [&c, so](int z){ return rxs::range(1, z, 1, so) - .concat_map( + .concat_transform( [&c, so, z](int x){ return rxs::range(x, z, 1, so) .filter([&c, z, x](int y){ @@ -127,7 +127,7 @@ SCENARIO("observe_on concat_map pythagorian ranges", "[hide][range][concat_map][ return true;} else { return false;}}) - .map([z, x](int y){return std::make_tuple(x, y, z);}) + .transform([z, x](int y){return std::make_tuple(x, y, z);}) // forget type to workaround lambda deduction bug on msvc 2013 .as_dynamic();}, [](int /*x*/, std::tuple<int,int,int> triplet){return triplet;}, @@ -150,7 +150,7 @@ SCENARIO("observe_on concat_map pythagorian ranges", "[hide][range][concat_map][ } } -SCENARIO("serialize concat_map pythagorian ranges", "[hide][range][concat_map][serialize][pythagorian][perf]"){ +SCENARIO("serialize concat_transform pythagorian ranges", "[hide][range][concat_transform][serialize][pythagorian][perf]"){ const int& tripletCount = static_tripletCount; GIVEN("some ranges"){ WHEN("generating pythagorian triplets"){ @@ -164,10 +164,10 @@ SCENARIO("serialize concat_map pythagorian ranges", "[hide][range][concat_map][s auto start = clock::now(); auto triples = rxs::range(1, so) - .concat_map( + .concat_transform( [&c, so](int z){ return rxs::range(1, z, 1, so) - .concat_map( + .concat_transform( [&c, so, z](int x){ return rxs::range(x, z, 1, so) .filter([&c, z, x](int y){ @@ -176,7 +176,7 @@ SCENARIO("serialize concat_map pythagorian ranges", "[hide][range][concat_map][s return true;} else { return false;}}) - .map([z, x](int y){return std::make_tuple(x, y, z);}) + .transform([z, x](int y){return std::make_tuple(x, y, z);}) // forget type to workaround lambda deduction bug on msvc 2013 .as_dynamic();}, [](int /*x*/, std::tuple<int,int,int> triplet){return triplet;}, @@ -199,7 +199,7 @@ SCENARIO("serialize concat_map pythagorian ranges", "[hide][range][concat_map][s } } -SCENARIO("concat_map completes", "[concat_map][map][operators]"){ +SCENARIO("concat_map completes", "[concat_map][transform][map][operators]"){ GIVEN("two cold observables. one of ints. one of strings."){ auto sc = rxsc::make_test(); auto w = sc.create_worker(); @@ -268,13 +268,85 @@ SCENARIO("concat_map completes", "[concat_map][map][operators]"){ REQUIRE(required == actual); } } + } +} + +SCENARIO("concat_transform completes", "[concat_transform][transform][map][operators]"){ + GIVEN("two cold observables. one of ints. one of strings."){ + auto sc = rxsc::make_test(); + auto w = sc.create_worker(); + const rxsc::test::messages<int> i_on; + const rxsc::test::messages<std::string> s_on; + + auto xs = sc.make_cold_observable({ + i_on.next(100, 4), + i_on.next(200, 2), + i_on.completed(500) + }); + + auto ys = sc.make_cold_observable({ + s_on.next(50, "foo"), + s_on.next(100, "bar"), + s_on.next(150, "baz"), + s_on.next(200, "qux"), + s_on.completed(250) + }); + + WHEN("each int is mapped to the strings"){ + + auto res = w.start( + [&]() { + return xs + | rxo::concat_transform( + [&](int){ + return ys;}, + [](int, std::string s){ + return s;}) + // forget type to workaround lambda deduction bug on msvc 2013 + | rxo::as_dynamic(); + } + ); + + THEN("the output contains strings repeated for each int"){ + auto required = rxu::to_vector({ + s_on.next(350, "foo"), + s_on.next(400, "bar"), + s_on.next(450, "baz"), + s_on.next(500, "qux"), + s_on.next(600, "foo"), + s_on.next(650, "bar"), + s_on.next(700, "baz"), + s_on.next(750, "qux"), + s_on.completed(800) + }); + auto actual = res.get_observer().messages(); + REQUIRE(required == actual); + } + + THEN("there was one subscription and one unsubscription to the ints"){ + auto required = rxu::to_vector({ + i_on.subscribe(200, 700) + }); + auto actual = xs.subscriptions(); + REQUIRE(required == actual); + } + + THEN("there were 2 subscription and unsubscription to the strings"){ + auto required = rxu::to_vector({ + s_on.subscribe(300, 550), + s_on.subscribe(550, 800) + }); + auto actual = ys.subscriptions(); + REQUIRE(required == actual); + } + } WHEN("each int is mapped to the strings with coordinator"){ auto res = w.start( [&]() { return xs - .concat_map( + .concat_transform( [&](int){ return ys;}, [](int, std::string s){ @@ -321,7 +393,7 @@ SCENARIO("concat_map completes", "[concat_map][map][operators]"){ } } -SCENARIO("concat_map, no result selector, no coordination", "[concat_map][map][operators]"){ +SCENARIO("concat_transform, no result selector, no coordination", "[concat_transform][transform][map][operators]"){ GIVEN("two cold observables. one of ints. one of strings."){ auto sc = rxsc::make_test(); auto w = sc.create_worker(); @@ -347,7 +419,7 @@ SCENARIO("concat_map, no result selector, no coordination", "[concat_map][map][o auto res = w.start( [&]() { return xs - .concat_map( + .concat_transform( [&](int){ return ys;}) // forget type to workaround lambda deduction bug on msvc 2013 @@ -391,7 +463,7 @@ SCENARIO("concat_map, no result selector, no coordination", "[concat_map][map][o } } -SCENARIO("concat_map, no result selector, with coordination", "[concat_map][map][operators]"){ +SCENARIO("concat_transform, no result selector, with coordination", "[concat_transform][transform][map][operators]"){ GIVEN("two cold observables. one of ints. one of strings."){ auto sc = rxsc::make_test(); auto w = sc.create_worker(); @@ -417,7 +489,7 @@ SCENARIO("concat_map, no result selector, with coordination", "[concat_map][map] auto res = w.start( [&]() { return xs - .concat_map( + .concat_transform( [&](int){ return ys;}, rx::identity_current_thread()) |