1
2// Copyright 2008-2009 Daniel James.
3// Copyright 2022-2023 Christian Mazakas.
4// Distributed under the Boost Software License, Version 1.0. (See accompanying
5// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
7// clang-format off
8#include "../helpers/prefix.hpp"
9#ifdef BOOST_UNORDERED_FOA_TESTS
10#include <boost/unordered/unordered_flat_map_fwd.hpp>
11#include <boost/unordered/unordered_node_map_fwd.hpp>
12#include <boost/unordered/detail/implementation.hpp>
13#else
14#include <boost/unordered/unordered_map_fwd.hpp>
15#endif
16#include "../helpers/postfix.hpp"
17// clang-format on
18
19#ifdef BOOST_UNORDERED_FOA_TESTS
20template <typename T>
21void call_swap(
22 boost::unordered_flat_map<T, T>& x, boost::unordered_flat_map<T, T>& y)
23{
24 swap(x, y);
25}
26
27template <typename T>
28void call_swap(
29 boost::unordered_node_map<T, T>& x, boost::unordered_node_map<T, T>& y)
30{
31 swap(x, y);
32}
33
34template <typename T>
35bool call_equals(
36 boost::unordered_flat_map<T, T>& x, boost::unordered_flat_map<T, T>& y)
37{
38 return x == y;
39}
40
41template <typename T>
42bool call_equals(
43 boost::unordered_node_map<T, T>& x, boost::unordered_node_map<T, T>& y)
44{
45 return x == y;
46}
47
48template <typename T>
49bool call_not_equals(
50 boost::unordered_flat_map<T, T>& x, boost::unordered_flat_map<T, T>& y)
51{
52 return x != y;
53}
54
55template <typename T>
56bool call_not_equals(
57 boost::unordered_node_map<T, T>& x, boost::unordered_node_map<T, T>& y)
58{
59 return x != y;
60}
61
62#include <boost/unordered/unordered_flat_map.hpp>
63#include <boost/unordered/unordered_node_map.hpp>
64#else
65template <typename T>
66void call_swap(boost::unordered_map<T, T>& x, boost::unordered_map<T, T>& y)
67{
68 swap(x, y);
69}
70
71template <typename T>
72bool call_equals(boost::unordered_map<T, T>& x, boost::unordered_map<T, T>& y)
73{
74 return x == y;
75}
76
77template <typename T>
78bool call_not_equals(
79 boost::unordered_map<T, T>& x, boost::unordered_map<T, T>& y)
80{
81 return x != y;
82}
83
84template <typename T>
85void call_swap(
86 boost::unordered_multimap<T, T>& x, boost::unordered_multimap<T, T>& y)
87{
88 swap(x, y);
89}
90
91template <typename T>
92bool call_equals(
93 boost::unordered_multimap<T, T>& x, boost::unordered_multimap<T, T>& y)
94{
95 return x == y;
96}
97
98template <typename T>
99bool call_not_equals(
100 boost::unordered_multimap<T, T>& x, boost::unordered_multimap<T, T>& y)
101{
102 return x != y;
103}
104
105#include <boost/unordered_map.hpp>
106#endif
107#include "../helpers/test.hpp"
108
109#ifdef BOOST_UNORDERED_FOA_TESTS
110typedef boost::unordered_flat_map<int, int> int_map;
111typedef boost::unordered_node_map<int, int> int_node_map;
112#else
113typedef boost::unordered_map<int, int> int_map;
114typedef boost::unordered_multimap<int, int> int_multimap;
115#endif
116
117UNORDERED_AUTO_TEST (use_map_fwd_declared_function) {
118 int_map x, y;
119 x[1] = 2;
120 y[2] = 1;
121 call_swap(x, y);
122
123 BOOST_TEST(y.find(1) != y.end() && y.find(1)->second == 2);
124 BOOST_TEST(y.find(2) == y.end());
125
126 BOOST_TEST(x.find(1) == x.end());
127 BOOST_TEST(x.find(2) != x.end() && x.find(2)->second == 1);
128
129 BOOST_TEST(!call_equals(x, y));
130 BOOST_TEST(call_not_equals(x, y));
131}
132
133#ifdef BOOST_UNORDERED_FOA_TESTS
134UNORDERED_AUTO_TEST (use_node_map_fwd_declared_function) {
135 int_node_map x, y;
136 x[1] = 2;
137 y[2] = 1;
138 call_swap(x, y);
139
140 BOOST_TEST(y.find(1) != y.end() && y.find(1)->second == 2);
141 BOOST_TEST(y.find(2) == y.end());
142
143 BOOST_TEST(x.find(1) == x.end());
144 BOOST_TEST(x.find(2) != x.end() && x.find(2)->second == 1);
145
146 BOOST_TEST(!call_equals(x, y));
147 BOOST_TEST(call_not_equals(x, y));
148}
149#endif
150
151#ifndef BOOST_UNORDERED_FOA_TESTS
152UNORDERED_AUTO_TEST (use_multimap_fwd_declared_function) {
153 int_multimap x, y;
154 call_swap(x, y);
155 BOOST_TEST(call_equals(x, y));
156 BOOST_TEST(!call_not_equals(x, y));
157}
158#endif
159
160RUN_TESTS()
161

source code of boost/libs/unordered/test/unordered/fwd_map_test.cpp