]>
Commit | Line | Data |
---|---|---|
91b6eb11 | 1 | /* Shared definitions for dynarray tests. |
6d7e8eda | 2 | Copyright (C) 2017-2023 Free Software Foundation, Inc. |
91b6eb11 FW |
3 | This file is part of the GNU C Library. |
4 | ||
5 | The GNU C Library is free software; you can redistribute it and/or | |
6 | modify it under the terms of the GNU Lesser General Public | |
7 | License as published by the Free Software Foundation; either | |
8 | version 2.1 of the License, or (at your option) any later version. | |
9 | ||
10 | The GNU C Library is distributed in the hope that it will be useful, | |
11 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | Lesser General Public License for more details. | |
14 | ||
15 | You should have received a copy of the GNU Lesser General Public | |
16 | License along with the GNU C Library; if not, see | |
5a82c748 | 17 | <https://www.gnu.org/licenses/>. */ |
91b6eb11 FW |
18 | |
19 | #include <stddef.h> | |
20 | ||
21 | struct int_array | |
22 | { | |
23 | int *array; | |
24 | size_t length; | |
25 | }; | |
26 | ||
27 | #define DYNARRAY_STRUCT dynarray_int | |
28 | #define DYNARRAY_ELEMENT int | |
29 | #define DYNARRAY_PREFIX dynarray_int_ | |
30 | #define DYNARRAY_FINAL_TYPE struct int_array | |
31 | #include <malloc/dynarray-skeleton.c> | |
32 | ||
33 | struct str_array | |
34 | { | |
35 | char **array; | |
36 | size_t length; | |
37 | }; | |
38 | ||
39 | #define DYNARRAY_STRUCT dynarray_str | |
40 | #define DYNARRAY_ELEMENT char * | |
41 | #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) | |
42 | #define DYNARRAY_PREFIX dynarray_str_ | |
43 | #define DYNARRAY_FINAL_TYPE struct str_array | |
44 | #include <malloc/dynarray-skeleton.c> | |
45 | ||
46 | /* Check that *DYN is equivalent to its initial state. */ | |
47 | #define CHECK_INIT_STATE(type, dyn) \ | |
48 | ({ \ | |
49 | TEST_VERIFY_EXIT (!dynarray_##type##_has_failed (dyn)); \ | |
50 | TEST_VERIFY_EXIT (dynarray_##type##_size (dyn) == 0); \ | |
de0e1b45 | 51 | TEST_VERIFY_EXIT ((dyn)->u.dynarray_header.array \ |
91b6eb11 | 52 | == (dyn)->scratch); \ |
de0e1b45 | 53 | TEST_VERIFY_EXIT ((dyn)->u.dynarray_header.allocated > 0); \ |
91b6eb11 FW |
54 | (void) 0; \ |
55 | }) | |
56 | ||
57 | /* Check that *DYN behaves as if it is in its initial state. */ | |
58 | #define CHECK_EMPTY(type, dyn) \ | |
59 | ({ \ | |
60 | CHECK_INIT_STATE (type, (dyn)); \ | |
61 | dynarray_##type##_free (dyn); \ | |
62 | CHECK_INIT_STATE (type, (dyn)); \ | |
63 | dynarray_##type##_clear (dyn); \ | |
64 | CHECK_INIT_STATE (type, (dyn)); \ | |
65 | dynarray_##type##_remove_last (dyn); \ | |
66 | CHECK_INIT_STATE (type, (dyn)); \ | |
67 | dynarray_##type##_mark_failed (dyn); \ | |
68 | TEST_VERIFY_EXIT (dynarray_##type##_has_failed (dyn)); \ | |
69 | dynarray_##type##_clear (dyn); \ | |
70 | TEST_VERIFY_EXIT (dynarray_##type##_has_failed (dyn)); \ | |
71 | dynarray_##type##_remove_last (dyn); \ | |
72 | TEST_VERIFY_EXIT (dynarray_##type##_has_failed (dyn)); \ | |
73 | TEST_VERIFY_EXIT (dynarray_##type##_emplace (dyn) == NULL); \ | |
74 | dynarray_##type##_free (dyn); \ | |
75 | CHECK_INIT_STATE (type, (dyn)); \ | |
f8bf87fa FW |
76 | /* These functions should not assert. */ \ |
77 | dynarray_##type##_begin (dyn); \ | |
78 | dynarray_##type##_end (dyn); \ | |
91b6eb11 FW |
79 | (void) 0; \ |
80 | }) |