[libcxx][ranges] add views::join adaptor object. added test coverage to join_view
authorHui Xie <hui.xie1990@gmail.com>
Thu, 21 Apr 2022 11:08:34 +0000 (13:08 +0200)
committerNikolas Klauser <nikolasklauser@berlin.de>
Thu, 21 Apr 2022 11:10:46 +0000 (13:10 +0200)
commit3d3103b733d4346d583a3ada3aabdaa9de4f0446
tree6cd525cd8881a54052894bbe4d94041d7330f65f
parent81af32b9a3ec0d0925f66ec972ce68c8d6f4ffe4
[libcxx][ranges] add views::join adaptor object. added test coverage to join_view

- added views::join adaptor object
- added test for the adaptor object
- fixed some join_view's tests. e.g iter_swap test
- added some negative tests for join_view to test that operations do not exist when constraints aren't met
- added tests that locks down issues that were already addressed in previous change
  - LWG3500 `join_view::iterator::operator->()` is bogus
  - LWG3313 `join_view::iterator::operator--` is incorrectly constrained
  - LWG3517 `join_view::iterator`'s `iter_swap` is underconstrained
  - P2328R1 join_view should join all views of ranges
- fixed some issues in join_view and added tests
  - LWG3535 `join_view::iterator::iterator_category` and `::iterator_concept` lie
  - LWG3474 Nesting ``join_views`` is broken because of CTAD
- added tests for an LWG issue that isn't resolved in the standard yet, but the previous code has workaround.
  - LWG3569 Inner iterator not default_initializable

Reviewed By: #libc, var-const

Spies: var-const, libcxx-commits

Differential Revision: https://reviews.llvm.org/D123466
22 files changed:
libcxx/docs/Status/Cxx20Issues.csv
libcxx/docs/Status/Cxx2bIssues.csv
libcxx/docs/Status/RangesIssues.csv
libcxx/include/__ranges/join_view.h
libcxx/test/std/ranges/range.adaptors/range.join.view/adaptor.pass.cpp [new file with mode: 0644]
libcxx/test/std/ranges/range.adaptors/range.join.view/begin.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/ctad.compile.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/ctor.default.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/end.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/general.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/arrow.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/ctor.other.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/ctor.parent.outer.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/decrement.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/eq.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/increment.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/iter.move.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/iter.swap.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/iterator/member_types.compile.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/sentinel/ctor.other.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/sentinel/eq.pass.cpp
libcxx/test/std/ranges/range.adaptors/range.join.view/types.h