Skip to content

Commit 17969da

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

File tree

1 file changed

+144
-5
lines changed

1 file changed

+144
-5
lines changed

test/poolFixtures.hpp

Lines changed: 144 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 *);
@@ -493,4 +495,141 @@ TEST_P(umfPoolTest, mallocUsableSize) {
493495
}
494496
}
495497

498+
TEST_P(umfPoolTest, umfPoolAlignedMalloc) {
499+
#ifdef _WIN32
500+
// TODO: implement support for windows
501+
GTEST_SKIP() << "umfPoolAlignedMalloc() is not supported on Windows";
502+
#else /* !_WIN32 */
503+
umf_result_t umf_result;
504+
void *ptr = nullptr;
505+
const size_t size = 2 * 1024 * 1024; // 2MB
506+
507+
umf_memory_pool_handle_t pool_get = pool.get();
508+
509+
if (!umf_test::isAlignedAllocSupported(pool_get)) {
510+
GTEST_SKIP();
511+
}
512+
513+
ptr = umfPoolAlignedMalloc(pool_get, size, utils_get_page_size());
514+
ASSERT_NE(ptr, nullptr);
515+
516+
umf_result = umfPoolFree(pool_get, ptr);
517+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
518+
#endif /* !_WIN32 */
519+
}
520+
521+
TEST_P(umfPoolTest, pool_from_ptr_whole_size_success) {
522+
#ifdef _WIN32
523+
// TODO: implement support for windows
524+
GTEST_SKIP() << "umfPoolAlignedMalloc() is not supported on Windows";
525+
#else /* !_WIN32 */
526+
umf_result_t umf_result;
527+
size_t size_of_pool_from_ptr;
528+
void *ptr_for_pool = nullptr;
529+
void *ptr = nullptr;
530+
531+
umf_memory_pool_handle_t pool_get = pool.get();
532+
const size_t size_of_first_alloc = 2 * 1024 * 1024; // 2MB
533+
534+
if (!umf_test::isAlignedAllocSupported(pool_get)) {
535+
GTEST_SKIP();
536+
}
537+
538+
ptr_for_pool = umfPoolAlignedMalloc(pool_get, size_of_first_alloc,
539+
utils_get_page_size());
540+
ASSERT_NE(ptr_for_pool, nullptr);
541+
542+
// Create provider parameters
543+
size_of_pool_from_ptr = size_of_first_alloc; // whole size
544+
umf_fixed_memory_provider_params_handle_t params = nullptr;
545+
umf_result = umfFixedMemoryProviderParamsCreate(&params, ptr_for_pool,
546+
size_of_pool_from_ptr);
547+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
548+
ASSERT_NE(params, nullptr);
549+
550+
umf_memory_provider_handle_t providerFromPtr = nullptr;
551+
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
552+
&providerFromPtr);
553+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
554+
ASSERT_NE(providerFromPtr, nullptr);
555+
556+
umf_memory_pool_handle_t poolFromPtr = nullptr;
557+
umf_result = umfPoolCreate(umfProxyPoolOps(), providerFromPtr, nullptr, 0,
558+
&poolFromPtr);
559+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
560+
561+
ptr = umfPoolMalloc(poolFromPtr, size_of_pool_from_ptr);
562+
ASSERT_NE(ptr, nullptr);
563+
564+
memset(ptr, 0xFF, size_of_pool_from_ptr);
565+
566+
umf_result = umfPoolFree(poolFromPtr, ptr);
567+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
568+
569+
umfPoolDestroy(poolFromPtr);
570+
umfMemoryProviderDestroy(providerFromPtr);
571+
umfFixedMemoryProviderParamsDestroy(params);
572+
573+
umf_result = umfPoolFree(pool_get, ptr_for_pool);
574+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
575+
#endif /* !_WIN32 */
576+
}
577+
578+
TEST_P(umfPoolTest, pool_from_ptr_half_size_success) {
579+
#ifdef _WIN32
580+
// TODO: implement support for windows
581+
GTEST_SKIP() << "umfPoolAlignedMalloc() is not supported on Windows";
582+
#else /* !_WIN32 */
583+
umf_result_t umf_result;
584+
size_t size_of_pool_from_ptr;
585+
void *ptr_for_pool = nullptr;
586+
void *ptr = nullptr;
587+
588+
umf_memory_pool_handle_t pool_get = pool.get();
589+
const size_t size_of_first_alloc = 2 * 1024 * 1024; // 2MB
590+
591+
if (!umf_test::isAlignedAllocSupported(pool_get)) {
592+
GTEST_SKIP();
593+
}
594+
595+
ptr_for_pool = umfPoolAlignedMalloc(pool_get, size_of_first_alloc,
596+
utils_get_page_size());
597+
ASSERT_NE(ptr_for_pool, nullptr);
598+
599+
// Create provider parameters
600+
size_of_pool_from_ptr = size_of_first_alloc / 2; // half size
601+
umf_fixed_memory_provider_params_handle_t params = nullptr;
602+
umf_result = umfFixedMemoryProviderParamsCreate(&params, ptr_for_pool,
603+
size_of_pool_from_ptr);
604+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
605+
ASSERT_NE(params, nullptr);
606+
607+
umf_memory_provider_handle_t providerFromPtr = nullptr;
608+
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
609+
&providerFromPtr);
610+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
611+
ASSERT_NE(providerFromPtr, nullptr);
612+
613+
umf_memory_pool_handle_t poolFromPtr = nullptr;
614+
umf_result = umfPoolCreate(umfProxyPoolOps(), providerFromPtr, nullptr, 0,
615+
&poolFromPtr);
616+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
617+
618+
ptr = umfPoolMalloc(poolFromPtr, size_of_pool_from_ptr);
619+
ASSERT_NE(ptr, nullptr);
620+
621+
memset(ptr, 0xFF, size_of_pool_from_ptr);
622+
623+
umf_result = umfPoolFree(poolFromPtr, ptr);
624+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
625+
626+
umfPoolDestroy(poolFromPtr);
627+
umfMemoryProviderDestroy(providerFromPtr);
628+
umfFixedMemoryProviderParamsDestroy(params);
629+
630+
umf_result = umfPoolFree(pool_get, ptr_for_pool);
631+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
632+
#endif /* !_WIN32 */
633+
}
634+
496635
#endif /* UMF_TEST_POOL_FIXTURES_HPP */

0 commit comments

Comments
 (0)