boost_unordered 0.1.0

Boost C++ library boost_unordered packaged using Zanbil
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447

# Copyright 2006-2008 Daniel James.
# Copyright 2022-2023 Christian Mazakas
# Copyright 2024-2025 Joaquin M Lopez Munoz
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)

import path ;
import regex ;
import testing ;
import config : requires ;

path-constant TOP : . ;

# Adding -Wundef is blocked on (at least)
# https://github.com/boostorg/type_traits/issues/165

local gcc-flags = -Wsign-promo -Wconversion -Wsign-conversion -Wfloat-equal -Wshadow -Wno-variadic-macros ;
local clang-flags = $(gcc-flags) -Wno-c99-extensions ;
local msvc-flags = /wd4494 ;

project
    : requirements
        <library>/boost/concept_check//boost_concept_check
        <library>/boost/compat//boost_compat
        <library>/boost/iterator//boost_iterator
        <warnings>pedantic
        <toolset>intel:<warnings>on

        <toolset>gcc:<cxxflags>$(gcc-flags)
        <toolset>darwin:<cxxflags>$(gcc-flags)
        <toolset>clang:<cxxflags>$(clang-flags)
        <toolset>msvc:<cxxflags>$(msvc-flags)

        <toolset>gcc-4.4:<cxxflags>-Wno-strict-aliasing
        <toolset>gcc-4.4:<cxxflags>-fno-deduce-init-list
        <toolset>clang-14:<cxxflags>-Wunused-template

        <toolset>gcc:<warnings-as-errors>on
        <toolset>clang:<warnings-as-errors>on
        <toolset>msvc:<warnings-as-errors>on
    ;

path-constant BOOST_UNORDERED_TEST_DIR : . ;

run quick.cpp ;

compile debuggability/visualization_tests.cpp
  : <target-os>cygwin:<define>_XOPEN_SOURCE=600
  ;

compile unordered/self_include_tests_obj.cpp
  : <define>BOOST_UNORDERED_HEADER="boost/unordered_map.hpp"
  : tl_unordered_map_hpp ;

compile unordered/self_include_tests_obj.cpp
  : <define>BOOST_UNORDERED_HEADER="boost/unordered_set.hpp"
  : tl_unordered_set_hpp ;

local include_root = [ path.make $(TOP)/../include ] ;
local headers = [ path.glob-tree $(include_root)/boost/unordered : *.hpp ] ;

local paths ;
local sanitized_paths ;

for local header in $(headers)
{
  local path = [ path.relative-to $(include_root) $(header) ] ;

  local sanitized = [ path.relative-to "$(include_root)/boost/unordered" $(header) ] ;
  sanitized = [ regex.replace $(sanitized) "[/.\\]" "_" ] ;

  paths += $(path) ;
  sanitized_paths += $(sanitized) ;

  compile unordered/self_include_tests_obj.cpp
    : <define>BOOST_UNORDERED_HEADER="$(path)" : $(sanitized) ;
}

alias include_tests
  : tl_unordered_map_hpp
    tl_unordered_set_hpp
    $(sanitized_paths) ;

local FCA_TESTS =
  allocator_traits
  assign_tests
  at_tests
  bucket_tests
  compile_map
  compile_set
  constructor_tests
  contains_tests
  copy_tests
  deduction_tests
  emplace_smf_tests
  emplace_tests
  equality_tests
  equivalent_keys_tests
  erase_equiv_tests
  erase_if
  erase_tests
  explicit_alloc_ctor_tests
  extract_tests
  find_tests
  fwd_map_test
  fwd_set_test
  incomplete_test
  insert_hint_tests
  insert_stable_tests
  insert_tests
  load_factor_tests
  merge_tests
  minimal_allocator
  move_tests
  narrow_cast_tests
  node_handle_tests
  node_handle_allocator_tests
  noexcept_tests
  post_move_tests
  prime_fmod_tests
  rehash_tests
  reserve_tests
  scary_tests
  scoped_allocator
  simple_tests
  swap_tests
  transparent_tests
  unnecessary_copy_tests
  fancy_pointer_noleak
  pmr_allocator_tests
;

for local test in $(FCA_TESTS)
{
  if $(test) = "erase_tests" {
    run unordered/$(test).cpp : : : <define>BOOST_UNORDERED_SUPPRESS_DEPRECATED ;
  } else if $(test) = "scoped_allocator" {
    run unordered/$(test).cpp : : : <toolset>msvc-14.0:<build>no ;
  } else {
    run unordered/$(test).cpp ;
  }
}

run unordered/link_test_1.cpp unordered/link_test_2.cpp : : : : link_test ;

run unordered/serialization_tests.cpp
    : $(BOOST_UNORDERED_TEST_DIR)
    :
    : <define>BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0
      <warnings>off # Boost.Serialization headers are not warning-free
      <undefined-sanitizer>norecover:<build>no # boost::archive::xml_oarchive does not pass UBSAN
      <toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS
      <toolset>msvc:<cxxflags>/bigobj
      <toolset>gcc:<inlining>on
      <toolset>gcc:<optimization>space
      <toolset>clang:<inlining>on
      <toolset>clang:<optimization>space
      <library>/boost/serialization//boost_serialization/<warnings>off
      <library>/boost/container//boost_container/<warnings-as-errors>off
      <toolset>gcc,<target-os>windows:<build>no ; # Boost.Atomic no longer supports MinGW

compile-fail unordered/insert_node_type_fail.cpp : <define>UNORDERED_TEST_MAP      : insert_node_type_fail_map ;
compile-fail unordered/insert_node_type_fail.cpp : <define>UNORDERED_TEST_MULTIMAP : insert_node_type_fail_multimap ;
compile-fail unordered/insert_node_type_fail.cpp : <define>UNORDERED_TEST_SET      : insert_node_type_fail_set ;
compile-fail unordered/insert_node_type_fail.cpp : <define>UNORDERED_TEST_MULTISET : insert_node_type_fail_multiset ;

compile unordered/explicit_instantiation_tests.cpp :                                   : fca_explicit_instantiation_tests ;
compile unordered/explicit_instantiation_tests.cpp : <define>BOOST_UNORDERED_FOA_TESTS : foa_explicit_instantiation_tests ;
compile cfoa/explicit_instantiation_tests.cpp      :                                   : cfoa_explicit_instantiation_tests ;

local FCA_EXCEPTION_TESTS =
  constructor_exception_tests
  copy_exception_tests
  assign_exception_tests
  move_assign_exception_tests
  insert_exception_tests
  erase_exception_tests
  rehash_exception_tests
  merge_exception_tests
  less_tests
  swap_exception_tests
;

for local test in $(FCA_EXCEPTION_TESTS)
{
  if $(test) = "swap_exception_tests" {
    run exception/$(test).cpp : : : <define>BOOST_UNORDERED_SWAP_METHOD=2 ;
  } else {
    run exception/$(test).cpp ;
  }
}

alias fca_exception_tests : $(FCA_EXCEPTION_TESTS) ;
alias fca_tests :
  $(FCA_TESTS)
  $(FCA_EXCEPTION_TESTS)
  link_test
  insert_node_type_fail_map
  insert_node_type_fail_multimap
  insert_node_type_fail_set
  insert_node_type_fail_multiset
  serialization_tests
;

local FOA_TESTS =
  fwd_set_test
  fwd_map_test
  compile_set
  compile_map
  noexcept_tests
  incomplete_test
  simple_tests
  equivalent_keys_tests
  constructor_tests
  copy_tests
  move_tests
  post_move_tests
  assign_tests
  insert_tests
  insert_hint_tests
  emplace_smf_tests
  emplace_tests
  erase_tests
  explicit_alloc_ctor_tests
  merge_tests
  find_tests
  at_tests
  load_factor_tests
  rehash_tests
  equality_tests
  swap_tests
  transparent_tests
  reserve_tests
  contains_tests
  erase_if
  scary_tests
  init_type_insert_tests
  max_load_tests
  extract_tests
  node_handle_tests
  uses_allocator
  hash_is_avalanching_test
  fancy_pointer_noleak
  pmr_allocator_tests
  pull_tests
  stats_tests
  node_handle_allocator_tests
;

for local test in $(FOA_TESTS)
{
  run unordered/$(test).cpp : : : <define>BOOST_UNORDERED_FOA_TESTS : foa_$(test) ;
}

run unordered/link_test_1.cpp unordered/link_test_2.cpp : : : <define>BOOST_UNORDERED_FOA_TESTS : foa_link_test ;
run unordered/scoped_allocator.cpp : : : <toolset>msvc-14.0:<build>no <define>BOOST_UNORDERED_FOA_TESTS : foa_scoped_allocator ;

run unordered/serialization_tests.cpp
    :
    :
    : <define>BOOST_UNORDERED_FOA_TESTS
      <warnings>off # Boost.Serialization headers are not warning-free
      <undefined-sanitizer>norecover:<build>no # boost::archive::xml_oarchive does not pass UBSAN
      <toolset>msvc:<cxxflags>/bigobj
      <toolset>gcc:<inlining>on
      <toolset>gcc:<optimization>space
      <toolset>clang:<inlining>on
      <toolset>clang:<optimization>space
      <library>/boost/serialization//boost_serialization/<warnings>off
      <library>/boost/container//boost_container/<warnings-as-errors>off
      <toolset>gcc,<target-os>windows:<build>no # Boost.Atomic no longer supports MinGW
    : foa_serialization_tests ;

local FOA_EXCEPTION_TESTS =
  constructor_exception_tests
  copy_exception_tests
  assign_exception_tests
  move_assign_exception_tests
  insert_exception_tests
  erase_exception_tests
  rehash_exception_tests
  swap_exception_tests
  merge_exception_tests
;

for local test in $(FOA_EXCEPTION_TESTS)
{
  run exception/$(test).cpp : : : <define>BOOST_UNORDERED_FOA_TESTS : foa_$(test) ;
}

local MMAP_CONTAINERS =
  unordered_flat_map
  unordered_flat_set
  unordered_node_map
  unordered_node_set
  unordered_map
  unordered_set
  unordered_multimap
  unordered_multiset
  concurrent_flat_map
  concurrent_flat_set
;

for local container in $(MMAP_CONTAINERS)
{
  run unordered/mmap_tests.cpp
    /boost/filesystem//boost_filesystem
    /boost/interprocess//boost_interprocess
    /boost/process//boost_process
    /boost/uuid//boost_uuid
  : :
  : <define>BOOST_UNORDERED_FOA_MMAP_MAP_TYPE="boost::$(container)"
    <warnings>off
    <link>static
    <toolset>gcc-4.8:<build>no # Boost.Process does not compile
    <toolset>gcc-4.9:<build>no # ditto
    <target-os>cygwin:<build>no
    <toolset>gcc,<target-os>windows:<build>no # Process on MinGW on Appveyor doesn't compile
  : foa_mmap_$(container)_tests ;
}

alias foa_mmap_tests : foa_mmap_$(MMAP_CONTAINERS)_tests ;

alias foa_tests :
  foa_$(FOA_TESTS)
  foa_$(FOA_EXCEPTION_TESTS)
  foa_link_test
  foa_scoped_allocator
  foa_serialization_tests
  foa_mmap_tests
;

local CFOA_TESTS =
  erase_tests
  try_emplace_tests
  emplace_tests
  extract_insert_tests
  constructor_tests
  assign_tests
  clear_tests
  swap_tests
  merge_tests
  rehash_tests
  equality_tests
  fwd_tests
  exception_insert_tests
  exception_erase_tests
  exception_constructor_tests
  exception_assign_tests
  exception_merge_tests
  rw_spinlock_test
  rw_spinlock_test2
  rw_spinlock_test3
  rw_spinlock_test4
  rw_spinlock_test5
  rw_spinlock_test6
  rw_spinlock_test7
  rw_spinlock_test8
  reentrancy_check_test
  explicit_alloc_ctor_tests
  pmr_allocator_tests
  stats_tests
  node_handle_allocator_tests
;

for local test in $(CFOA_TESTS)
{
  run cfoa/$(test).cpp
  : requirements <threading>multi
  : target-name cfoa_$(test)
  ;
}

run cfoa/insert_tests.cpp
    :
    :
    : $(CPP11) <threading>multi
      <toolset>msvc:<cxxflags>/bigobj
      <toolset>gcc:<inlining>on
      <toolset>gcc:<optimization>space
      <toolset>clang:<inlining>on
      <toolset>clang:<optimization>space
    : cfoa_insert_tests ;

run cfoa/visit_tests.cpp
    :
    :
    : $(CPP11) <threading>multi
      <toolset>msvc:<cxxflags>/bigobj
      <toolset>gcc:<inlining>on
      <toolset>gcc:<optimization>space
      <toolset>clang:<inlining>on
      <toolset>clang:<optimization>space
    : cfoa_visit_tests ;

run cfoa/serialization_tests.cpp
    :
    :
    : $(CPP11) <threading>multi
      <warnings>off # Boost.Serialization headers are not warning-free
      <undefined-sanitizer>norecover:<build>no # boost::archive::xml_oarchive does not pass UBSAN
      <toolset>msvc:<cxxflags>/bigobj
      <toolset>gcc:<inlining>on
      <toolset>gcc:<optimization>space
      <toolset>clang:<inlining>on
      <toolset>clang:<optimization>space
      <library>/boost/serialization//boost_serialization/<warnings>off
      <library>/boost/container//boost_container/<warnings-as-errors>off
      <toolset>gcc,<target-os>windows:<build>no # Boost.Atomic no longer supports MinGW
      <toolset>gcc,<thread-sanitizer>norecover:<build>no # TSAN does not support atomic_thread_fence
      <toolset>clang,<thread-sanitizer>norecover:<build>no # idem
    : cfoa_serialization_tests ;

rule make_cfoa_interprocess_concurrency_tests ( name : defines ? )
{
    run cfoa/interprocess_concurrency_tests.cpp : :
        : <define>$(defines)
          <warnings>off
          <link>static
          <toolset>clang-3.5:<build>no # Boost.Process does not compile
          <toolset>clang-3.6:<build>no # idem
          <toolset>clang-3.7:<build>no # idem
          <toolset>clang-3.8:<build>no # idem
          <toolset>gcc-4.8:<build>no # idem
          <toolset>gcc-4.9:<build>no # idem
          <target-os>cygwin:<build>no
          <toolset>gcc,<target-os>windows:<build>no # Process on MinGW on Appveyor doesn't compile
          <library>/boost/filesystem//boost_filesystem
          <library>/boost/interprocess//boost_interprocess
          <library>/boost/process//boost_process
          <library>/boost/uuid//boost_uuid
        : $(name) ;
}

make_cfoa_interprocess_concurrency_tests cfoa_interproc_conc_tests ;

make_cfoa_interprocess_concurrency_tests cfoa_interproc_conc_tests_stats
    :  BOOST_UNORDERED_ENABLE_STATS ;

alias cfoa_tests :
  cfoa_$(CFOA_TESTS)
  cfoa_insert_tests
  cfoa_visit_tests
  cfoa_serialization_tests
  cfoa_interproc_conc_tests
  cfoa_interproc_conc_tests_stats ;