Fuzz introspector
For issues and ideas: https://github.com/ossf/fuzz-introspector/issues

Fuzzers overview

Fuzzer Fuzzer filename Functions Reached Functions unreached Fuzzer depth Files reached Basic blocks reached Cyclomatic complexity Details
array /src/immer/extra/fuzzer/array.cpp 158 19 11 12 362 261 array.cpp
array-gc /src/immer/extra/fuzzer/array-gc.cpp 225 25 9 14 487 374 array-gc.cpp
set-gc /src/immer/extra/fuzzer/set-gc.cpp 250 51 11 14 797 418 set-gc.cpp
set /src/immer/extra/fuzzer/set.cpp 286 65 11 16 1066 506 set.cpp
set-st /src/immer/extra/fuzzer/set-st.cpp 306 66 11 15 1268 594 set-st.cpp
map-gc /src/immer/extra/fuzzer/map-gc.cpp 314 63 11 16 1111 680 map-gc.cpp
set-st-str /src/immer/extra/fuzzer/set-st-str.cpp 314 66 11 15 1695 1059 set-st-str.cpp
map-st /src/immer/extra/fuzzer/map-st.cpp 357 64 11 15 1542 764 map-st.cpp
set-st-str-conflict /src/immer/extra/fuzzer/set-st-str-conflict.cpp 316 66 11 15 1698 1061 set-st-str-conflict.cpp
map /src/immer/extra/fuzzer/map.cpp 381 64 11 16 1709 867 map.cpp
vector /src/immer/extra/fuzzer/vector.cpp 446 138 13 19 1411 775 vector.cpp
vector-st /src/immer/extra/fuzzer/vector-st.cpp 417 138 13 13 1288 732 vector-st.cpp
vector-gc /src/immer/extra/fuzzer/vector-gc.cpp 471 143 13 15 1404 809 vector-gc.cpp
map-st-str /src/immer/extra/fuzzer/map-st-str.cpp 394 77 11 18 2362 1538 map-st-str.cpp
map-st-str-conflict /src/immer/extra/fuzzer/map-st-str-conflict.cpp 396 77 11 18 2365 1540 map-st-str-conflict.cpp
flex-vector-st /src/immer/extra/fuzzer/flex-vector-st.cpp 1852 355 20 19 8289 4719 flex-vector-st.cpp
flex-vector-bo /src/immer/extra/fuzzer/flex-vector-bo.cpp 1832 355 20 19 8204 4672 flex-vector-bo.cpp
flex-vector-gc /src/immer/extra/fuzzer/flex-vector-gc.cpp 1899 335 20 16 8196 4702 flex-vector-gc.cpp
flex-vector /src/immer/extra/fuzzer/flex-vector.cpp 1883 354 21 23 8432 4766 flex-vector.cpp

Fuzzer details

Fuzzer: array

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 63 48.8%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 66 51.1%
All colors 129 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31

Runtime coverage analysis

Covered functions
82
Functions that are reachable but not covered
51
Reachable functions
158
Percentage of reachable functions covered
67.72%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/array.cpp 8
/src/immer/immer/array.hpp 13
/src/immer/immer/detail/arrays/with_capacity.hpp 16
/src/immer/immer/detail/arrays/node.hpp 8
/src/immer/immer/heap/debug_size_heap.hpp 2
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 4
/src/immer/immer/refcount/refcount_policy.hpp 3
/src/immer/extra/fuzzer/fuzzer_input.hpp 7
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/util.hpp 2
/src/immer/immer/transience/no_transience_policy.hpp 1

Fuzzer: array-gc

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 89 48.3%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 95 51.6%
All colors 184 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31

Runtime coverage analysis

Covered functions
107
Functions that are reachable but not covered
75
Reachable functions
225
Percentage of reachable functions covered
66.67%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/array-gc.cpp 10
/src/immer/extra/fuzzer/fuzzer_gc_guard.hpp 2
/src/immer/immer/array.hpp 8
/src/immer/immer/detail/arrays/no_capacity.hpp 10
/src/immer/immer/detail/arrays/node.hpp 8
/src/immer/immer/heap/gc_heap.hpp 3
/src/immer/immer/detail/combine_standard_layout.hpp 5
/src/immer/immer/refcount/no_refcount_policy.hpp 4
/src/immer/immer/transience/gc_transience_policy.hpp 7
/src/immer/immer/array_transient.hpp 8
/src/immer/immer/detail/arrays/with_capacity.hpp 15
/src/immer/extra/fuzzer/fuzzer_input.hpp 10
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/util.hpp 2

Fuzzer: set-gc

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 150 36.8%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 257 63.1%
All colors 407 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31

Runtime coverage analysis

Covered functions
140
Functions that are reachable but not covered
79
Reachable functions
250
Percentage of reachable functions covered
68.4%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/set-gc.cpp 5
/src/immer/extra/fuzzer/fuzzer_gc_guard.hpp 2
/src/immer/immer/set.hpp 11
/src/immer/immer/detail/hamts/champ.hpp 17
/src/immer/immer/detail/hamts/node.hpp 47
/src/immer/immer/heap/gc_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 7
/src/immer/immer/refcount/no_refcount_policy.hpp 3
/src/immer/immer/transience/gc_transience_policy.hpp 2
/src/immer/immer/detail/util.hpp 3
/src/immer/extra/fuzzer/fuzzer_input.hpp 6
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/hamts/bits.hpp 1
/src/immer/immer/algorithm.hpp 5

Fuzzer: set

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 127 25.1%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 377 74.8%
All colors 504 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31

Runtime coverage analysis

Covered functions
186
Functions that are reachable but not covered
43
Reachable functions
286
Percentage of reachable functions covered
84.97%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/set.cpp 4
/src/immer/immer/set.hpp 9
/src/immer/immer/detail/hamts/champ.hpp 17
/src/immer/immer/detail/hamts/node.hpp 54
/src/immer/immer/heap/debug_size_heap.hpp 2
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 10
/src/immer/immer/refcount/refcount_policy.hpp 4
/src/immer/immer/detail/util.hpp 4
/src/immer/extra/fuzzer/fuzzer_input.hpp 7
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/hamts/bits.hpp 1
/src/immer/immer/transience/no_transience_policy.hpp 2
/src/immer/immer/detail/hamts/champ_iterator.hpp 5
/src/immer/immer/detail/iterator_facade.hpp 2
/src/immer/immer/algorithm.hpp 2

Fuzzer: set-st

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 161 24.5%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 496 75.4%
All colors 657 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31

Runtime coverage analysis

Covered functions
197
Functions that are reachable but not covered
43
Reachable functions
306
Percentage of reachable functions covered
85.95%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/set-st.cpp 4
/src/immer/immer/set.hpp 11
/src/immer/immer/detail/hamts/champ.hpp 23
/src/immer/immer/detail/hamts/node.hpp 59
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 10
/src/immer/immer/refcount/unsafe_refcount_policy.hpp 4
/src/immer/immer/detail/util.hpp 5
/src/immer/extra/fuzzer/fuzzer_input.hpp 7
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/hamts/bits.hpp 1
/src/immer/immer/transience/no_transience_policy.hpp 2
/src/immer/immer/detail/hamts/champ_iterator.hpp 5
/src/immer/immer/detail/iterator_facade.hpp 2
/src/immer/immer/algorithm.hpp 2

Fuzzer: map-gc

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 250 45.1%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 304 54.8%
All colors 554 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31

Runtime coverage analysis

Covered functions
183
Functions that are reachable but not covered
106
Reachable functions
314
Percentage of reachable functions covered
66.24%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/map-gc.cpp 6
/src/immer/extra/fuzzer/fuzzer_gc_guard.hpp 2
/src/immer/immer/map.hpp 27
/src/immer/immer/detail/hamts/champ.hpp 22
/src/immer/immer/detail/hamts/node.hpp 45
/src/immer/immer/heap/gc_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 7
/src/immer/immer/refcount/no_refcount_policy.hpp 3
/src/immer/immer/transience/gc_transience_policy.hpp 2
/src/immer/immer/detail/util.hpp 6
/src/immer/extra/fuzzer/fuzzer_input.hpp 6
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/hamts/bits.hpp 1
/src/immer/immer/detail/hamts/champ_iterator.hpp 5
/src/immer/immer/detail/iterator_facade.hpp 2
/src/immer/immer/algorithm.hpp 2

Fuzzer: set-st-str

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 329 44.1%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 417 55.8%
All colors 746 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
211 211 5 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collision_count() const', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::move_collision_insert(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::basic_string , std::__1::allocator >)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collisions()', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::copy_collision_insert(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::basic_string , std::__1::allocator >)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::copy_collision_replace(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::basic_string , std::__1::allocator >*, std::__1::basic_string , std::__1::allocator >)']

211 269 immer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::do_add_mut(immer::no_transience_policy::apply >::type::edit,immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>*,std::__1::basic_string ,std::__1::allocator >,unsignedlong,unsignedint)const call site: 00000 /src/immer/immer/detail/hamts/champ.hpp:641
153 153 5 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collision_count() const', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::copy_collision_remove(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::basic_string , std::__1::allocator >*)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collisions()', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::delete_collision(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::move_collision_remove(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::basic_string , std::__1::allocator >*)']

153 173 immer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::sub_result_mutimmer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::do_sub_mut ,std::__1::allocator >>(immer::no_transience_policy::apply >::type::edit,immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>*,std::__1::basic_string ,std::__1::allocator >const&,unsignedlong,unsignedint,void*)const call site: 00000 /src/immer/immer/detail/hamts/champ.hpp:1345
153 153 4 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::copy_collision_insert(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::basic_string , std::__1::allocator >)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::copy_collision_replace(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::basic_string , std::__1::allocator >*, std::__1::basic_string , std::__1::allocator >)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collision_count() const', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collisions()']

153 153 immer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::do_add(immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>*,std::__1::basic_string ,std::__1::allocator >,unsignedlong,unsignedint)const call site: 00000 /src/immer/immer/detail/hamts/champ.hpp:568
88 88 3 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collision_count() const', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::copy_collision_remove(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::basic_string , std::__1::allocator >*)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collisions()']

88 94 immer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::sub_resultimmer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::do_sub ,std::__1::allocator >>(immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>*,std::__1::basic_string ,std::__1::allocator >const&,unsignedlong,unsignedint)const call site: 00000 /src/immer/immer/detail/hamts/champ.hpp:1201
21 21 1 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::delete_collision(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*)']

21 21 immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::delete_deep(immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>*,unsignedint) call site: 00000 /src/immer/immer/detail/hamts/node.hpp:1090
20 20 1 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::make_collision(std::__1::basic_string , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >)']

20 32 immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::make_merged_e(immer::no_transience_policy::apply >::type::edit,unsignedint,std::__1::basic_string ,std::__1::allocator >,unsignedlong,std::__1::basic_string ,std::__1::allocator >,unsignedlong) call site: 00000 /src/immer/immer/detail/hamts/node.hpp:1013
20 20 1 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::make_collision(std::__1::basic_string , std::__1::allocator >, std::__1::basic_string , std::__1::allocator >)']

20 20 immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::make_merged(unsignedint,std::__1::basic_string ,std::__1::allocator >,unsignedlong,std::__1::basic_string ,std::__1::allocator >,unsignedlong) call site: 00000 /src/immer/immer/detail/hamts/node.hpp:984
12 12 2 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collision_count() const', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collisions()']

12 14 immer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::do_check_champ(immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>*,unsignedint,unsignedlong,unsignedlong)const call site: 00000 /src/immer/immer/detail/hamts/champ.hpp:199
12 12 2 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collision_count() const', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collisions()']

12 12 immer::detail::hamts::champ_iterator ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::step_down() call site: 00000 /src/immer/immer/detail/hamts/champ_iterator.hpp:88
12 12 2 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collision_count() const', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collisions()']

12 12 immer::detail::hamts::champ_iterator ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::step_right() call site: 00000 /src/immer/immer/detail/hamts/champ_iterator.hpp:113
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31
0 15 1 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::delete_values(immer::detail::csl::member_two , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::values_data_t, immer::detail::csl::member >::type::ownee, void>::type>::type>::type*, unsigned int)']

0 15 immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::ensure_mutable_values(immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/hamts/node.hpp:378

Runtime coverage analysis

Covered functions
185
Functions that are reachable but not covered
69
Reachable functions
314
Percentage of reachable functions covered
78.03%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/set-st-str.cpp 4
/src/immer/immer/set.hpp 12
/src/immer/immer/detail/hamts/champ.hpp 25
/src/immer/immer/detail/hamts/node.hpp 58
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 10
/src/immer/immer/refcount/unsafe_refcount_policy.hpp 4
/src/immer/immer/detail/util.hpp 6
/src/immer/extra/fuzzer/fuzzer_input.hpp 7
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/hamts/bits.hpp 1
/src/immer/immer/transience/no_transience_policy.hpp 2
/src/immer/immer/detail/hamts/champ_iterator.hpp 5
/src/immer/immer/detail/iterator_facade.hpp 2
/src/immer/immer/algorithm.hpp 2

Fuzzer: map-st

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 310 36.1%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 548 63.8%
All colors 858 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31

Runtime coverage analysis

Covered functions
221
Functions that are reachable but not covered
66
Reachable functions
357
Percentage of reachable functions covered
81.51%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/map-st.cpp 6
/src/immer/immer/map.hpp 25
/src/immer/immer/detail/hamts/champ.hpp 29
/src/immer/immer/detail/hamts/node.hpp 63
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 10
/src/immer/immer/refcount/unsafe_refcount_policy.hpp 4
/src/immer/immer/detail/util.hpp 8
/src/immer/extra/fuzzer/fuzzer_input.hpp 7
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/hamts/bits.hpp 1
/src/immer/immer/transience/no_transience_policy.hpp 2
/src/immer/immer/detail/hamts/champ_iterator.hpp 5
/src/immer/immer/detail/iterator_facade.hpp 2
/src/immer/immer/algorithm.hpp 2

Fuzzer: set-st-str-conflict

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 239 31.9%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 508 68.0%
All colors 747 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
52 84 7 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::nodemap() const', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::make_inner_n(unsigned int, unsigned char, std::__1::basic_string , std::__1::allocator >)', 'immer::detail::hamts::champ , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::sub_result_mut::sub_result_mut(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>*, bool)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::owned_values(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>*, immer::no_transience_policy::apply >::type::edit)', 'std::__1::basic_string , std::__1::allocator >::~basic_string()', 'std::__1::basic_string , std::__1::allocator >::basic_string(std::__1::basic_string , std::__1::allocator > const&)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::datamap() const']

52 122 immer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,3u>::sub_result_mutimmer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,3u>::do_sub_mut ,std::__1::allocator >>(immer::no_transience_policy::apply >::type::edit,immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,3u>*,std::__1::basic_string ,std::__1::allocator >const&,unsignedlong,unsignedint,void*)const call site: 00000 /src/immer/immer/detail/hamts/champ.hpp:1443
52 60 4 :

['std::__1::basic_string , std::__1::allocator >::basic_string(std::__1::basic_string , std::__1::allocator > const&)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::make_inner_n(unsigned int, unsigned char, std::__1::basic_string , std::__1::allocator >)', 'immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::datamap() const', 'immer::detail::hamts::champ , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::sub_result::sub_result(immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>*)']

52 66 immer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,3u>::sub_resultimmer::detail::hamts::champ ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,3u>::do_sub ,std::__1::allocator >>(immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,3u>*,std::__1::basic_string ,std::__1::allocator >const&,unsignedlong,unsignedint)const call site: 00000 /src/immer/immer/detail/hamts/champ.hpp:1258
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31
0 15 1 :

['immer::detail::hamts::node , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::delete_values(immer::detail::csl::member_two , std::__1::allocator >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 3u>::values_data_t, immer::detail::csl::member >::type::ownee, void>::type>::type>::type*, unsigned int)']

0 15 immer::detail::hamts::node ,std::__1::allocator >,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,3u>::ensure_mutable_values(immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/hamts/node.hpp:378

Runtime coverage analysis

Covered functions
199
Functions that are reachable but not covered
47
Reachable functions
316
Percentage of reachable functions covered
85.13%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/set-st-str-conflict.cpp 4
/src/immer/immer/set.hpp 12
/src/immer/immer/detail/hamts/champ.hpp 25
/src/immer/immer/detail/hamts/node.hpp 58
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 10
/src/immer/immer/refcount/unsafe_refcount_policy.hpp 4
/src/immer/immer/detail/util.hpp 6
/src/immer/extra/fuzzer/fuzzer_input.hpp 7
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/hamts/bits.hpp 2
/src/immer/immer/transience/no_transience_policy.hpp 2
/src/immer/immer/detail/hamts/champ_iterator.hpp 5
/src/immer/immer/detail/iterator_facade.hpp 2
/src/immer/immer/algorithm.hpp 2

Fuzzer: map

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 384 41.1%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 550 58.8%
All colors 934 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31

Runtime coverage analysis

Covered functions
233
Functions that are reachable but not covered
86
Reachable functions
381
Percentage of reachable functions covered
77.43%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/map.cpp 8
/src/immer/immer/map.hpp 28
/src/immer/immer/detail/hamts/champ.hpp 34
/src/immer/immer/detail/hamts/node.hpp 63
/src/immer/immer/heap/debug_size_heap.hpp 2
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 10
/src/immer/immer/refcount/refcount_policy.hpp 4
/src/immer/immer/detail/util.hpp 8
/src/immer/extra/fuzzer/fuzzer_input.hpp 7
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/hamts/bits.hpp 1
/src/immer/immer/transience/no_transience_policy.hpp 2
/src/immer/immer/detail/hamts/champ_iterator.hpp 5
/src/immer/immer/detail/iterator_facade.hpp 2
/src/immer/immer/algorithm.hpp 2

Fuzzer: vector

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 118 32.5%
gold [1:9] 2 0.55%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 242 66.8%
All colors 362 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31
0 29 1 :

['void immer::detail::rbts::regular_pos , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 63 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_regular ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::regular_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 29 1 :

['void immer::detail::rbts::regular_pos , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 57 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_regular ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::regular_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 17 1 :

['void immer::detail::rbts::full_pos , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 51 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,false>::visit_regular ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 17 1 :

['void immer::detail::rbts::full_pos , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 51 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_regular ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 17 1 :

['void immer::detail::rbts::full_pos , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 45 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,false>::visit_regular ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 17 1 :

['void immer::detail::rbts::full_pos , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 45 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_regular ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,false>::visit_leaf ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_leaf_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_leaf ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_leaf_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,false>::visit_leaf ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::leaf_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_leaf ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::leaf_pos ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 6 1 :

['void immer::debug_size_heap ::deallocate<>(unsigned long, void*)']

0 6 voidimmer::split_heap<56ul,immer::with_free_list_node >>>,immer::debug_size_heap >::deallocate<>(unsignedlong,void*) call site: 00000 /src/immer/immer/heap/split_heap.hpp:34

Runtime coverage analysis

Covered functions
313
Functions that are reachable but not covered
85
Reachable functions
446
Percentage of reachable functions covered
80.94%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/vector.cpp 7
/src/immer/immer/vector.hpp 12
/src/immer/immer/detail/rbts/rbtree.hpp 22
/src/immer/immer/detail/rbts/node.hpp 30
/src/immer/immer/heap/split_heap.hpp 2
/src/immer/immer/heap/with_data.hpp 2
/src/immer/immer/heap/unsafe_free_list_heap.hpp 3
/src/immer/immer/heap/thread_local_free_list_heap.hpp 2
/src/immer/immer/heap/free_list_heap.hpp 3
/src/immer/immer/heap/debug_size_heap.hpp 2
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 8
/src/immer/immer/detail/util.hpp 4
/src/immer/immer/refcount/refcount_policy.hpp 3
/src/immer/extra/fuzzer/fuzzer_input.hpp 7
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/transience/no_transience_policy.hpp 3
/src/immer/immer/detail/rbts/position.hpp 21
/src/immer/immer/detail/rbts/operations.hpp 5

Fuzzer: vector-st

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 112 35.1%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 207 64.8%
All colors 319 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31
0 29 1 :

['void immer::detail::rbts::regular_pos , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 63 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_regular ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::regular_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 29 1 :

['void immer::detail::rbts::regular_pos , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 57 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_regular ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::regular_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 17 1 :

['void immer::detail::rbts::full_pos , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 51 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,false>::visit_regular ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 17 1 :

['void immer::detail::rbts::full_pos , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 51 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_regular ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 17 1 :

['void immer::detail::rbts::full_pos , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 45 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,false>::visit_regular ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 17 1 :

['void immer::detail::rbts::full_pos , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 45 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_regular ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,false>::visit_leaf ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_leaf_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_leaf ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::full_leaf_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,false>::visit_leaf ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::leaf_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,false,false>::visit_leaf ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::leaf_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 0 2 :

['std::__1::tuple , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, unsigned int, immer::detail::rbts::node , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*>::tuple , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*, 0>(std::__1::tuple , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*>&&)', 'std::__1::tuple ::type, std::__1::__unwrap_ref_decay ::type, std::__1::__unwrap_ref_decay ::type, std::__1::__unwrap_ref_decay , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&>::type> std::__1::make_tuple , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&>(unsigned int&&, decltype(nullptr)&&, unsigned int&, immer::detail::rbts::node , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 2u, 2u>*&)']

16 95 std::__1::tuple ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>,true,true>::visit_regular ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&>(immer::detail::rbts::regular_sub_pos ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,2u,2u>>&,unsignedlong,immer::no_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1021

Runtime coverage analysis

Covered functions
299
Functions that are reachable but not covered
84
Reachable functions
417
Percentage of reachable functions covered
79.86%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/vector-st.cpp 7
/src/immer/immer/vector.hpp 12
/src/immer/immer/detail/rbts/rbtree.hpp 22
/src/immer/immer/detail/rbts/node.hpp 30
/src/immer/immer/heap/cpp_heap.hpp 2
/src/immer/immer/detail/combine_standard_layout.hpp 8
/src/immer/immer/detail/util.hpp 4
/src/immer/immer/refcount/unsafe_refcount_policy.hpp 3
/src/immer/extra/fuzzer/fuzzer_input.hpp 8
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/transience/no_transience_policy.hpp 3
/src/immer/immer/detail/rbts/position.hpp 21
/src/immer/immer/detail/rbts/operations.hpp 5

Fuzzer: vector-gc

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 147 40.4%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 216 59.5%
All colors 363 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
8 8 3 :

['__cxa_allocate_exception', 'no_more_input::no_more_input()', '__cxa_throw']

8 8 fuzzer_input::next(unsignedlong) call site: 00000 /src/immer/extra/fuzzer/fuzzer_input.hpp:31
0 29 1 :

['void immer::detail::rbts::regular_pos , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 63 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,false,false>::visit_regular ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::regular_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 29 1 :

['void immer::detail::rbts::regular_pos , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 57 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,false,false>::visit_regular ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::regular_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 17 1 :

['void immer::detail::rbts::full_pos , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 51 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,true,false>::visit_regular ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 17 1 :

['void immer::detail::rbts::full_pos , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 51 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,false,false>::visit_regular ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1010
0 17 1 :

['void immer::detail::rbts::full_pos , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 45 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,true,false>::visit_regular ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 17 1 :

['void immer::detail::rbts::full_pos , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u> >::each_right (immer::detail::rbts::dec_visitor, unsigned int)']

16 45 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,false,false>::visit_regular ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::full_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1033
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,true,false>::visit_leaf ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::full_leaf_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,false,false>::visit_leaf ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::full_leaf_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,true,false>::visit_leaf ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::leaf_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 8 2 :

['std::__1::enable_if , int*>::type immer::detail::destroy_n (int*, unsigned int)', 'immer::detail::rbts::node , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>::leaf()']

0 8 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,false,false>::visit_leaf ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::leaf_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1067
0 0 2 :

['std::__1::tuple , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>*, unsigned int, immer::detail::rbts::node , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>*>::tuple , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>*, 0>(std::__1::tuple , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>*>&&)', 'std::__1::tuple ::type, std::__1::__unwrap_ref_decay ::type, std::__1::__unwrap_ref_decay ::type, std::__1::__unwrap_ref_decay , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>*&>::type> std::__1::make_tuple , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>*&>(unsigned int&&, decltype(nullptr)&&, unsigned int&, immer::detail::rbts::node , immer::no_refcount_policy, immer::spinlock_policy, immer::gc_transience_policy, false, false>, 2u, 2u>*&)']

16 101 std::__1::tuple ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*,unsignedint,immer::detail::rbts::node ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>*>immer::detail::rbts::slice_right_mut_visitor ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>,true,true>::visit_regular ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&>(immer::detail::rbts::regular_sub_pos ,immer::no_refcount_policy,immer::spinlock_policy,immer::gc_transience_policy,false,false>,2u,2u>>&,unsignedlong,immer::gc_transience_policy::apply >::type::edit) call site: 00000 /src/immer/immer/detail/rbts/operations.hpp:1021

Runtime coverage analysis

Covered functions
309
Functions that are reachable but not covered
118
Reachable functions
471
Percentage of reachable functions covered
74.95%
NB: The sum of covered functions and functions that are reachable but not covered need not be equal to Reachable functions . This is because the reachability analysis is an approximation and thus at runtime some functions may be covered that are not included in the reachability analysis. This is a limitation of our static analysis capabilities.
Function name source code lines source lines hit percentage hit

Files reached

filename functions hit
/src/immer/extra/fuzzer/vector-gc.cpp 9
/src/immer/extra/fuzzer/fuzzer_gc_guard.hpp 2
/src/immer/immer/vector.hpp 7
/src/immer/immer/detail/rbts/rbtree.hpp 22
/src/immer/immer/detail/rbts/node.hpp 32
/src/immer/immer/heap/gc_heap.hpp 3
/src/immer/immer/detail/combine_standard_layout.hpp 9
/src/immer/immer/detail/util.hpp 4
/src/immer/immer/refcount/no_refcount_policy.hpp 3
/src/immer/immer/vector_transient.hpp 8
/src/immer/immer/transience/gc_transience_policy.hpp 9
/src/immer/extra/fuzzer/fuzzer_input.hpp 10
/usr/local/bin/../include/c++/v1/exception 1
/src/immer/immer/detail/rbts/position.hpp 21
/src/immer/immer/detail/rbts/operations.hpp 5

Fuzzer: map-st-str

Call tree

The calltree shows the control flow of the fuzzer. This is overlaid with coverage information to display how much of the potential code a fuzzer can reach is in fact covered at runtime. In the following there is a link to a detailed calltree visualisation as well as a bitmap showing a high-level view of the calltree. For further information about these topics please see the glossary for full calltree and calltree overview

Call tree overview bitmap:

The distribution of callsites in terms of coloring is
Color Runtime hitcount Callsite count Percentage
red 0 545 52.3%
gold [1:9] 0 0.0%
yellow [10:29] 0 0.0%
greenyellow [30:49] 0 0.0%
lawngreen 50+ 497 47.6%
All colors 1042 100

Fuzz blockers

The followings are the branches where fuzzer fails to bypass.

Unique non-covered Complexity Unique Reachable Complexities Unique Reachable Functions All non-covered Complexity All Reachable Complexity Function Name Function Callsite Blocked Branch
226 226 5 :

['immer::detail::hamts::node , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::hash_key, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::equal_key, immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::copy_collision_replace(immer::detail::hamts::node , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::hash_key, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::equal_key, immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::pair , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >*, std::__1::pair , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >)', 'immer::detail::hamts::node , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::hash_key, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::equal_key, immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collision_count() const', 'immer::detail::hamts::node , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::hash_key, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::equal_key, immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::copy_collision_insert(immer::detail::hamts::node , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::hash_key, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::equal_key, immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::pair , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >)', 'immer::detail::hamts::node , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::hash_key, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::equal_key, immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::move_collision_insert(immer::detail::hamts::node , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::hash_key, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::equal_key, immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>*, std::__1::pair , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >)', 'immer::detail::hamts::node , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> > >, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::hash_key, immer::map , std::__1::allocator >, immer::box , std::__1::allocator >, immer::memory_policy , immer::refcount_policy, immer::spinlock_policy, immer::no_transience_policy, false, true> >, colliding_hash_t, std::__1::equal_to , immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::equal_key, immer::memory_policy , immer::unsafe_refcount_policy, immer::no_lock_policy, immer::no_transience_policy, false, true>, 5u>::collisions()']

226 286 immer::detail::hamts::champ ,std::__1::allocator >,immer::box ,std::__1::allocator >,immer::memory_policy ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>>>,immer::map ,std::__1::allocator >,immer::box ,std::__1::allocator >,immer::memory_policy ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>>,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::hash_key,immer::map ,std::__1::allocator >,immer::box ,std::__1::allocator >,immer::memory_policy ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>>,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::equal_key,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::do_add_mut(immer::no_transience_policy::apply >::type::edit,immer::detail::hamts::node ,std::__1::allocator >,immer::box ,std::__1::allocator >,immer::memory_policy ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>>>,immer::map ,std::__1::allocator >,immer::box ,std::__1::allocator >,immer::memory_policy ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>>,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::hash_key,immer::map ,std::__1::allocator >,immer::box ,std::__1::allocator >,immer::memory_policy ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>>,colliding_hash_t,std::__1::equal_to ,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>::equal_key,immer::memory_policy ,immer::unsafe_refcount_policy,immer::no_lock_policy,immer::no_transience_policy,false,true>,5u>*,std::__1::pair ,std::__1::allocator >,immer::box ,std::__1::allocator >,immer::memory_policy ,immer::refcount_policy,immer::spinlock_policy,immer::no_transience_policy,false,true>>>,unsignedlong,unsignedint)const call site: 00000