mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-03 14:36:07 +00:00

Some tests assume that iteration through an unordered multimap elements will return them in the same order as at the container creation. This assumption is not true since the container is unordered, so that no specific order of elements is ever guaranteed for such container. This patch is a continuation of D54838 and introduces checks verifying that any iteration will return elements exactly from a set of valid values and without repetition, but in no particular order. Thanks to Andrey Maksimov for the patch. Differential Revision: https://reviews.llvm.org/D56498 llvm-svn: 361414
47 lines
1.4 KiB
C++
47 lines
1.4 KiB
C++
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#ifndef CHECK_CONSECUTIVE_H
|
|
#define CHECK_CONSECUTIVE_H
|
|
|
|
// <unordered_multiset>
|
|
// <unordered_multimap>
|
|
|
|
#include <cassert>
|
|
#include <set>
|
|
#include <stddef.h>
|
|
|
|
// Check consecutive equal values in an unordered_multiset iterator
|
|
template <typename Iter>
|
|
void CheckConsecutiveValues(Iter pos, Iter end, typename Iter::value_type value, size_t count)
|
|
{
|
|
for ( size_t i = 0; i < count; ++i )
|
|
{
|
|
assert(pos != end);
|
|
assert(*pos == value);
|
|
++pos;
|
|
}
|
|
assert(pos == end || *pos != value);
|
|
}
|
|
|
|
// Check consecutive equal keys in an unordered_multimap iterator
|
|
template <typename Iter>
|
|
void CheckConsecutiveKeys(Iter pos, Iter end, typename Iter::value_type::first_type key, std::multiset<typename Iter::value_type::second_type>& values)
|
|
{
|
|
while (!values.empty())
|
|
{
|
|
assert(pos != end);
|
|
assert(pos->first == key);
|
|
assert(values.find(pos->second) != values.end());
|
|
values.erase(values.find(pos->second));
|
|
++pos;
|
|
}
|
|
assert(pos == end || pos->first != key);
|
|
}
|
|
|
|
#endif
|