Skip to content

Commit 44b393d

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

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 *);
@@ -474,4 +476,148 @@ TEST_P(umfPoolTest, mallocUsableSize) {
474476
#endif
475477
}
476478

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

0 commit comments

Comments
 (0)