@@ -57,9 +57,7 @@ class NonMutatingTest : public testing::Test {
5757};
5858
5959struct AccumulateCalls {
60- void operator ()(int value) {
61- calls.push_back (value);
62- }
60+ void operator ()(int value) { calls.push_back (value); }
6361 std::vector<int > calls;
6462};
6563
@@ -68,7 +66,6 @@ bool BinPredicate(int v1, int v2) { return v1 < v2; }
6866bool Equals (int v1, int v2) { return v1 == v2; }
6967bool IsOdd (int x) { return x % 2 != 0 ; }
7068
71-
7269TEST_F (NonMutatingTest, Distance) {
7370 EXPECT_EQ (container_.size (), absl::c_distance (container_));
7471 EXPECT_EQ (sequence_.size (), absl::c_distance (sequence_));
@@ -151,13 +148,90 @@ TEST_F(NonMutatingTest, CountIf) {
151148}
152149
153150TEST_F (NonMutatingTest, Mismatch) {
154- absl::c_mismatch (container_, sequence_);
155- absl::c_mismatch (sequence_, container_);
151+ // Testing necessary as absl::c_mismatch executes logic.
152+ {
153+ auto result = absl::c_mismatch (vector_, sequence_);
154+ EXPECT_EQ (result.first , vector_.end ());
155+ EXPECT_EQ (result.second , sequence_.end ());
156+ }
157+ {
158+ auto result = absl::c_mismatch (sequence_, vector_);
159+ EXPECT_EQ (result.first , sequence_.end ());
160+ EXPECT_EQ (result.second , vector_.end ());
161+ }
162+
163+ sequence_.back () = 5 ;
164+ {
165+ auto result = absl::c_mismatch (vector_, sequence_);
166+ EXPECT_EQ (result.first , std::prev (vector_.end ()));
167+ EXPECT_EQ (result.second , std::prev (sequence_.end ()));
168+ }
169+ {
170+ auto result = absl::c_mismatch (sequence_, vector_);
171+ EXPECT_EQ (result.first , std::prev (sequence_.end ()));
172+ EXPECT_EQ (result.second , std::prev (vector_.end ()));
173+ }
174+
175+ sequence_.pop_back ();
176+ {
177+ auto result = absl::c_mismatch (vector_, sequence_);
178+ EXPECT_EQ (result.first , std::prev (vector_.end ()));
179+ EXPECT_EQ (result.second , sequence_.end ());
180+ }
181+ {
182+ auto result = absl::c_mismatch (sequence_, vector_);
183+ EXPECT_EQ (result.first , sequence_.end ());
184+ EXPECT_EQ (result.second , std::prev (vector_.end ()));
185+ }
186+ {
187+ struct NoNotEquals {
188+ constexpr bool operator ==(NoNotEquals) const { return true ; }
189+ constexpr bool operator !=(NoNotEquals) const = delete ;
190+ };
191+ std::vector<NoNotEquals> first;
192+ std::list<NoNotEquals> second;
193+
194+ // Check this still compiles.
195+ absl::c_mismatch (first, second);
196+ }
156197}
157198
158199TEST_F (NonMutatingTest, MismatchWithPredicate) {
159- absl::c_mismatch (container_, sequence_, BinPredicate);
160- absl::c_mismatch (sequence_, container_, BinPredicate);
200+ // Testing necessary as absl::c_mismatch executes logic.
201+ {
202+ auto result = absl::c_mismatch (vector_, sequence_, BinPredicate);
203+ EXPECT_EQ (result.first , vector_.begin ());
204+ EXPECT_EQ (result.second , sequence_.begin ());
205+ }
206+ {
207+ auto result = absl::c_mismatch (sequence_, vector_, BinPredicate);
208+ EXPECT_EQ (result.first , sequence_.begin ());
209+ EXPECT_EQ (result.second , vector_.begin ());
210+ }
211+
212+ sequence_.front () = 0 ;
213+ {
214+ auto result = absl::c_mismatch (vector_, sequence_, BinPredicate);
215+ EXPECT_EQ (result.first , vector_.begin ());
216+ EXPECT_EQ (result.second , sequence_.begin ());
217+ }
218+ {
219+ auto result = absl::c_mismatch (sequence_, vector_, BinPredicate);
220+ EXPECT_EQ (result.first , std::next (sequence_.begin ()));
221+ EXPECT_EQ (result.second , std::next (vector_.begin ()));
222+ }
223+
224+ sequence_.clear ();
225+ {
226+ auto result = absl::c_mismatch (vector_, sequence_, BinPredicate);
227+ EXPECT_EQ (result.first , vector_.begin ());
228+ EXPECT_EQ (result.second , sequence_.end ());
229+ }
230+ {
231+ auto result = absl::c_mismatch (sequence_, vector_, BinPredicate);
232+ EXPECT_EQ (result.first , sequence_.end ());
233+ EXPECT_EQ (result.second , vector_.begin ());
234+ }
161235}
162236
163237TEST_F (NonMutatingTest, Equal) {
@@ -513,11 +587,9 @@ TEST_F(SortingTest, IsSortedUntil) {
513587TEST_F (SortingTest, NthElement) {
514588 std::vector<int > unsorted = {2 , 4 , 1 , 3 };
515589 absl::c_nth_element (unsorted, unsorted.begin () + 2 );
516- EXPECT_THAT (unsorted,
517- ElementsAre (Lt (3 ), Lt (3 ), 3 , Gt (3 )));
590+ EXPECT_THAT (unsorted, ElementsAre (Lt (3 ), Lt (3 ), 3 , Gt (3 )));
518591 absl::c_nth_element (unsorted, unsorted.begin () + 2 , std::greater<int >());
519- EXPECT_THAT (unsorted,
520- ElementsAre (Gt (2 ), Gt (2 ), 2 , Lt (2 )));
592+ EXPECT_THAT (unsorted, ElementsAre (Gt (2 ), Gt (2 ), 2 , Lt (2 )));
521593}
522594
523595TEST (MutatingTest, IsPartitioned) {
@@ -670,6 +742,15 @@ TEST(MutatingTest, SwapRanges) {
670742 absl::c_swap_ranges (odds, evens);
671743 EXPECT_THAT (odds, ElementsAre (1 , 3 , 5 ));
672744 EXPECT_THAT (evens, ElementsAre (2 , 4 , 6 ));
745+
746+ odds.pop_back ();
747+ absl::c_swap_ranges (odds, evens);
748+ EXPECT_THAT (odds, ElementsAre (2 , 4 ));
749+ EXPECT_THAT (evens, ElementsAre (1 , 3 , 6 ));
750+
751+ absl::c_swap_ranges (evens, odds);
752+ EXPECT_THAT (odds, ElementsAre (1 , 3 ));
753+ EXPECT_THAT (evens, ElementsAre (2 , 4 , 6 ));
673754}
674755
675756TEST_F (NonMutatingTest, Transform) {
@@ -684,6 +765,20 @@ TEST_F(NonMutatingTest, Transform) {
684765 EXPECT_EQ (std::vector<int >({1 , 5 , 4 }), z);
685766 *end = 7 ;
686767 EXPECT_EQ (std::vector<int >({1 , 5 , 4 , 7 }), z);
768+
769+ z.clear ();
770+ y.pop_back ();
771+ end = absl::c_transform (x, y, std::back_inserter (z), std::plus<int >());
772+ EXPECT_EQ (std::vector<int >({1 , 5 }), z);
773+ *end = 7 ;
774+ EXPECT_EQ (std::vector<int >({1 , 5 , 7 }), z);
775+
776+ z.clear ();
777+ std::swap (x, y);
778+ end = absl::c_transform (x, y, std::back_inserter (z), std::plus<int >());
779+ EXPECT_EQ (std::vector<int >({1 , 5 }), z);
780+ *end = 7 ;
781+ EXPECT_EQ (std::vector<int >({1 , 5 , 7 }), z);
687782}
688783
689784TEST (MutatingTest, Replace) {
@@ -749,21 +844,19 @@ MATCHER_P2(IsElement, key, value, "") {
749844TEST (MutatingTest, StableSort) {
750845 std::vector<Element> test_vector = {{1 , 1 }, {2 , 1 }, {2 , 0 }, {1 , 0 }, {2 , 2 }};
751846 absl::c_stable_sort (test_vector);
752- EXPECT_THAT (
753- test_vector,
754- ElementsAre (IsElement (1 , 1 ), IsElement (1 , 0 ), IsElement (2 , 1 ),
755- IsElement (2 , 0 ), IsElement (2 , 2 )));
847+ EXPECT_THAT (test_vector,
848+ ElementsAre (IsElement (1 , 1 ), IsElement (1 , 0 ), IsElement (2 , 1 ),
849+ IsElement (2 , 0 ), IsElement (2 , 2 )));
756850}
757851
758852TEST (MutatingTest, StableSortWithPredicate) {
759853 std::vector<Element> test_vector = {{1 , 1 }, {2 , 1 }, {2 , 0 }, {1 , 0 }, {2 , 2 }};
760854 absl::c_stable_sort (test_vector, [](const Element& e1 , const Element& e2 ) {
761855 return e2 < e1 ;
762856 });
763- EXPECT_THAT (
764- test_vector,
765- ElementsAre (IsElement (2 , 1 ), IsElement (2 , 0 ), IsElement (2 , 2 ),
766- IsElement (1 , 1 ), IsElement (1 , 0 )));
857+ EXPECT_THAT (test_vector,
858+ ElementsAre (IsElement (2 , 1 ), IsElement (2 , 0 ), IsElement (2 , 2 ),
859+ IsElement (1 , 1 ), IsElement (1 , 0 )));
767860}
768861
769862TEST (MutatingTest, ReplaceCopyIf) {
0 commit comments