diff options
author | Louis Dionne <ldionne@apple.com> | 2019-05-22 18:10:32 +0000 |
---|---|---|
committer | Louis Dionne <ldionne@apple.com> | 2019-05-22 18:10:32 +0000 |
commit | c44cd1e4ed9ca85ccfa808d63960b3357872c130 (patch) | |
tree | 255286fd40ab311494b2662df0ae9869c2f20690 /libcxx/test/std/containers/check_consecutive.h | |
parent | 1f46d524a1c6ac66bbd803caf5f1206603759a5f (diff) | |
download | bcm5719-llvm-c44cd1e4ed9ca85ccfa808d63960b3357872c130.tar.gz bcm5719-llvm-c44cd1e4ed9ca85ccfa808d63960b3357872c130.zip |
[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
Diffstat (limited to 'libcxx/test/std/containers/check_consecutive.h')
-rw-r--r-- | libcxx/test/std/containers/check_consecutive.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/libcxx/test/std/containers/check_consecutive.h b/libcxx/test/std/containers/check_consecutive.h new file mode 100644 index 00000000000..fdd26adb156 --- /dev/null +++ b/libcxx/test/std/containers/check_consecutive.h @@ -0,0 +1,46 @@ +//===----------------------------------------------------------------------===// +// +// 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 |