llvm-project/llvm/unittests/ADT
Michael Kruse f57bfd3d9f [ADT] Add zip_longest iterators.
Like the already existing zip_shortest/zip_first iterators, zip_longest
iterates over multiple iterators at once, but has as many iterations as
the longest sequence.

This means some iterators may reach the end before others do.
zip_longest uses llvm::Optional's None value to mark a
past-the-end value.

zip_longest is not reverse-iteratable because the tuples iterated over
would be different for different length sequences (IMHO for the same
reason neither zip_shortest nor zip_first should be reverse-iteratable;
one can still reverse the ranges individually if that's the expected
behavior).

In contrast to zip_shortest/zip_first, zip_longest tuples contain
rvalues instead of references. This is because llvm::Optional cannot
contain reference types and the value-initialized default does not have
a memory location a reference could point to.

The motivation for these iterators is to use C++ foreach to compare two
lists of ordered attributes in D48100 (SemaOverload.cpp and
ASTReaderDecl.cpp).

Idea by @hfinkel.

This re-commits r348301 which was reverted by r348303.
The compilation error by gcc 5.4 was resolved using make_tuple in the in
the initializer_list.
The compileration error by msvc14 was resolved by splitting
ZipLongestValueType (which already was a workaround for msvc15) into
ZipLongestItemType and ZipLongestTupleType.

Differential Revision: https://reviews.llvm.org/D48348

llvm-svn: 348323
2018-12-05 00:31:54 +00:00
..
APFloatTest.cpp [Intrinsic] Add llvm.minimum and llvm.maximum instrinsic functions 2018-10-13 07:21:44 +00:00
APIntTest.cpp [APInt] Add methods for saturated add and sub 2018-11-20 16:47:59 +00:00
APSIntTest.cpp
AnyTest.cpp [ADT] Only run death tests in !NDEBUG 2018-07-20 22:15:09 +00:00
ArrayRefTest.cpp Revert "ADT: Move ArrayRef comparison operators into the class" 2018-06-28 12:10:21 +00:00
BitVectorTest.cpp Fix -Wsign-compare warnings. NFCI 2018-09-19 14:52:34 +00:00
BitmaskEnumTest.cpp
BreadthFirstIteratorTest.cpp
BumpPtrListTest.cpp
CMakeLists.txt [ADT] Implemented unittests for ImmutableList 2018-08-13 17:32:48 +00:00
DAGDeltaAlgorithmTest.cpp
DeltaAlgorithmTest.cpp
DenseMapTest.cpp [ADT] Adds equality operators for DenseMap and DenseSet, and an initializer_list 2018-10-15 15:26:47 +00:00
DenseSetTest.cpp [ADT] Fix a bug in DenseSet's initializer_list constructor. 2018-10-15 18:34:36 +00:00
DepthFirstIteratorTest.cpp
EquivalenceClassesTest.cpp [NFC] Add missing unit tests for EquivalenceClasses 2017-11-27 11:20:58 +00:00
FoldingSet.cpp
FunctionExtrasTest.cpp [ADT] Add llvm::unique_function which is like std::function but 2018-07-02 23:57:29 +00:00
FunctionRefTest.cpp
HashingTest.cpp Tests: fix tests encoding specific hash values for 32-bit systems. 2018-08-31 19:24:37 +00:00
IListBaseTest.cpp
IListIteratorTest.cpp
IListNodeBaseTest.cpp
IListNodeTest.cpp
IListSentinelTest.cpp
IListTest.cpp
ImmutableListTest.cpp [ADT] Made numerous methods of ImmutableList const 2018-09-12 11:20:15 +00:00
ImmutableMapTest.cpp
ImmutableSetTest.cpp
IntEqClassesTest.cpp
IntervalMapTest.cpp
IntrusiveRefCntPtrTest.cpp
IteratorTest.cpp [ADT] Add zip_longest iterators. 2018-12-05 00:31:54 +00:00
MakeUniqueTest.cpp
MapVectorTest.cpp [ADT] Fix MapVector when 'Map::mapped_type != unsigned'. 2018-04-08 08:48:58 +00:00
MappedIteratorTest.cpp
OptionalTest.cpp Re-apply r346985: [ADT] Drop llvm::Optional clang-specific optimization for trivially copyable types 2018-11-16 00:47:24 +00:00
PackedVectorTest.cpp
PointerEmbeddedIntTest.cpp
PointerIntPairTest.cpp
PointerSumTypeTest.cpp
PointerUnionTest.cpp
PostOrderIteratorTest.cpp
PriorityWorklistTest.cpp
RangeAdapterTest.cpp
SCCIteratorTest.cpp
STLExtrasTest.cpp 2nd attempt to fix ambiguities because of ADL 2018-10-31 01:58:00 +00:00
ScopeExitTest.cpp Give scope_exit helper correct move semantics 2018-01-25 16:55:48 +00:00
SequenceTest.cpp
SetVectorTest.cpp
SimpleIListTest.cpp
SmallPtrSetTest.cpp [unittests] ADT: silence -Wself-assign diagnostics 2018-04-07 10:37:18 +00:00
SmallSetTest.cpp [ADT] Remove illegal comparison of singular iterators from SmallSetTest 2018-10-31 11:00:48 +00:00
SmallStringTest.cpp
SmallVectorTest.cpp
SparseBitVectorTest.cpp [ADT] Clean up SparseBitVector copying and make it moveable 2018-11-01 13:55:59 +00:00
SparseMultiSetTest.cpp
SparseSetTest.cpp
StatisticTest.cpp Fix unused function warning in StatisticTest.cpp 2018-03-08 15:52:45 +00:00
StringExtrasTest.cpp [ADT] Support converting to lowercase string in toHex 2018-09-10 19:34:44 +00:00
StringMapTest.cpp llvm::sort(C.begin(), C.end(), ...) -> llvm::sort(C, ...) 2018-09-27 02:13:45 +00:00
StringRefTest.cpp [ADT] Add `StringRef::rsplit(StringRef Separator)`. 2018-06-08 12:42:12 +00:00
StringSwitchTest.cpp [ADT] Simplify and optimize StringSwitch 2018-02-26 18:41:26 +00:00
TestGraph.h Add header guards to some headers that are missing them 2018-09-03 16:22:05 +00:00
TinyPtrVectorTest.cpp Ensure moved-from container is cleared on move 2017-12-11 19:22:59 +00:00
TripleTest.cpp Add Hurd target to LLVMSupport (1/2) 2018-11-29 03:23:01 +00:00
TwineTest.cpp
VariadicFunctionTest.cpp