Skip to content

Commit

Permalink
Add tests for pool from pointer
Browse files Browse the repository at this point in the history
Signed-off-by: Lukasz Dorau <[email protected]>
  • Loading branch information
ldorau committed Feb 25, 2025
1 parent 8db6bea commit dec4ce0
Showing 1 changed file with 110 additions and 2 deletions.
112 changes: 110 additions & 2 deletions test/provider_fixed_memory.cpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Copyright (C) 2024 Intel Corporation
// Copyright (C) 2024-2025 Intel Corporation
// Under the Apache License v2.0 with LLVM Exceptions. See LICENSE.TXT.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception

Expand All @@ -11,10 +11,12 @@
#endif

#include <umf/memory_provider.h>
#include <umf/pools/pool_proxy.h>
#include <umf/providers/provider_fixed_memory.h>

using umf_test::test;

#define FIXED_BUFFER_SIZE (10 * utils_get_page_size())
#define INVALID_PTR ((void *)0x01)

typedef enum purge_t {
Expand Down Expand Up @@ -59,7 +61,7 @@ struct FixedProviderTest
test::SetUp();

// Allocate a memory buffer to use with the fixed memory provider
memory_size = utils_get_page_size() * 10; // Allocate 10 pages
memory_size = FIXED_BUFFER_SIZE; // Allocate 10 pages
memory_buffer = malloc(memory_size);
ASSERT_NE(memory_buffer, nullptr);

Expand Down Expand Up @@ -391,3 +393,109 @@ TEST_P(FixedProviderTest, split) {
umf_result = umfMemoryProviderFree(provider.get(), ptr2, size);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
}

TEST_P(FixedProviderTest, pool_from_ptr_whole_size_success) {
umf_result_t umf_result;
size_t size_of_first_alloc;
size_t size_of_pool_from_ptr;
void *ptr_for_pool = nullptr;
void *ptr = nullptr;

umf_memory_pool_handle_t proxyFixedPool = nullptr;
umf_result = umfPoolCreate(umfProxyPoolOps(), provider.get(), nullptr, 0,
&proxyFixedPool);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

size_of_first_alloc = FIXED_BUFFER_SIZE - (2 * page_size);
ptr_for_pool = umfPoolMalloc(proxyFixedPool, size_of_first_alloc);
ASSERT_NE(ptr_for_pool, nullptr);

// Create provider parameters
size_of_pool_from_ptr = size_of_first_alloc; // whole size
umf_fixed_memory_provider_params_handle_t params = nullptr;
umf_result = umfFixedMemoryProviderParamsCreate(&params, ptr_for_pool,
size_of_pool_from_ptr);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
ASSERT_NE(params, nullptr);

umf_memory_provider_handle_t providerFromPtr = nullptr;
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
&providerFromPtr);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
ASSERT_NE(providerFromPtr, nullptr);

umf_memory_pool_handle_t poolFromPtr = nullptr;
umf_result = umfPoolCreate(umfProxyPoolOps(), providerFromPtr, nullptr, 0,
&poolFromPtr);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

ptr = umfPoolMalloc(poolFromPtr, size_of_pool_from_ptr);
ASSERT_NE(ptr, nullptr);

memset(ptr, 0xFF, size_of_pool_from_ptr);

umf_result = umfPoolFree(poolFromPtr, ptr);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

umfPoolDestroy(poolFromPtr);
umfMemoryProviderDestroy(providerFromPtr);
umfFixedMemoryProviderParamsDestroy(params);

umf_result = umfPoolFree(proxyFixedPool, ptr_for_pool);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

umfPoolDestroy(proxyFixedPool);
}

TEST_P(FixedProviderTest, pool_from_ptr_half_size_success) {
umf_result_t umf_result;
size_t size_of_first_alloc;
size_t size_of_pool_from_ptr;
void *ptr_for_pool = nullptr;
void *ptr = nullptr;

umf_memory_pool_handle_t proxyFixedPool = nullptr;
umf_result = umfPoolCreate(umfProxyPoolOps(), provider.get(), nullptr, 0,
&proxyFixedPool);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

size_of_first_alloc = FIXED_BUFFER_SIZE - (2 * page_size);
ptr_for_pool = umfPoolMalloc(proxyFixedPool, size_of_first_alloc);
ASSERT_NE(ptr_for_pool, nullptr);

// Create provider parameters
size_of_pool_from_ptr = size_of_first_alloc / 2; // half size
umf_fixed_memory_provider_params_handle_t params = nullptr;
umf_result = umfFixedMemoryProviderParamsCreate(&params, ptr_for_pool,
size_of_pool_from_ptr);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
ASSERT_NE(params, nullptr);

umf_memory_provider_handle_t providerFromPtr = nullptr;
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
&providerFromPtr);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
ASSERT_NE(providerFromPtr, nullptr);

umf_memory_pool_handle_t poolFromPtr = nullptr;
umf_result = umfPoolCreate(umfProxyPoolOps(), providerFromPtr, nullptr, 0,
&poolFromPtr);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

ptr = umfPoolMalloc(poolFromPtr, size_of_pool_from_ptr);
ASSERT_NE(ptr, nullptr);

memset(ptr, 0xFF, size_of_pool_from_ptr);

umf_result = umfPoolFree(poolFromPtr, ptr);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

umfPoolDestroy(poolFromPtr);
umfMemoryProviderDestroy(providerFromPtr);
umfFixedMemoryProviderParamsDestroy(params);

umf_result = umfPoolFree(proxyFixedPool, ptr_for_pool);
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);

umfPoolDestroy(proxyFixedPool);
}

0 comments on commit dec4ce0

Please sign in to comment.