diff options
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 |