1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- /* Shared definitions for dynarray tests.
- Copyright (C) 2017-2019 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <http://www.gnu.org/licenses/>. */
- #include <stddef.h>
- struct int_array
- {
- int *array;
- size_t length;
- };
- #define DYNARRAY_STRUCT dynarray_int
- #define DYNARRAY_ELEMENT int
- #define DYNARRAY_PREFIX dynarray_int_
- #define DYNARRAY_FINAL_TYPE struct int_array
- #include <malloc/dynarray-skeleton.c>
- struct str_array
- {
- char **array;
- size_t length;
- };
- #define DYNARRAY_STRUCT dynarray_str
- #define DYNARRAY_ELEMENT char *
- #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr)
- #define DYNARRAY_PREFIX dynarray_str_
- #define DYNARRAY_FINAL_TYPE struct str_array
- #include <malloc/dynarray-skeleton.c>
- /* Check that *DYN is equivalent to its initial state. */
- #define CHECK_INIT_STATE(type, dyn) \
- ({ \
- TEST_VERIFY_EXIT (!dynarray_##type##_has_failed (dyn)); \
- TEST_VERIFY_EXIT (dynarray_##type##_size (dyn) == 0); \
- TEST_VERIFY_EXIT ((dyn)->dynarray_header.array \
- == (dyn)->scratch); \
- TEST_VERIFY_EXIT ((dyn)->dynarray_header.allocated > 0); \
- (void) 0; \
- })
- /* Check that *DYN behaves as if it is in its initial state. */
- #define CHECK_EMPTY(type, dyn) \
- ({ \
- CHECK_INIT_STATE (type, (dyn)); \
- dynarray_##type##_free (dyn); \
- CHECK_INIT_STATE (type, (dyn)); \
- dynarray_##type##_clear (dyn); \
- CHECK_INIT_STATE (type, (dyn)); \
- dynarray_##type##_remove_last (dyn); \
- CHECK_INIT_STATE (type, (dyn)); \
- dynarray_##type##_mark_failed (dyn); \
- TEST_VERIFY_EXIT (dynarray_##type##_has_failed (dyn)); \
- dynarray_##type##_clear (dyn); \
- TEST_VERIFY_EXIT (dynarray_##type##_has_failed (dyn)); \
- dynarray_##type##_remove_last (dyn); \
- TEST_VERIFY_EXIT (dynarray_##type##_has_failed (dyn)); \
- TEST_VERIFY_EXIT (dynarray_##type##_emplace (dyn) == NULL); \
- dynarray_##type##_free (dyn); \
- CHECK_INIT_STATE (type, (dyn)); \
- /* These functions should not assert. */ \
- dynarray_##type##_begin (dyn); \
- dynarray_##type##_end (dyn); \
- (void) 0; \
- })
|