1 | /* |
2 | * Copyright 2014-present Facebook, Inc. |
3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. |
6 | * You may obtain a copy of the License at |
7 | * |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * |
10 | * Unless required by applicable law or agreed to in writing, software |
11 | * distributed under the License is distributed on an "AS IS" BASIS, |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. |
15 | */ |
16 | |
17 | #include <folly/container/Merge.h> |
18 | |
19 | #include <map> |
20 | #include <vector> |
21 | |
22 | #include <folly/portability/GTest.h> |
23 | |
24 | TEST(MergeTest, NonOverlapping) { |
25 | std::vector<int> a = {0, 2, 4, 6}; |
26 | std::vector<int> b = {1, 3, 5, 7}; |
27 | std::vector<int> c; |
28 | |
29 | folly::merge(a.begin(), a.end(), b.begin(), b.end(), std::back_inserter(c)); |
30 | EXPECT_EQ(8, c.size()); |
31 | for (size_t i = 0; i < 8; ++i) { |
32 | EXPECT_EQ(i, c[i]); |
33 | } |
34 | } |
35 | |
36 | TEST(MergeTest, OverlappingInSingleInputRange) { |
37 | std::vector<std::pair<int, int>> a = {{0, 0}, {0, 1}}; |
38 | std::vector<std::pair<int, int>> b = {{2, 2}, {3, 3}}; |
39 | std::map<int, int> c; |
40 | |
41 | folly::merge( |
42 | a.begin(), a.end(), b.begin(), b.end(), std::inserter(c, c.begin())); |
43 | EXPECT_EQ(3, c.size()); |
44 | |
45 | // First value is inserted, second is not |
46 | EXPECT_EQ(c[0], 0); |
47 | |
48 | EXPECT_EQ(c[2], 2); |
49 | EXPECT_EQ(c[3], 3); |
50 | } |
51 | |
52 | TEST(MergeTest, OverlappingInDifferentInputRange) { |
53 | std::vector<std::pair<int, int>> a = {{0, 0}, {1, 1}}; |
54 | std::vector<std::pair<int, int>> b = {{0, 2}, {3, 3}}; |
55 | std::map<int, int> c; |
56 | |
57 | folly::merge( |
58 | a.begin(), a.end(), b.begin(), b.end(), std::inserter(c, c.begin())); |
59 | EXPECT_EQ(3, c.size()); |
60 | |
61 | // Value from a is inserted, value from b is not. |
62 | EXPECT_EQ(c[0], 0); |
63 | |
64 | EXPECT_EQ(c[1], 1); |
65 | EXPECT_EQ(c[3], 3); |
66 | } |
67 | |