@@ -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) {
@@ -657,6 +729,15 @@ TEST(MutatingTest, SwapRanges) {
657729 absl::c_swap_ranges (odds, evens);
658730 EXPECT_THAT (odds, ElementsAre (1 , 3 , 5 ));
659731 EXPECT_THAT (evens, ElementsAre (2 , 4 , 6 ));
732+
733+ odds.pop_back ();
734+ absl::c_swap_ranges (odds, evens);
735+ EXPECT_THAT (odds, ElementsAre (2 , 4 ));
736+ EXPECT_THAT (evens, ElementsAre (1 , 3 , 6 ));
737+
738+ absl::c_swap_ranges (evens, odds);
739+ EXPECT_THAT (odds, ElementsAre (1 , 3 ));
740+ EXPECT_THAT (evens, ElementsAre (2 , 4 , 6 ));
660741}
661742
662743TEST_F (NonMutatingTest, Transform) {
@@ -671,6 +752,20 @@ TEST_F(NonMutatingTest, Transform) {
671752 EXPECT_EQ (std::vector<int >({1 , 5 , 4 }), z);
672753 *end = 7 ;
673754 EXPECT_EQ (std::vector<int >({1 , 5 , 4 , 7 }), z);
755+
756+ z.clear ();
757+ y.pop_back ();
758+ end = absl::c_transform (x, y, std::back_inserter (z), std::plus<int >());
759+ EXPECT_EQ (std::vector<int >({1 , 5 }), z);
760+ *end = 7 ;
761+ EXPECT_EQ (std::vector<int >({1 , 5 , 7 }), z);
762+
763+ z.clear ();
764+ std::swap (x, y);
765+ end = absl::c_transform (x, y, std::back_inserter (z), std::plus<int >());
766+ EXPECT_EQ (std::vector<int >({1 , 5 }), z);
767+ *end = 7 ;
768+ EXPECT_EQ (std::vector<int >({1 , 5 , 7 }), z);
674769}
675770
676771TEST (MutatingTest, Replace) {
@@ -736,21 +831,19 @@ MATCHER_P2(IsElement, key, value, "") {
736831TEST (MutatingTest, StableSort) {
737832 std::vector<Element> test_vector = {{1 , 1 }, {2 , 1 }, {2 , 0 }, {1 , 0 }, {2 , 2 }};
738833 absl::c_stable_sort (test_vector);
739- EXPECT_THAT (
740- test_vector,
741- ElementsAre (IsElement (1 , 1 ), IsElement (1 , 0 ), IsElement (2 , 1 ),
742- IsElement (2 , 0 ), IsElement (2 , 2 )));
834+ EXPECT_THAT (test_vector,
835+ ElementsAre (IsElement (1 , 1 ), IsElement (1 , 0 ), IsElement (2 , 1 ),
836+ IsElement (2 , 0 ), IsElement (2 , 2 )));
743837}
744838
745839TEST (MutatingTest, StableSortWithPredicate) {
746840 std::vector<Element> test_vector = {{1 , 1 }, {2 , 1 }, {2 , 0 }, {1 , 0 }, {2 , 2 }};
747841 absl::c_stable_sort (test_vector, [](const Element& e1 , const Element& e2 ) {
748842 return e2 < e1 ;
749843 });
750- EXPECT_THAT (
751- test_vector,
752- ElementsAre (IsElement (2 , 1 ), IsElement (2 , 0 ), IsElement (2 , 2 ),
753- IsElement (1 , 1 ), IsElement (1 , 0 )));
844+ EXPECT_THAT (test_vector,
845+ ElementsAre (IsElement (2 , 1 ), IsElement (2 , 0 ), IsElement (2 , 2 ),
846+ IsElement (1 , 1 ), IsElement (1 , 0 )));
754847}
755848
756849TEST (MutatingTest, ReplaceCopyIf) {
0 commit comments