Skip to content

Commit eb70506

Browse files
committed
Add tests for pool from pointer to poolFixtures.hpp
Signed-off-by: Lukasz Dorau <[email protected]>
1 parent 3bb3390 commit eb70506

File tree

1 file changed

+113
-5
lines changed

1 file changed

+113
-5
lines changed

test/poolFixtures.hpp

Lines changed: 113 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,21 @@
55
#ifndef UMF_TEST_POOL_FIXTURES_HPP
66
#define UMF_TEST_POOL_FIXTURES_HPP 1
77

8-
#include "pool.hpp"
9-
#include "provider.hpp"
10-
#include "umf/providers/provider_devdax_memory.h"
11-
#include "utils/utils_sanitizers.h"
12-
138
#include <array>
149
#include <cstring>
1510
#include <functional>
1611
#include <random>
1712
#include <string>
1813
#include <thread>
1914

15+
#include <umf/pools/pool_proxy.h>
16+
#include <umf/providers/provider_devdax_memory.h>
17+
#include <umf/providers/provider_fixed_memory.h>
18+
2019
#include "../malloc_compliance_tests.hpp"
20+
#include "pool.hpp"
21+
#include "provider.hpp"
22+
#include "utils/utils_sanitizers.h"
2123

2224
typedef void *(*pfnPoolParamsCreate)();
2325
typedef umf_result_t (*pfnPoolParamsDestroy)(void *);
@@ -474,4 +476,110 @@ TEST_P(umfPoolTest, mallocUsableSize) {
474476
#endif
475477
}
476478

479+
TEST_P(umfPoolTest, pool_from_ptr_whole_size_success) {
480+
umf_result_t umf_result;
481+
size_t size_of_first_alloc;
482+
size_t size_of_pool_from_ptr;
483+
void *ptr_for_pool = nullptr;
484+
void *ptr = nullptr;
485+
486+
umf_memory_pool_handle_t pool_get = pool.get();
487+
size_of_first_alloc = 2 * 1024 * 1024; // 2MB
488+
489+
if (!umf_test::isAlignedAllocSupported(pool_get)) {
490+
GTEST_SKIP();
491+
}
492+
493+
ptr_for_pool = umfPoolAlignedMalloc(pool_get, size_of_first_alloc,
494+
size_of_first_alloc);
495+
ASSERT_NE(ptr_for_pool, nullptr);
496+
497+
// Create provider parameters
498+
size_of_pool_from_ptr = size_of_first_alloc; // whole size
499+
umf_fixed_memory_provider_params_handle_t params = nullptr;
500+
umf_result = umfFixedMemoryProviderParamsCreate(&params, ptr_for_pool,
501+
size_of_pool_from_ptr);
502+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
503+
ASSERT_NE(params, nullptr);
504+
505+
umf_memory_provider_handle_t providerFromPtr = nullptr;
506+
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
507+
&providerFromPtr);
508+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
509+
ASSERT_NE(providerFromPtr, nullptr);
510+
511+
umf_memory_pool_handle_t poolFromPtr = nullptr;
512+
umf_result = umfPoolCreate(umfProxyPoolOps(), providerFromPtr, nullptr, 0,
513+
&poolFromPtr);
514+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
515+
516+
ptr = umfPoolMalloc(poolFromPtr, size_of_pool_from_ptr);
517+
ASSERT_NE(ptr, nullptr);
518+
519+
memset(ptr, 0xFF, size_of_pool_from_ptr);
520+
521+
umf_result = umfPoolFree(poolFromPtr, ptr);
522+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
523+
524+
umfPoolDestroy(poolFromPtr);
525+
umfMemoryProviderDestroy(providerFromPtr);
526+
umfFixedMemoryProviderParamsDestroy(params);
527+
528+
umf_result = umfPoolFree(pool_get, ptr_for_pool);
529+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
530+
}
531+
532+
TEST_P(umfPoolTest, pool_from_ptr_half_size_success) {
533+
umf_result_t umf_result;
534+
size_t size_of_first_alloc;
535+
size_t size_of_pool_from_ptr;
536+
void *ptr_for_pool = nullptr;
537+
void *ptr = nullptr;
538+
539+
umf_memory_pool_handle_t pool_get = pool.get();
540+
size_of_first_alloc = 2 * 1024 * 1024; // 2MB
541+
542+
if (!umf_test::isAlignedAllocSupported(pool_get)) {
543+
GTEST_SKIP();
544+
}
545+
546+
ptr_for_pool = umfPoolAlignedMalloc(pool_get, size_of_first_alloc,
547+
size_of_first_alloc);
548+
ASSERT_NE(ptr_for_pool, nullptr);
549+
550+
// Create provider parameters
551+
size_of_pool_from_ptr = size_of_first_alloc / 2; // half size
552+
umf_fixed_memory_provider_params_handle_t params = nullptr;
553+
umf_result = umfFixedMemoryProviderParamsCreate(&params, ptr_for_pool,
554+
size_of_pool_from_ptr);
555+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
556+
ASSERT_NE(params, nullptr);
557+
558+
umf_memory_provider_handle_t providerFromPtr = nullptr;
559+
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
560+
&providerFromPtr);
561+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
562+
ASSERT_NE(providerFromPtr, nullptr);
563+
564+
umf_memory_pool_handle_t poolFromPtr = nullptr;
565+
umf_result = umfPoolCreate(umfProxyPoolOps(), providerFromPtr, nullptr, 0,
566+
&poolFromPtr);
567+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
568+
569+
ptr = umfPoolMalloc(poolFromPtr, size_of_pool_from_ptr);
570+
ASSERT_NE(ptr, nullptr);
571+
572+
memset(ptr, 0xFF, size_of_pool_from_ptr);
573+
574+
umf_result = umfPoolFree(poolFromPtr, ptr);
575+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
576+
577+
umfPoolDestroy(poolFromPtr);
578+
umfMemoryProviderDestroy(providerFromPtr);
579+
umfFixedMemoryProviderParamsDestroy(params);
580+
581+
umf_result = umfPoolFree(pool_get, ptr_for_pool);
582+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
583+
}
584+
477585
#endif /* UMF_TEST_POOL_FIXTURES_HPP */

0 commit comments

Comments
 (0)