Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: base/algorithm/sorted_ranges_unittest.cc

Issue 2807933002: Removing (dest != prev) check from LastUnique algorithm. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/algorithm/sorted_ranges.h"
6
7 #include <algorithm>
8 #include <random>
9
10 #include "base/containers/container_test_utils.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace base {
14
15 namespace {
16
17 template <typename T>
18 void UniquePickLastTest(const std::vector<T>& in,
19 const std::vector<T>& expected) {
dyaroshev 2017/04/08 17:03:12 Unused
20 std::vector<T> copy;
21 UniqueCopyPickLast(in.begin(), in.end(), std::back_inserter(copy));
22 EXPECT_EQ(copy, expected);
23 auto in_place = in;
24 in_place.erase(UniquePickLast(in_place.begin(), in_place.end()),
25 in_place.end());
26 EXPECT_EQ(in_place, expected);
27 }
28
29 } // namespace
30
31 TEST(Algorithm, UniqueCopyPickLastTest) {
32 // Behavior should be identical to std::unique when used when algorithm is
33 // called with strict Equality.
34 {
35 auto CheckUniqueInts = [](const std::vector<int>& in) {
36 std::vector<int> expected;
37 std::unique_copy(in.begin(), in.end(), std::back_inserter(expected));
38
39 std::vector<int> copy;
40 UniqueCopyPickLast(in.begin(), in.end(), std::back_inserter(copy));
41 EXPECT_EQ(expected, copy);
42
43 auto in_place = in;
44 in_place.erase(UniquePickLast(in_place.begin(), in_place.end()),
45 in_place.end());
46 EXPECT_EQ(expected, in_place);
47 };
48
49 CheckUniqueInts({});
50 CheckUniqueInts({1});
51 CheckUniqueInts({1, 2});
52 CheckUniqueInts({1, 2, 3});
53 CheckUniqueInts({1, 1});
54 CheckUniqueInts({1, 2, 2, 1});
55 CheckUniqueInts({1, 1, 1});
56 CheckUniqueInts({1, 3, 1});
57 CheckUniqueInts({1, 1, 2});
58 CheckUniqueInts({1, 2, 2});
59 CheckUniqueInts({1, 2, 2, 3, 3, 3});
60 CheckUniqueInts({1, 1, 1, 2, 3, 4, 5, 5, 5});
61
62 // More random input.
63 std::mt19937 gen;
64 std::uniform_int_distribution<> dis(1, 10);
65 for (int i = 10; i < 100; ++i) {
66 std::vector<int> random_input(i);
67 std::generate(random_input.begin(), random_input.end(),
68 [&] { return dis(gen); });
69 CheckUniqueInts(random_input);
70 }
71 }
72
73 // Check that algorithm works with move only types (compilation is enough).
74 {
75 int input_range[] = {1, 2, 2};
76 std::vector<MoveOnlyInt> move_only(std::begin(input_range),
77 std::end(input_range));
78 move_only.erase(UniquePickLast(move_only.begin(), move_only.end()),
79 move_only.end());
80
81 EXPECT_EQ(2U, move_only.size());
82 EXPECT_EQ(MoveOnlyInt(1), move_only[0]);
83 EXPECT_EQ(MoveOnlyInt(2), move_only[1]);
84 }
85
86 // Keep last.
87 {
88 using IntPair = std::pair<int, int>;
89 auto CheckTakeLastDuplicate = [](std::vector<IntPair> in,
90 const std::vector<int>& expected_second) {
91 in.erase(UniquePickLast(in.begin(), in.end(),
92 [](const IntPair& lhs, const IntPair& rhs) {
93 return lhs.first == rhs.first;
94 }),
95 in.end());
96
97 ASSERT_EQ(expected_second.size(), in.size());
98
99 for (size_t i = 0; i < in.size(); ++i)
100 EXPECT_EQ(expected_second[i], in[i].second) << "i= " << i;
101 };
102
103 CheckTakeLastDuplicate({{1, 0}, {1, 1}, {2, 0}}, {1, 0});
104 CheckTakeLastDuplicate({{1, 0}, {1, 1}, {1, 2}}, {2});
105 CheckTakeLastDuplicate({{1, 0}, {2, 0}, {2, 1}}, {0, 1});
106 CheckTakeLastDuplicate({{1, 0}, {1, 1}, {2, 0}, {2, 1}}, {1, 1});
107 CheckTakeLastDuplicate({{1, 0}, {2, 0}, {1, 0}, {1, 1}}, {0, 0, 1});
108 }
109 }
110
111 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698