Skip to content

Commit a67d245

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

File tree

1 file changed

+151
-5
lines changed

1 file changed

+151
-5
lines changed

test/poolFixtures.hpp

Lines changed: 151 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,148 @@ TEST_P(umfPoolTest, mallocUsableSize) {
493495
}
494496
}
495497

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

0 commit comments

Comments
 (0)