diff options
Diffstat (limited to 'roms/skiboot/core/test/run-pool.c')
-rw-r--r-- | roms/skiboot/core/test/run-pool.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/roms/skiboot/core/test/run-pool.c b/roms/skiboot/core/test/run-pool.c new file mode 100644 index 000000000..e1c3843ff --- /dev/null +++ b/roms/skiboot/core/test/run-pool.c @@ -0,0 +1,59 @@ +// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later +/* + * Copyright 2014 IBM Corp + */ + +#include <pool.h> + +#include "../pool.c" + +#define POOL_OBJ_COUNT 10 +#define POOL_RESERVED_COUNT 2 +#define POOL_NORMAL_COUNT (POOL_OBJ_COUNT - POOL_RESERVED_COUNT) + +struct test_object +{ + int a; + int b; + int c; +}; + +int main(void) +{ + int i, count = 0; + struct pool pool; + struct test_object *a[POOL_OBJ_COUNT]; + + assert(!pool_init(&pool, sizeof(struct test_object), POOL_OBJ_COUNT, + POOL_RESERVED_COUNT)); + + a[0] = pool_get(&pool, POOL_NORMAL); + assert(a[0]); + pool_free_object(&pool, a[0]); + + for(i = 0; i < POOL_NORMAL_COUNT; i++) + { + a[i] = pool_get(&pool, POOL_NORMAL); + if (a[i]) + count++; + } + assert(count == POOL_NORMAL_COUNT); + + /* Normal pool should be exhausted */ + assert(!pool_get(&pool, POOL_NORMAL)); + + /* Reserved pool should still be available */ + a[POOL_NORMAL_COUNT] = pool_get(&pool, POOL_HIGH); + assert(a[POOL_NORMAL_COUNT]); + a[POOL_NORMAL_COUNT + 1] = pool_get(&pool, POOL_HIGH); + assert(a[POOL_NORMAL_COUNT + 1]); + + pool_free_object(&pool, a[3]); + + /* Should be a free object to get now */ + a[3] = pool_get(&pool, POOL_HIGH); + assert(a[3]); + + /* This exits depending on whether all tests passed */ + return 0; +} |