llvm-project/libcxx/test/std/containers/check_consecutive.h
Louis Dionne c44cd1e4ed [libcxx][test] Fix order checking in some more unordered_multimap tests
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
2019-05-22 18:10:32 +00:00

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