@@ -767,18 +767,18 @@ int main() {
767
767
}
768
768
769
769
{ // quick checks to exercise more codepaths with _Could_compare_equal_to_value_type()
770
- const vector<uint32_t > v{200 , 201 , 202 , 203 , 204 , 205 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 };
770
+ const vector<uint32_t > v{200 , 201 , 202 , 203 , 204 , 205 , 206 , 207 , 208 , 209 , 210 , 205 , 205 , 205 , 214 , 215 };
771
771
const uint32_t u32 {205 };
772
772
const uint64_t u64 {0x1234'5678'0000'00CDull };
773
773
774
774
assert (u32 != u64 ); // u64 is out-of-range for uint32_t, so it can never compare equal...
775
775
assert (u32 == static_cast <uint32_t >(u64 )); // ... unless an algorithm performs an improper cast
776
776
777
- assert (count (v.begin (), v.end (), u32 ) == 1 );
777
+ assert (count (v.begin (), v.end (), u32 ) == 4 );
778
778
assert (count (v.begin (), v.end (), u64 ) == 0 );
779
779
780
780
#if _HAS_CXX20
781
- assert (ranges::count (v, u32 ) == 1 );
781
+ assert (ranges::count (v, u32 ) == 4 );
782
782
assert (ranges::count (v, u64 ) == 0 );
783
783
#endif // _HAS_CXX20
784
784
@@ -793,7 +793,7 @@ int main() {
793
793
#if _HAS_CXX23
794
794
{
795
795
const auto result = ranges::find_last (v, u32 );
796
- assert (result.begin () == v.begin () + 5 );
796
+ assert (result.begin () == v.end () - 3 );
797
797
assert (result.end () == v.end ());
798
798
}
799
799
{
@@ -803,11 +803,27 @@ int main() {
803
803
}
804
804
#endif // _HAS_CXX23
805
805
806
+ assert (search_n (v.begin (), v.end (), 2 , u32 ) == v.end () - 5 );
807
+ assert (search_n (v.begin (), v.end (), 2 , u64 ) == v.end ());
808
+
809
+ #if _HAS_CXX20
810
+ {
811
+ const auto result = ranges::search_n (v, 2 , u32 );
812
+ assert (begin (result) == v.end () - 5 );
813
+ assert (end (result) == v.end () - 3 );
814
+ }
815
+ {
816
+ const auto result = ranges::search_n (v, 2 , u64 );
817
+ assert (begin (result) == v.end ());
818
+ assert (end (result) == v.end ());
819
+ }
820
+ #endif // _HAS_CXX20
821
+
806
822
{
807
- const vector<uint32_t > rem{200 , 201 , 202 , 203 , 204 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 , 0 };
823
+ const vector<uint32_t > rem{200 , 201 , 202 , 203 , 204 , 206 , 207 , 208 , 209 , 210 , 214 , 215 , 0 , 0 , 0 , 0 };
808
824
809
825
vector<uint32_t > dst (v.size (), 0 );
810
- assert (remove_copy (v.begin (), v.end (), dst.begin (), u32 ) == dst.end () - 1 );
826
+ assert (remove_copy (v.begin (), v.end (), dst.begin (), u32 ) == dst.end () - 4 );
811
827
assert (dst == rem);
812
828
813
829
dst.assign (v.size (), 0 );
@@ -819,7 +835,7 @@ int main() {
819
835
dst.assign (v.size (), 0 );
820
836
const auto result = ranges::remove_copy (v, dst.begin (), u32 );
821
837
assert (result.in == v.end ());
822
- assert (result.out == dst.end () - 1 );
838
+ assert (result.out == dst.end () - 4 );
823
839
assert (dst == rem);
824
840
}
825
841
{
@@ -833,7 +849,7 @@ int main() {
833
849
}
834
850
835
851
{
836
- const vector<uint32_t > rep{200 , 201 , 202 , 203 , 204 , 333 , 206 , 207 , 208 , 209 , 210 , 211 , 212 , 213 , 214 , 215 };
852
+ const vector<uint32_t > rep{200 , 201 , 202 , 203 , 204 , 333 , 206 , 207 , 208 , 209 , 210 , 333 , 333 , 333 , 214 , 215 };
837
853
const uint32_t val{333 };
838
854
839
855
vector<uint32_t > dst = v;
0 commit comments