1*635a8641SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors. All rights reserved.
2*635a8641SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*635a8641SAndroid Build Coastguard Worker // found in the LICENSE file.
4*635a8641SAndroid Build Coastguard Worker
5*635a8641SAndroid Build Coastguard Worker #include "base/stl_util.h"
6*635a8641SAndroid Build Coastguard Worker
7*635a8641SAndroid Build Coastguard Worker #include <array>
8*635a8641SAndroid Build Coastguard Worker #include <deque>
9*635a8641SAndroid Build Coastguard Worker #include <forward_list>
10*635a8641SAndroid Build Coastguard Worker #include <functional>
11*635a8641SAndroid Build Coastguard Worker #include <initializer_list>
12*635a8641SAndroid Build Coastguard Worker #include <iterator>
13*635a8641SAndroid Build Coastguard Worker #include <list>
14*635a8641SAndroid Build Coastguard Worker #include <map>
15*635a8641SAndroid Build Coastguard Worker #include <queue>
16*635a8641SAndroid Build Coastguard Worker #include <set>
17*635a8641SAndroid Build Coastguard Worker #include <stack>
18*635a8641SAndroid Build Coastguard Worker #include <string>
19*635a8641SAndroid Build Coastguard Worker #include <type_traits>
20*635a8641SAndroid Build Coastguard Worker #include <unordered_map>
21*635a8641SAndroid Build Coastguard Worker #include <unordered_set>
22*635a8641SAndroid Build Coastguard Worker #include <vector>
23*635a8641SAndroid Build Coastguard Worker
24*635a8641SAndroid Build Coastguard Worker #include "base/containers/queue.h"
25*635a8641SAndroid Build Coastguard Worker #include "base/strings/string16.h"
26*635a8641SAndroid Build Coastguard Worker #include "base/strings/utf_string_conversions.h"
27*635a8641SAndroid Build Coastguard Worker #include "testing/gmock/include/gmock/gmock.h"
28*635a8641SAndroid Build Coastguard Worker #include "testing/gtest/include/gtest/gtest.h"
29*635a8641SAndroid Build Coastguard Worker
30*635a8641SAndroid Build Coastguard Worker namespace {
31*635a8641SAndroid Build Coastguard Worker
32*635a8641SAndroid Build Coastguard Worker // Used as test case to ensure the various base::STLXxx functions don't require
33*635a8641SAndroid Build Coastguard Worker // more than operators "<" and "==" on values stored in containers.
34*635a8641SAndroid Build Coastguard Worker class ComparableValue {
35*635a8641SAndroid Build Coastguard Worker public:
ComparableValue(int value)36*635a8641SAndroid Build Coastguard Worker explicit ComparableValue(int value) : value_(value) {}
37*635a8641SAndroid Build Coastguard Worker
operator ==(const ComparableValue & rhs) const38*635a8641SAndroid Build Coastguard Worker bool operator==(const ComparableValue& rhs) const {
39*635a8641SAndroid Build Coastguard Worker return value_ == rhs.value_;
40*635a8641SAndroid Build Coastguard Worker }
41*635a8641SAndroid Build Coastguard Worker
operator <(const ComparableValue & rhs) const42*635a8641SAndroid Build Coastguard Worker bool operator<(const ComparableValue& rhs) const {
43*635a8641SAndroid Build Coastguard Worker return value_ < rhs.value_;
44*635a8641SAndroid Build Coastguard Worker }
45*635a8641SAndroid Build Coastguard Worker
46*635a8641SAndroid Build Coastguard Worker private:
47*635a8641SAndroid Build Coastguard Worker int value_;
48*635a8641SAndroid Build Coastguard Worker };
49*635a8641SAndroid Build Coastguard Worker
50*635a8641SAndroid Build Coastguard Worker template <typename Container>
RunEraseTest()51*635a8641SAndroid Build Coastguard Worker void RunEraseTest() {
52*635a8641SAndroid Build Coastguard Worker const std::pair<Container, Container> test_data[] = {
53*635a8641SAndroid Build Coastguard Worker {Container(), Container()}, {{1, 2, 3}, {1, 3}}, {{1, 2, 3, 2}, {1, 3}}};
54*635a8641SAndroid Build Coastguard Worker
55*635a8641SAndroid Build Coastguard Worker for (auto test_case : test_data) {
56*635a8641SAndroid Build Coastguard Worker base::Erase(test_case.first, 2);
57*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(test_case.second, test_case.first);
58*635a8641SAndroid Build Coastguard Worker }
59*635a8641SAndroid Build Coastguard Worker }
60*635a8641SAndroid Build Coastguard Worker
61*635a8641SAndroid Build Coastguard Worker // This test is written for containers of std::pair<int, int> to support maps.
62*635a8641SAndroid Build Coastguard Worker template <typename Container>
RunEraseIfTest()63*635a8641SAndroid Build Coastguard Worker void RunEraseIfTest() {
64*635a8641SAndroid Build Coastguard Worker struct {
65*635a8641SAndroid Build Coastguard Worker Container input;
66*635a8641SAndroid Build Coastguard Worker Container erase_even;
67*635a8641SAndroid Build Coastguard Worker Container erase_odd;
68*635a8641SAndroid Build Coastguard Worker } test_data[] = {
69*635a8641SAndroid Build Coastguard Worker {Container(), Container(), Container()},
70*635a8641SAndroid Build Coastguard Worker {{{1, 1}, {2, 2}, {3, 3}}, {{1, 1}, {3, 3}}, {{2, 2}}},
71*635a8641SAndroid Build Coastguard Worker {{{1, 1}, {2, 2}, {3, 3}, {4, 4}}, {{1, 1}, {3, 3}}, {{2, 2}, {4, 4}}},
72*635a8641SAndroid Build Coastguard Worker };
73*635a8641SAndroid Build Coastguard Worker
74*635a8641SAndroid Build Coastguard Worker for (auto test_case : test_data) {
75*635a8641SAndroid Build Coastguard Worker base::EraseIf(test_case.input, [](const std::pair<int, int>& elem) {
76*635a8641SAndroid Build Coastguard Worker return !(elem.first & 1);
77*635a8641SAndroid Build Coastguard Worker });
78*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(test_case.erase_even, test_case.input);
79*635a8641SAndroid Build Coastguard Worker }
80*635a8641SAndroid Build Coastguard Worker
81*635a8641SAndroid Build Coastguard Worker for (auto test_case : test_data) {
82*635a8641SAndroid Build Coastguard Worker base::EraseIf(test_case.input, [](const std::pair<int, int>& elem) {
83*635a8641SAndroid Build Coastguard Worker return elem.first & 1;
84*635a8641SAndroid Build Coastguard Worker });
85*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(test_case.erase_odd, test_case.input);
86*635a8641SAndroid Build Coastguard Worker }
87*635a8641SAndroid Build Coastguard Worker }
88*635a8641SAndroid Build Coastguard Worker
89*635a8641SAndroid Build Coastguard Worker struct CustomIntHash {
operator ()__anone76cd2580111::CustomIntHash90*635a8641SAndroid Build Coastguard Worker size_t operator()(int elem) const { return std::hash<int>()(elem) + 1; }
91*635a8641SAndroid Build Coastguard Worker };
92*635a8641SAndroid Build Coastguard Worker
93*635a8641SAndroid Build Coastguard Worker struct HashByFirst {
operator ()__anone76cd2580111::HashByFirst94*635a8641SAndroid Build Coastguard Worker size_t operator()(const std::pair<int, int>& elem) const {
95*635a8641SAndroid Build Coastguard Worker return std::hash<int>()(elem.first);
96*635a8641SAndroid Build Coastguard Worker }
97*635a8641SAndroid Build Coastguard Worker };
98*635a8641SAndroid Build Coastguard Worker
99*635a8641SAndroid Build Coastguard Worker } // namespace
100*635a8641SAndroid Build Coastguard Worker
101*635a8641SAndroid Build Coastguard Worker namespace base {
102*635a8641SAndroid Build Coastguard Worker namespace {
103*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,Size)104*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, Size) {
105*635a8641SAndroid Build Coastguard Worker {
106*635a8641SAndroid Build Coastguard Worker std::vector<int> vector = {1, 2, 3, 4, 5};
107*635a8641SAndroid Build Coastguard Worker static_assert(
108*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(base::size(vector)),
109*635a8641SAndroid Build Coastguard Worker decltype(vector.size())>::value,
110*635a8641SAndroid Build Coastguard Worker "base::size(vector) should have the same type as vector.size()");
111*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(vector.size(), base::size(vector));
112*635a8641SAndroid Build Coastguard Worker }
113*635a8641SAndroid Build Coastguard Worker
114*635a8641SAndroid Build Coastguard Worker {
115*635a8641SAndroid Build Coastguard Worker std::string empty_str;
116*635a8641SAndroid Build Coastguard Worker static_assert(
117*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(base::size(empty_str)),
118*635a8641SAndroid Build Coastguard Worker decltype(empty_str.size())>::value,
119*635a8641SAndroid Build Coastguard Worker "base::size(empty_str) should have the same type as empty_str.size()");
120*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(0u, base::size(empty_str));
121*635a8641SAndroid Build Coastguard Worker }
122*635a8641SAndroid Build Coastguard Worker
123*635a8641SAndroid Build Coastguard Worker {
124*635a8641SAndroid Build Coastguard Worker std::array<int, 4> array = {{1, 2, 3, 4}};
125*635a8641SAndroid Build Coastguard Worker static_assert(
126*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(base::size(array)),
127*635a8641SAndroid Build Coastguard Worker decltype(array.size())>::value,
128*635a8641SAndroid Build Coastguard Worker "base::size(array) should have the same type as array.size()");
129*635a8641SAndroid Build Coastguard Worker static_assert(base::size(array) == array.size(),
130*635a8641SAndroid Build Coastguard Worker "base::size(array) should be equal to array.size()");
131*635a8641SAndroid Build Coastguard Worker }
132*635a8641SAndroid Build Coastguard Worker
133*635a8641SAndroid Build Coastguard Worker {
134*635a8641SAndroid Build Coastguard Worker int array[] = {1, 2, 3};
135*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<size_t, decltype(base::size(array))>::value,
136*635a8641SAndroid Build Coastguard Worker "base::size(array) should be of type size_t");
137*635a8641SAndroid Build Coastguard Worker static_assert(3u == base::size(array), "base::size(array) should be 3");
138*635a8641SAndroid Build Coastguard Worker }
139*635a8641SAndroid Build Coastguard Worker }
140*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,Empty)141*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, Empty) {
142*635a8641SAndroid Build Coastguard Worker {
143*635a8641SAndroid Build Coastguard Worker std::vector<int> vector;
144*635a8641SAndroid Build Coastguard Worker static_assert(
145*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(base::empty(vector)),
146*635a8641SAndroid Build Coastguard Worker decltype(vector.empty())>::value,
147*635a8641SAndroid Build Coastguard Worker "base::empty(vector) should have the same type as vector.empty()");
148*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(vector.empty(), base::empty(vector));
149*635a8641SAndroid Build Coastguard Worker }
150*635a8641SAndroid Build Coastguard Worker
151*635a8641SAndroid Build Coastguard Worker {
152*635a8641SAndroid Build Coastguard Worker std::array<int, 4> array = {{1, 2, 3, 4}};
153*635a8641SAndroid Build Coastguard Worker static_assert(
154*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(base::empty(array)),
155*635a8641SAndroid Build Coastguard Worker decltype(array.empty())>::value,
156*635a8641SAndroid Build Coastguard Worker "base::empty(array) should have the same type as array.empty()");
157*635a8641SAndroid Build Coastguard Worker static_assert(base::empty(array) == array.empty(),
158*635a8641SAndroid Build Coastguard Worker "base::empty(array) should be equal to array.empty()");
159*635a8641SAndroid Build Coastguard Worker }
160*635a8641SAndroid Build Coastguard Worker
161*635a8641SAndroid Build Coastguard Worker {
162*635a8641SAndroid Build Coastguard Worker int array[] = {1, 2, 3};
163*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<bool, decltype(base::empty(array))>::value,
164*635a8641SAndroid Build Coastguard Worker "base::empty(array) should be of type bool");
165*635a8641SAndroid Build Coastguard Worker static_assert(!base::empty(array), "base::empty(array) should be false");
166*635a8641SAndroid Build Coastguard Worker }
167*635a8641SAndroid Build Coastguard Worker
168*635a8641SAndroid Build Coastguard Worker {
169*635a8641SAndroid Build Coastguard Worker constexpr std::initializer_list<int> il;
170*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<bool, decltype(base::empty(il))>::value,
171*635a8641SAndroid Build Coastguard Worker "base::empty(il) should be of type bool");
172*635a8641SAndroid Build Coastguard Worker static_assert(base::empty(il), "base::empty(il) should be true");
173*635a8641SAndroid Build Coastguard Worker }
174*635a8641SAndroid Build Coastguard Worker }
175*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,Data)176*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, Data) {
177*635a8641SAndroid Build Coastguard Worker {
178*635a8641SAndroid Build Coastguard Worker std::vector<int> vector = {1, 2, 3, 4, 5};
179*635a8641SAndroid Build Coastguard Worker static_assert(
180*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(base::data(vector)),
181*635a8641SAndroid Build Coastguard Worker decltype(vector.data())>::value,
182*635a8641SAndroid Build Coastguard Worker "base::data(vector) should have the same type as vector.data()");
183*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(vector.data(), base::data(vector));
184*635a8641SAndroid Build Coastguard Worker }
185*635a8641SAndroid Build Coastguard Worker
186*635a8641SAndroid Build Coastguard Worker {
187*635a8641SAndroid Build Coastguard Worker const std::string cstr = "const string";
188*635a8641SAndroid Build Coastguard Worker static_assert(
189*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(base::data(cstr)), decltype(cstr.data())>::value,
190*635a8641SAndroid Build Coastguard Worker "base::data(cstr) should have the same type as cstr.data()");
191*635a8641SAndroid Build Coastguard Worker
192*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(cstr.data(), base::data(cstr));
193*635a8641SAndroid Build Coastguard Worker }
194*635a8641SAndroid Build Coastguard Worker
195*635a8641SAndroid Build Coastguard Worker {
196*635a8641SAndroid Build Coastguard Worker std::string str = "mutable string";
197*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<decltype(base::data(str)), char*>::value,
198*635a8641SAndroid Build Coastguard Worker "base::data(str) should be of type char*");
199*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(str.data(), base::data(str));
200*635a8641SAndroid Build Coastguard Worker }
201*635a8641SAndroid Build Coastguard Worker
202*635a8641SAndroid Build Coastguard Worker {
203*635a8641SAndroid Build Coastguard Worker std::string empty_str;
204*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<decltype(base::data(empty_str)), char*>::value,
205*635a8641SAndroid Build Coastguard Worker "base::data(empty_str) should be of type char*");
206*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(empty_str.data(), base::data(empty_str));
207*635a8641SAndroid Build Coastguard Worker }
208*635a8641SAndroid Build Coastguard Worker
209*635a8641SAndroid Build Coastguard Worker {
210*635a8641SAndroid Build Coastguard Worker std::array<int, 4> array = {{1, 2, 3, 4}};
211*635a8641SAndroid Build Coastguard Worker static_assert(
212*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(base::data(array)),
213*635a8641SAndroid Build Coastguard Worker decltype(array.data())>::value,
214*635a8641SAndroid Build Coastguard Worker "base::data(array) should have the same type as array.data()");
215*635a8641SAndroid Build Coastguard Worker // std::array::data() is not constexpr prior to C++17, hence the runtime
216*635a8641SAndroid Build Coastguard Worker // check.
217*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(array.data(), base::data(array));
218*635a8641SAndroid Build Coastguard Worker }
219*635a8641SAndroid Build Coastguard Worker
220*635a8641SAndroid Build Coastguard Worker {
221*635a8641SAndroid Build Coastguard Worker constexpr int array[] = {1, 2, 3};
222*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<const int*, decltype(base::data(array))>::value,
223*635a8641SAndroid Build Coastguard Worker "base::data(array) should be of type const int*");
224*635a8641SAndroid Build Coastguard Worker static_assert(array == base::data(array),
225*635a8641SAndroid Build Coastguard Worker "base::data(array) should be array");
226*635a8641SAndroid Build Coastguard Worker }
227*635a8641SAndroid Build Coastguard Worker
228*635a8641SAndroid Build Coastguard Worker {
229*635a8641SAndroid Build Coastguard Worker constexpr std::initializer_list<int> il;
230*635a8641SAndroid Build Coastguard Worker static_assert(
231*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(il.begin()), decltype(base::data(il))>::value,
232*635a8641SAndroid Build Coastguard Worker "base::data(il) should have the same type as il.begin()");
233*635a8641SAndroid Build Coastguard Worker static_assert(il.begin() == base::data(il),
234*635a8641SAndroid Build Coastguard Worker "base::data(il) should be equal to il.begin()");
235*635a8641SAndroid Build Coastguard Worker }
236*635a8641SAndroid Build Coastguard Worker }
237*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,GetUnderlyingContainer)238*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, GetUnderlyingContainer) {
239*635a8641SAndroid Build Coastguard Worker {
240*635a8641SAndroid Build Coastguard Worker std::queue<int> queue({1, 2, 3, 4, 5});
241*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<decltype(GetUnderlyingContainer(queue)),
242*635a8641SAndroid Build Coastguard Worker const std::deque<int>&>::value,
243*635a8641SAndroid Build Coastguard Worker "GetUnderlyingContainer(queue) should be of type deque");
244*635a8641SAndroid Build Coastguard Worker EXPECT_THAT(GetUnderlyingContainer(queue),
245*635a8641SAndroid Build Coastguard Worker testing::ElementsAre(1, 2, 3, 4, 5));
246*635a8641SAndroid Build Coastguard Worker }
247*635a8641SAndroid Build Coastguard Worker
248*635a8641SAndroid Build Coastguard Worker {
249*635a8641SAndroid Build Coastguard Worker std::queue<int> queue;
250*635a8641SAndroid Build Coastguard Worker EXPECT_THAT(GetUnderlyingContainer(queue), testing::ElementsAre());
251*635a8641SAndroid Build Coastguard Worker }
252*635a8641SAndroid Build Coastguard Worker
253*635a8641SAndroid Build Coastguard Worker {
254*635a8641SAndroid Build Coastguard Worker base::queue<int> queue({1, 2, 3, 4, 5});
255*635a8641SAndroid Build Coastguard Worker static_assert(
256*635a8641SAndroid Build Coastguard Worker std::is_same<decltype(GetUnderlyingContainer(queue)),
257*635a8641SAndroid Build Coastguard Worker const base::circular_deque<int>&>::value,
258*635a8641SAndroid Build Coastguard Worker "GetUnderlyingContainer(queue) should be of type circular_deque");
259*635a8641SAndroid Build Coastguard Worker EXPECT_THAT(GetUnderlyingContainer(queue),
260*635a8641SAndroid Build Coastguard Worker testing::ElementsAre(1, 2, 3, 4, 5));
261*635a8641SAndroid Build Coastguard Worker }
262*635a8641SAndroid Build Coastguard Worker
263*635a8641SAndroid Build Coastguard Worker {
264*635a8641SAndroid Build Coastguard Worker std::vector<int> values = {1, 2, 3, 4, 5};
265*635a8641SAndroid Build Coastguard Worker std::priority_queue<int> queue(values.begin(), values.end());
266*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<decltype(GetUnderlyingContainer(queue)),
267*635a8641SAndroid Build Coastguard Worker const std::vector<int>&>::value,
268*635a8641SAndroid Build Coastguard Worker "GetUnderlyingContainer(queue) should be of type vector");
269*635a8641SAndroid Build Coastguard Worker EXPECT_THAT(GetUnderlyingContainer(queue),
270*635a8641SAndroid Build Coastguard Worker testing::UnorderedElementsAre(1, 2, 3, 4, 5));
271*635a8641SAndroid Build Coastguard Worker }
272*635a8641SAndroid Build Coastguard Worker
273*635a8641SAndroid Build Coastguard Worker {
274*635a8641SAndroid Build Coastguard Worker std::stack<int> stack({1, 2, 3, 4, 5});
275*635a8641SAndroid Build Coastguard Worker static_assert(std::is_same<decltype(GetUnderlyingContainer(stack)),
276*635a8641SAndroid Build Coastguard Worker const std::deque<int>&>::value,
277*635a8641SAndroid Build Coastguard Worker "GetUnderlyingContainer(stack) should be of type deque");
278*635a8641SAndroid Build Coastguard Worker EXPECT_THAT(GetUnderlyingContainer(stack),
279*635a8641SAndroid Build Coastguard Worker testing::ElementsAre(1, 2, 3, 4, 5));
280*635a8641SAndroid Build Coastguard Worker }
281*635a8641SAndroid Build Coastguard Worker }
282*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,STLIsSorted)283*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, STLIsSorted) {
284*635a8641SAndroid Build Coastguard Worker {
285*635a8641SAndroid Build Coastguard Worker std::set<int> set;
286*635a8641SAndroid Build Coastguard Worker set.insert(24);
287*635a8641SAndroid Build Coastguard Worker set.insert(1);
288*635a8641SAndroid Build Coastguard Worker set.insert(12);
289*635a8641SAndroid Build Coastguard Worker EXPECT_TRUE(STLIsSorted(set));
290*635a8641SAndroid Build Coastguard Worker }
291*635a8641SAndroid Build Coastguard Worker
292*635a8641SAndroid Build Coastguard Worker {
293*635a8641SAndroid Build Coastguard Worker std::set<ComparableValue> set;
294*635a8641SAndroid Build Coastguard Worker set.insert(ComparableValue(24));
295*635a8641SAndroid Build Coastguard Worker set.insert(ComparableValue(1));
296*635a8641SAndroid Build Coastguard Worker set.insert(ComparableValue(12));
297*635a8641SAndroid Build Coastguard Worker EXPECT_TRUE(STLIsSorted(set));
298*635a8641SAndroid Build Coastguard Worker }
299*635a8641SAndroid Build Coastguard Worker
300*635a8641SAndroid Build Coastguard Worker {
301*635a8641SAndroid Build Coastguard Worker std::vector<int> vector;
302*635a8641SAndroid Build Coastguard Worker vector.push_back(1);
303*635a8641SAndroid Build Coastguard Worker vector.push_back(1);
304*635a8641SAndroid Build Coastguard Worker vector.push_back(4);
305*635a8641SAndroid Build Coastguard Worker vector.push_back(64);
306*635a8641SAndroid Build Coastguard Worker vector.push_back(12432);
307*635a8641SAndroid Build Coastguard Worker EXPECT_TRUE(STLIsSorted(vector));
308*635a8641SAndroid Build Coastguard Worker vector.back() = 1;
309*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(STLIsSorted(vector));
310*635a8641SAndroid Build Coastguard Worker }
311*635a8641SAndroid Build Coastguard Worker }
312*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,STLSetDifference)313*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, STLSetDifference) {
314*635a8641SAndroid Build Coastguard Worker std::set<int> a1;
315*635a8641SAndroid Build Coastguard Worker a1.insert(1);
316*635a8641SAndroid Build Coastguard Worker a1.insert(2);
317*635a8641SAndroid Build Coastguard Worker a1.insert(3);
318*635a8641SAndroid Build Coastguard Worker a1.insert(4);
319*635a8641SAndroid Build Coastguard Worker
320*635a8641SAndroid Build Coastguard Worker std::set<int> a2;
321*635a8641SAndroid Build Coastguard Worker a2.insert(3);
322*635a8641SAndroid Build Coastguard Worker a2.insert(4);
323*635a8641SAndroid Build Coastguard Worker a2.insert(5);
324*635a8641SAndroid Build Coastguard Worker a2.insert(6);
325*635a8641SAndroid Build Coastguard Worker a2.insert(7);
326*635a8641SAndroid Build Coastguard Worker
327*635a8641SAndroid Build Coastguard Worker {
328*635a8641SAndroid Build Coastguard Worker std::set<int> difference;
329*635a8641SAndroid Build Coastguard Worker difference.insert(1);
330*635a8641SAndroid Build Coastguard Worker difference.insert(2);
331*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(difference, STLSetDifference<std::set<int> >(a1, a2));
332*635a8641SAndroid Build Coastguard Worker }
333*635a8641SAndroid Build Coastguard Worker
334*635a8641SAndroid Build Coastguard Worker {
335*635a8641SAndroid Build Coastguard Worker std::set<int> difference;
336*635a8641SAndroid Build Coastguard Worker difference.insert(5);
337*635a8641SAndroid Build Coastguard Worker difference.insert(6);
338*635a8641SAndroid Build Coastguard Worker difference.insert(7);
339*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(difference, STLSetDifference<std::set<int> >(a2, a1));
340*635a8641SAndroid Build Coastguard Worker }
341*635a8641SAndroid Build Coastguard Worker
342*635a8641SAndroid Build Coastguard Worker {
343*635a8641SAndroid Build Coastguard Worker std::vector<int> difference;
344*635a8641SAndroid Build Coastguard Worker difference.push_back(1);
345*635a8641SAndroid Build Coastguard Worker difference.push_back(2);
346*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(difference, STLSetDifference<std::vector<int> >(a1, a2));
347*635a8641SAndroid Build Coastguard Worker }
348*635a8641SAndroid Build Coastguard Worker
349*635a8641SAndroid Build Coastguard Worker {
350*635a8641SAndroid Build Coastguard Worker std::vector<int> difference;
351*635a8641SAndroid Build Coastguard Worker difference.push_back(5);
352*635a8641SAndroid Build Coastguard Worker difference.push_back(6);
353*635a8641SAndroid Build Coastguard Worker difference.push_back(7);
354*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(difference, STLSetDifference<std::vector<int> >(a2, a1));
355*635a8641SAndroid Build Coastguard Worker }
356*635a8641SAndroid Build Coastguard Worker }
357*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,STLSetUnion)358*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, STLSetUnion) {
359*635a8641SAndroid Build Coastguard Worker std::set<int> a1;
360*635a8641SAndroid Build Coastguard Worker a1.insert(1);
361*635a8641SAndroid Build Coastguard Worker a1.insert(2);
362*635a8641SAndroid Build Coastguard Worker a1.insert(3);
363*635a8641SAndroid Build Coastguard Worker a1.insert(4);
364*635a8641SAndroid Build Coastguard Worker
365*635a8641SAndroid Build Coastguard Worker std::set<int> a2;
366*635a8641SAndroid Build Coastguard Worker a2.insert(3);
367*635a8641SAndroid Build Coastguard Worker a2.insert(4);
368*635a8641SAndroid Build Coastguard Worker a2.insert(5);
369*635a8641SAndroid Build Coastguard Worker a2.insert(6);
370*635a8641SAndroid Build Coastguard Worker a2.insert(7);
371*635a8641SAndroid Build Coastguard Worker
372*635a8641SAndroid Build Coastguard Worker {
373*635a8641SAndroid Build Coastguard Worker std::set<int> result;
374*635a8641SAndroid Build Coastguard Worker result.insert(1);
375*635a8641SAndroid Build Coastguard Worker result.insert(2);
376*635a8641SAndroid Build Coastguard Worker result.insert(3);
377*635a8641SAndroid Build Coastguard Worker result.insert(4);
378*635a8641SAndroid Build Coastguard Worker result.insert(5);
379*635a8641SAndroid Build Coastguard Worker result.insert(6);
380*635a8641SAndroid Build Coastguard Worker result.insert(7);
381*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(result, STLSetUnion<std::set<int> >(a1, a2));
382*635a8641SAndroid Build Coastguard Worker }
383*635a8641SAndroid Build Coastguard Worker
384*635a8641SAndroid Build Coastguard Worker {
385*635a8641SAndroid Build Coastguard Worker std::set<int> result;
386*635a8641SAndroid Build Coastguard Worker result.insert(1);
387*635a8641SAndroid Build Coastguard Worker result.insert(2);
388*635a8641SAndroid Build Coastguard Worker result.insert(3);
389*635a8641SAndroid Build Coastguard Worker result.insert(4);
390*635a8641SAndroid Build Coastguard Worker result.insert(5);
391*635a8641SAndroid Build Coastguard Worker result.insert(6);
392*635a8641SAndroid Build Coastguard Worker result.insert(7);
393*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(result, STLSetUnion<std::set<int> >(a2, a1));
394*635a8641SAndroid Build Coastguard Worker }
395*635a8641SAndroid Build Coastguard Worker
396*635a8641SAndroid Build Coastguard Worker {
397*635a8641SAndroid Build Coastguard Worker std::vector<int> result;
398*635a8641SAndroid Build Coastguard Worker result.push_back(1);
399*635a8641SAndroid Build Coastguard Worker result.push_back(2);
400*635a8641SAndroid Build Coastguard Worker result.push_back(3);
401*635a8641SAndroid Build Coastguard Worker result.push_back(4);
402*635a8641SAndroid Build Coastguard Worker result.push_back(5);
403*635a8641SAndroid Build Coastguard Worker result.push_back(6);
404*635a8641SAndroid Build Coastguard Worker result.push_back(7);
405*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(result, STLSetUnion<std::vector<int> >(a1, a2));
406*635a8641SAndroid Build Coastguard Worker }
407*635a8641SAndroid Build Coastguard Worker
408*635a8641SAndroid Build Coastguard Worker {
409*635a8641SAndroid Build Coastguard Worker std::vector<int> result;
410*635a8641SAndroid Build Coastguard Worker result.push_back(1);
411*635a8641SAndroid Build Coastguard Worker result.push_back(2);
412*635a8641SAndroid Build Coastguard Worker result.push_back(3);
413*635a8641SAndroid Build Coastguard Worker result.push_back(4);
414*635a8641SAndroid Build Coastguard Worker result.push_back(5);
415*635a8641SAndroid Build Coastguard Worker result.push_back(6);
416*635a8641SAndroid Build Coastguard Worker result.push_back(7);
417*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(result, STLSetUnion<std::vector<int> >(a2, a1));
418*635a8641SAndroid Build Coastguard Worker }
419*635a8641SAndroid Build Coastguard Worker }
420*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,STLSetIntersection)421*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, STLSetIntersection) {
422*635a8641SAndroid Build Coastguard Worker std::set<int> a1;
423*635a8641SAndroid Build Coastguard Worker a1.insert(1);
424*635a8641SAndroid Build Coastguard Worker a1.insert(2);
425*635a8641SAndroid Build Coastguard Worker a1.insert(3);
426*635a8641SAndroid Build Coastguard Worker a1.insert(4);
427*635a8641SAndroid Build Coastguard Worker
428*635a8641SAndroid Build Coastguard Worker std::set<int> a2;
429*635a8641SAndroid Build Coastguard Worker a2.insert(3);
430*635a8641SAndroid Build Coastguard Worker a2.insert(4);
431*635a8641SAndroid Build Coastguard Worker a2.insert(5);
432*635a8641SAndroid Build Coastguard Worker a2.insert(6);
433*635a8641SAndroid Build Coastguard Worker a2.insert(7);
434*635a8641SAndroid Build Coastguard Worker
435*635a8641SAndroid Build Coastguard Worker {
436*635a8641SAndroid Build Coastguard Worker std::set<int> result;
437*635a8641SAndroid Build Coastguard Worker result.insert(3);
438*635a8641SAndroid Build Coastguard Worker result.insert(4);
439*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(result, STLSetIntersection<std::set<int> >(a1, a2));
440*635a8641SAndroid Build Coastguard Worker }
441*635a8641SAndroid Build Coastguard Worker
442*635a8641SAndroid Build Coastguard Worker {
443*635a8641SAndroid Build Coastguard Worker std::set<int> result;
444*635a8641SAndroid Build Coastguard Worker result.insert(3);
445*635a8641SAndroid Build Coastguard Worker result.insert(4);
446*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(result, STLSetIntersection<std::set<int> >(a2, a1));
447*635a8641SAndroid Build Coastguard Worker }
448*635a8641SAndroid Build Coastguard Worker
449*635a8641SAndroid Build Coastguard Worker {
450*635a8641SAndroid Build Coastguard Worker std::vector<int> result;
451*635a8641SAndroid Build Coastguard Worker result.push_back(3);
452*635a8641SAndroid Build Coastguard Worker result.push_back(4);
453*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(result, STLSetIntersection<std::vector<int> >(a1, a2));
454*635a8641SAndroid Build Coastguard Worker }
455*635a8641SAndroid Build Coastguard Worker
456*635a8641SAndroid Build Coastguard Worker {
457*635a8641SAndroid Build Coastguard Worker std::vector<int> result;
458*635a8641SAndroid Build Coastguard Worker result.push_back(3);
459*635a8641SAndroid Build Coastguard Worker result.push_back(4);
460*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(result, STLSetIntersection<std::vector<int> >(a2, a1));
461*635a8641SAndroid Build Coastguard Worker }
462*635a8641SAndroid Build Coastguard Worker }
463*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,STLIncludes)464*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, STLIncludes) {
465*635a8641SAndroid Build Coastguard Worker std::set<int> a1;
466*635a8641SAndroid Build Coastguard Worker a1.insert(1);
467*635a8641SAndroid Build Coastguard Worker a1.insert(2);
468*635a8641SAndroid Build Coastguard Worker a1.insert(3);
469*635a8641SAndroid Build Coastguard Worker a1.insert(4);
470*635a8641SAndroid Build Coastguard Worker
471*635a8641SAndroid Build Coastguard Worker std::set<int> a2;
472*635a8641SAndroid Build Coastguard Worker a2.insert(3);
473*635a8641SAndroid Build Coastguard Worker a2.insert(4);
474*635a8641SAndroid Build Coastguard Worker
475*635a8641SAndroid Build Coastguard Worker std::set<int> a3;
476*635a8641SAndroid Build Coastguard Worker a3.insert(3);
477*635a8641SAndroid Build Coastguard Worker a3.insert(4);
478*635a8641SAndroid Build Coastguard Worker a3.insert(5);
479*635a8641SAndroid Build Coastguard Worker
480*635a8641SAndroid Build Coastguard Worker EXPECT_TRUE(STLIncludes<std::set<int> >(a1, a2));
481*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(STLIncludes<std::set<int> >(a1, a3));
482*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(STLIncludes<std::set<int> >(a2, a1));
483*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(STLIncludes<std::set<int> >(a2, a3));
484*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(STLIncludes<std::set<int> >(a3, a1));
485*635a8641SAndroid Build Coastguard Worker EXPECT_TRUE(STLIncludes<std::set<int> >(a3, a2));
486*635a8641SAndroid Build Coastguard Worker }
487*635a8641SAndroid Build Coastguard Worker
TEST(Erase,String)488*635a8641SAndroid Build Coastguard Worker TEST(Erase, String) {
489*635a8641SAndroid Build Coastguard Worker const std::pair<std::string, std::string> test_data[] = {
490*635a8641SAndroid Build Coastguard Worker {"", ""}, {"abc", "bc"}, {"abca", "bc"},
491*635a8641SAndroid Build Coastguard Worker };
492*635a8641SAndroid Build Coastguard Worker
493*635a8641SAndroid Build Coastguard Worker for (auto test_case : test_data) {
494*635a8641SAndroid Build Coastguard Worker Erase(test_case.first, 'a');
495*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(test_case.second, test_case.first);
496*635a8641SAndroid Build Coastguard Worker }
497*635a8641SAndroid Build Coastguard Worker
498*635a8641SAndroid Build Coastguard Worker for (auto test_case : test_data) {
499*635a8641SAndroid Build Coastguard Worker EraseIf(test_case.first, [](char elem) { return elem < 'b'; });
500*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(test_case.second, test_case.first);
501*635a8641SAndroid Build Coastguard Worker }
502*635a8641SAndroid Build Coastguard Worker }
503*635a8641SAndroid Build Coastguard Worker
TEST(Erase,String16)504*635a8641SAndroid Build Coastguard Worker TEST(Erase, String16) {
505*635a8641SAndroid Build Coastguard Worker std::pair<base::string16, base::string16> test_data[] = {
506*635a8641SAndroid Build Coastguard Worker {base::string16(), base::string16()},
507*635a8641SAndroid Build Coastguard Worker {UTF8ToUTF16("abc"), UTF8ToUTF16("bc")},
508*635a8641SAndroid Build Coastguard Worker {UTF8ToUTF16("abca"), UTF8ToUTF16("bc")},
509*635a8641SAndroid Build Coastguard Worker };
510*635a8641SAndroid Build Coastguard Worker
511*635a8641SAndroid Build Coastguard Worker const base::string16 letters = UTF8ToUTF16("ab");
512*635a8641SAndroid Build Coastguard Worker for (auto test_case : test_data) {
513*635a8641SAndroid Build Coastguard Worker Erase(test_case.first, letters[0]);
514*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(test_case.second, test_case.first);
515*635a8641SAndroid Build Coastguard Worker }
516*635a8641SAndroid Build Coastguard Worker
517*635a8641SAndroid Build Coastguard Worker for (auto test_case : test_data) {
518*635a8641SAndroid Build Coastguard Worker EraseIf(test_case.first, [&](short elem) { return elem < letters[1]; });
519*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(test_case.second, test_case.first);
520*635a8641SAndroid Build Coastguard Worker }
521*635a8641SAndroid Build Coastguard Worker }
522*635a8641SAndroid Build Coastguard Worker
TEST(Erase,Deque)523*635a8641SAndroid Build Coastguard Worker TEST(Erase, Deque) {
524*635a8641SAndroid Build Coastguard Worker RunEraseTest<std::deque<int>>();
525*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::deque<std::pair<int, int>>>();
526*635a8641SAndroid Build Coastguard Worker }
527*635a8641SAndroid Build Coastguard Worker
TEST(Erase,Vector)528*635a8641SAndroid Build Coastguard Worker TEST(Erase, Vector) {
529*635a8641SAndroid Build Coastguard Worker RunEraseTest<std::vector<int>>();
530*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::vector<std::pair<int, int>>>();
531*635a8641SAndroid Build Coastguard Worker }
532*635a8641SAndroid Build Coastguard Worker
TEST(Erase,ForwardList)533*635a8641SAndroid Build Coastguard Worker TEST(Erase, ForwardList) {
534*635a8641SAndroid Build Coastguard Worker RunEraseTest<std::forward_list<int>>();
535*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::forward_list<std::pair<int, int>>>();
536*635a8641SAndroid Build Coastguard Worker }
537*635a8641SAndroid Build Coastguard Worker
TEST(Erase,List)538*635a8641SAndroid Build Coastguard Worker TEST(Erase, List) {
539*635a8641SAndroid Build Coastguard Worker RunEraseTest<std::list<int>>();
540*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::list<std::pair<int, int>>>();
541*635a8641SAndroid Build Coastguard Worker }
542*635a8641SAndroid Build Coastguard Worker
TEST(Erase,Map)543*635a8641SAndroid Build Coastguard Worker TEST(Erase, Map) {
544*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::map<int, int>>();
545*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::map<int, int, std::greater<int>>>();
546*635a8641SAndroid Build Coastguard Worker }
547*635a8641SAndroid Build Coastguard Worker
TEST(Erase,Multimap)548*635a8641SAndroid Build Coastguard Worker TEST(Erase, Multimap) {
549*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::multimap<int, int>>();
550*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::multimap<int, int, std::greater<int>>>();
551*635a8641SAndroid Build Coastguard Worker }
552*635a8641SAndroid Build Coastguard Worker
TEST(Erase,Set)553*635a8641SAndroid Build Coastguard Worker TEST(Erase, Set) {
554*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::set<std::pair<int, int>>>();
555*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<
556*635a8641SAndroid Build Coastguard Worker std::set<std::pair<int, int>, std::greater<std::pair<int, int>>>>();
557*635a8641SAndroid Build Coastguard Worker }
558*635a8641SAndroid Build Coastguard Worker
TEST(Erase,Multiset)559*635a8641SAndroid Build Coastguard Worker TEST(Erase, Multiset) {
560*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::multiset<std::pair<int, int>>>();
561*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<
562*635a8641SAndroid Build Coastguard Worker std::multiset<std::pair<int, int>, std::greater<std::pair<int, int>>>>();
563*635a8641SAndroid Build Coastguard Worker }
564*635a8641SAndroid Build Coastguard Worker
TEST(Erase,UnorderedMap)565*635a8641SAndroid Build Coastguard Worker TEST(Erase, UnorderedMap) {
566*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::unordered_map<int, int>>();
567*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::unordered_map<int, int, CustomIntHash>>();
568*635a8641SAndroid Build Coastguard Worker }
569*635a8641SAndroid Build Coastguard Worker
TEST(Erase,UnorderedMultimap)570*635a8641SAndroid Build Coastguard Worker TEST(Erase, UnorderedMultimap) {
571*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::unordered_multimap<int, int>>();
572*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::unordered_multimap<int, int, CustomIntHash>>();
573*635a8641SAndroid Build Coastguard Worker }
574*635a8641SAndroid Build Coastguard Worker
TEST(Erase,UnorderedSet)575*635a8641SAndroid Build Coastguard Worker TEST(Erase, UnorderedSet) {
576*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::unordered_set<std::pair<int, int>, HashByFirst>>();
577*635a8641SAndroid Build Coastguard Worker }
578*635a8641SAndroid Build Coastguard Worker
TEST(Erase,UnorderedMultiset)579*635a8641SAndroid Build Coastguard Worker TEST(Erase, UnorderedMultiset) {
580*635a8641SAndroid Build Coastguard Worker RunEraseIfTest<std::unordered_multiset<std::pair<int, int>, HashByFirst>>();
581*635a8641SAndroid Build Coastguard Worker }
582*635a8641SAndroid Build Coastguard Worker
TEST(Erase,IsNotIn)583*635a8641SAndroid Build Coastguard Worker TEST(Erase, IsNotIn) {
584*635a8641SAndroid Build Coastguard Worker // Should keep both '2' but only one '4', like std::set_intersection.
585*635a8641SAndroid Build Coastguard Worker std::vector<int> lhs = {0, 2, 2, 4, 4, 4, 6, 8, 10};
586*635a8641SAndroid Build Coastguard Worker std::vector<int> rhs = {1, 2, 2, 4, 5, 6, 7};
587*635a8641SAndroid Build Coastguard Worker std::vector<int> expected = {2, 2, 4, 6};
588*635a8641SAndroid Build Coastguard Worker EraseIf(lhs, IsNotIn<std::vector<int>>(rhs));
589*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(expected, lhs);
590*635a8641SAndroid Build Coastguard Worker }
591*635a8641SAndroid Build Coastguard Worker
TEST(ContainsValue,OrdinaryArrays)592*635a8641SAndroid Build Coastguard Worker TEST(ContainsValue, OrdinaryArrays) {
593*635a8641SAndroid Build Coastguard Worker const char allowed_chars[] = {'a', 'b', 'c', 'd'};
594*635a8641SAndroid Build Coastguard Worker EXPECT_TRUE(ContainsValue(allowed_chars, 'a'));
595*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(ContainsValue(allowed_chars, 'z'));
596*635a8641SAndroid Build Coastguard Worker EXPECT_FALSE(ContainsValue(allowed_chars, 0));
597*635a8641SAndroid Build Coastguard Worker
598*635a8641SAndroid Build Coastguard Worker const char allowed_chars_including_nul[] = "abcd";
599*635a8641SAndroid Build Coastguard Worker EXPECT_TRUE(ContainsValue(allowed_chars_including_nul, 0));
600*635a8641SAndroid Build Coastguard Worker }
601*635a8641SAndroid Build Coastguard Worker
TEST(STLUtilTest,OptionalOrNullptr)602*635a8641SAndroid Build Coastguard Worker TEST(STLUtilTest, OptionalOrNullptr) {
603*635a8641SAndroid Build Coastguard Worker Optional<float> optional;
604*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(nullptr, base::OptionalOrNullptr(optional));
605*635a8641SAndroid Build Coastguard Worker
606*635a8641SAndroid Build Coastguard Worker optional = 0.1f;
607*635a8641SAndroid Build Coastguard Worker EXPECT_EQ(&optional.value(), base::OptionalOrNullptr(optional));
608*635a8641SAndroid Build Coastguard Worker EXPECT_NE(nullptr, base::OptionalOrNullptr(optional));
609*635a8641SAndroid Build Coastguard Worker }
610*635a8641SAndroid Build Coastguard Worker
611*635a8641SAndroid Build Coastguard Worker } // namespace
612*635a8641SAndroid Build Coastguard Worker } // namespace base
613