tests/util_allocator.h

changeset 653
e081643aae2a
parent 628
1e2be40f0cb5
child 770
ed710122af44
equal deleted inserted replaced
652:bf817b825ed2 653:e081643aae2a
1 /*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 *
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 #ifndef UCX_UTIL_ALLOCATOR_H
30 #define UCX_UTIL_ALLOCATOR_H
31
32 #include "cx/allocator.h"
33
34 #include <set>
35
36 struct CxTestingAllocator : public CxAllocator {
37 /**
38 * Total number of all allocations (malloc, calloc, realloc).
39 * A realloc() does only count when the memory has to be moved.
40 */
41 unsigned alloc_total = 0;
42 /**
43 * Number of failed allocations (malloc, calloc, realloc).
44 */
45 unsigned alloc_failed = 0;
46 /**
47 * Total number of freed pointers.
48 * A reallocation also counts as a free when the memory has to be moved.
49 */
50 unsigned free_total = 0;
51 /**
52 * Number of failed free invocations.
53 * A free() is considered failed, if it has not been performed on tracked memory.
54 */
55 unsigned free_failed = 0;
56 /**
57 * The set of tracked memory blocks.
58 */
59 std::set<void *> tracked;
60
61 /**
62 * Constructs a new testing allocator.
63 */
64 CxTestingAllocator();
65
66 /**
67 * Verifies that this allocator has been used.
68 *
69 * @return true if any allocation was attempted using this allocator
70 */
71 [[nodiscard]] bool used() const;
72
73 /**
74 * Verifies that all allocated memory blocks are freed and no free occurred twice.
75 *
76 * @return true iff all tracked allocations / deallocations were valid
77 */
78 [[nodiscard]] bool verify() const;
79 };
80
81 #endif // UCX_UTIL_ALLOCATOR_H

mercurial