@@ -16,21 +16,23 @@ template <class T>
1616concept lessthan_comparable =
1717 beman::inplace_vector::details::lessthan_comparable<T>;
1818
19- template <typename T> struct vec_list {
20- T empty;
19+ template <typename T, typename U = T > struct vec_list {
20+ U empty;
2121 T base; // base
22- T copy; // identical to base
23- T greater; // greater number of elements
24- T lesser; // lesser number of elements
25- T bigger; // bigger value of the elements
26- T smaller; // smaller value of the elements
27- T greater_smaller; // greater number of elements but smaller values
28- T lesser_bigger; // lesser number of elements but bigger values
22+ U copy; // identical to base
23+ U greater; // greater number of elements
24+ U lesser; // lesser number of elements
25+ U bigger; // bigger value of the elements
26+ U smaller; // smaller value of the elements
27+ U greater_smaller; // greater number of elements but smaller values
28+ U lesser_bigger; // lesser number of elements but bigger values
2929};
3030
31- template <typename T> static void runtests (vec_list<T> &list) {
31+ template <typename T, typename U = T>
32+ static void runtests (vec_list<T, U> &list) {
3233
3334 static_assert (std::three_way_comparable<T> || lessthan_comparable<T>);
35+ static_assert (std::three_way_comparable<U> || lessthan_comparable<U>);
3436
3537 // if T::value_type is threewaycomparable with ordering X then T must also
3638 // be comparable with ordering X
@@ -325,3 +327,22 @@ TEST(Compare, threeway_uncomparable) {
325327 static_assert (!std::three_way_comparable<inplace_vector<uncomparable3, 4 >>);
326328 static_assert (!has_threeway<inplace_vector<uncomparable3, 4 >>);
327329}
330+
331+ // In accordance with P3698R0, we compare vectors with identical elements but
332+ // different capacities
333+
334+ TEST (Compare, threeway_cross_capacity_smaller) {
335+ vec_list<inplace_vector<int , 4 >, inplace_vector<int , 5 >> list{
336+ .empty {},
337+ .base {1 , 2 , 3 },
338+ .copy {1 , 2 , 3 },
339+ .greater {4 , 5 , 6 },
340+ .lesser {0 , 0 , 0 },
341+ .bigger {1 , 2 , 3 , 0 },
342+ .smaller {1 , 2 },
343+ .greater_smaller {2 , 2 },
344+ .lesser_bigger {0 , 2 , 3 , 4 },
345+ };
346+
347+ runtests (list);
348+ }
0 commit comments