diff options
author | Igor Sysoev <igor@sysoev.ru> | 2017-08-30 00:31:02 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2017-08-30 00:31:02 +0300 |
commit | cdc7e4479ff5aa08df0857a13a7acd7a00b79c89 (patch) | |
tree | a57bf9251fc79d9ef7bd3d33b1d05f3813dc3d4a /test/nxt_mem_zone_test.c | |
parent | 92f3b852981c739a2e6ff6d50dc646fe86031b27 (diff) | |
download | unit-cdc7e4479ff5aa08df0857a13a7acd7a00b79c89.tar.gz unit-cdc7e4479ff5aa08df0857a13a7acd7a00b79c89.tar.bz2 |
Lib unit tests have been renamed to tests.
Diffstat (limited to 'test/nxt_mem_zone_test.c')
-rw-r--r-- | test/nxt_mem_zone_test.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/test/nxt_mem_zone_test.c b/test/nxt_mem_zone_test.c new file mode 100644 index 00000000..faf0feee --- /dev/null +++ b/test/nxt_mem_zone_test.c @@ -0,0 +1,74 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#include <nxt_main.h> +#include "nxt_tests.h" + + +nxt_int_t +nxt_mem_zone_test(nxt_thread_t *thr, nxt_uint_t runs, nxt_uint_t nblocks, + size_t max_size) +{ + void *start, **blocks; + size_t total, zone_size; + uint32_t size; + nxt_uint_t i, n; + nxt_mem_zone_t *zone; + const size_t page_size = 4096; + + nxt_thread_time_update(thr); + nxt_log_error(NXT_LOG_NOTICE, thr->log, + "mem zone test started, max:%uz", max_size); + + zone_size = (max_size + 1) * nblocks; + + start = nxt_memalign(page_size, zone_size); + if (start == NULL) { + return NXT_ERROR; + } + + zone = nxt_mem_zone_init(start, zone_size, page_size); + if (zone == NULL) { + return NXT_ERROR; + } + + blocks = nxt_malloc(nblocks * sizeof(void *)); + if (blocks == NULL) { + return NXT_ERROR; + } + + size = 0; + + for (i = 0; i < runs; i++) { + + total = 0; + + for (n = 0; n < nblocks; n++) { + size = nxt_murmur_hash2(&size, sizeof(uint32_t)); + + total += size & max_size; + blocks[n] = nxt_mem_zone_alloc(zone, size & max_size); + + if (blocks[n] == NULL) { + nxt_log_error(NXT_LOG_NOTICE, thr->log, + "mem zone test failed: %uz", total); + return NXT_ERROR; + } + } + + for (n = 0; n < nblocks; n++) { + nxt_mem_zone_free(zone, blocks[n]); + } + } + + nxt_free(blocks); + nxt_free(zone); + + nxt_thread_time_update(thr); + nxt_log_error(NXT_LOG_NOTICE, thr->log, "mem zone test passed"); + + return NXT_OK; +} |