@@ -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) {
@@ -519,11 +593,9 @@ TEST_F(SortingTest, IsSortedUntil) {
519593TEST_F (SortingTest, NthElement) {
520594 std::vector<int > unsorted = {2 , 4 , 1 , 3 };
521595 absl::c_nth_element (unsorted, unsorted.begin () + 2 );
522- EXPECT_THAT (unsorted,
523- ElementsAre (Lt (3 ), Lt (3 ), 3 , Gt (3 )));
596+ EXPECT_THAT (unsorted, ElementsAre (Lt (3 ), Lt (3 ), 3 , Gt (3 )));
524597 absl::c_nth_element (unsorted, unsorted.begin () + 2 , std::greater<int >());
525- EXPECT_THAT (unsorted,
526- ElementsAre (Gt (2 ), Gt (2 ), 2 , Lt (2 )));
598+ EXPECT_THAT (unsorted, ElementsAre (Gt (2 ), Gt (2 ), 2 , Lt (2 )));
527599}
528600
529601TEST (MutatingTest, IsPartitioned) {
@@ -676,6 +748,15 @@ TEST(MutatingTest, SwapRanges) {
676748 absl::c_swap_ranges (odds, evens);
677749 EXPECT_THAT (odds, ElementsAre (1 , 3 , 5 ));
678750 EXPECT_THAT (evens, ElementsAre (2 , 4 , 6 ));
751+
752+ odds.pop_back ();
753+ absl::c_swap_ranges (odds, evens);
754+ EXPECT_THAT (odds, ElementsAre (2 , 4 ));
755+ EXPECT_THAT (evens, ElementsAre (1 , 3 , 6 ));
756+
757+ absl::c_swap_ranges (evens, odds);
758+ EXPECT_THAT (odds, ElementsAre (1 , 3 ));
759+ EXPECT_THAT (evens, ElementsAre (2 , 4 , 6 ));
679760}
680761
681762TEST_F (NonMutatingTest, Transform) {
@@ -690,6 +771,20 @@ TEST_F(NonMutatingTest, Transform) {
690771 EXPECT_EQ (std::vector<int >({1 , 5 , 4 }), z);
691772 *end = 7 ;
692773 EXPECT_EQ (std::vector<int >({1 , 5 , 4 , 7 }), z);
774+
775+ z.clear ();
776+ y.pop_back ();
777+ end = absl::c_transform (x, y, std::back_inserter (z), std::plus<int >());
778+ EXPECT_EQ (std::vector<int >({1 , 5 }), z);
779+ *end = 7 ;
780+ EXPECT_EQ (std::vector<int >({1 , 5 , 7 }), z);
781+
782+ z.clear ();
783+ std::swap (x, y);
784+ end = absl::c_transform (x, y, std::back_inserter (z), std::plus<int >());
785+ EXPECT_EQ (std::vector<int >({1 , 5 }), z);
786+ *end = 7 ;
787+ EXPECT_EQ (std::vector<int >({1 , 5 , 7 }), z);
693788}
694789
695790TEST (MutatingTest, Replace) {
@@ -755,21 +850,19 @@ MATCHER_P2(IsElement, key, value, "") {
755850TEST (MutatingTest, StableSort) {
756851 std::vector<Element> test_vector = {{1 , 1 }, {2 , 1 }, {2 , 0 }, {1 , 0 }, {2 , 2 }};
757852 absl::c_stable_sort (test_vector);
758- EXPECT_THAT (
759- test_vector,
760- ElementsAre (IsElement (1 , 1 ), IsElement (1 , 0 ), IsElement (2 , 1 ),
761- IsElement (2 , 0 ), IsElement (2 , 2 )));
853+ EXPECT_THAT (test_vector,
854+ ElementsAre (IsElement (1 , 1 ), IsElement (1 , 0 ), IsElement (2 , 1 ),
855+ IsElement (2 , 0 ), IsElement (2 , 2 )));
762856}
763857
764858TEST (MutatingTest, StableSortWithPredicate) {
765859 std::vector<Element> test_vector = {{1 , 1 }, {2 , 1 }, {2 , 0 }, {1 , 0 }, {2 , 2 }};
766860 absl::c_stable_sort (test_vector, [](const Element& e1 , const Element& e2 ) {
767861 return e2 < e1 ;
768862 });
769- EXPECT_THAT (
770- test_vector,
771- ElementsAre (IsElement (2 , 1 ), IsElement (2 , 0 ), IsElement (2 , 2 ),
772- IsElement (1 , 1 ), IsElement (1 , 0 )));
863+ EXPECT_THAT (test_vector,
864+ ElementsAre (IsElement (2 , 1 ), IsElement (2 , 0 ), IsElement (2 , 2 ),
865+ IsElement (1 , 1 ), IsElement (1 , 0 )));
773866}
774867
775868TEST (MutatingTest, ReplaceCopyIf) {
0 commit comments