Skip to content

Commit 8c56438

Browse files
committed
Add pool manager tests
1 parent 0cbc511 commit 8c56438

File tree

2 files changed

+76
-9
lines changed

2 files changed

+76
-9
lines changed

test/usm/CMakeLists.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,21 @@ function(add_usm_test name)
1010
add_ur_executable(${TEST_TARGET_NAME}
1111
${UR_USM_TEST_DIR}/../conformance/source/environment.cpp
1212
${UR_USM_TEST_DIR}/../conformance/source/main.cpp
13+
${UR_USM_TEST_DIR}/../unified_malloc_framework/common/provider.c
14+
${UR_USM_TEST_DIR}/../unified_malloc_framework/common/pool.c
1315
${ARGN})
1416
target_link_libraries(${TEST_TARGET_NAME}
1517
PRIVATE
1618
${PROJECT_NAME}::common
1719
${PROJECT_NAME}::loader
1820
ur_testing
1921
GTest::gtest_main)
20-
add_test(NAME usm-${name}
22+
add_test(NAME usm-${name}
2123
COMMAND ${TEST_TARGET_NAME}
2224
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
23-
set_tests_properties(usm-${name} PROPERTIES LABELS "usm")
25+
set_tests_properties(usm-${name} PROPERTIES
26+
LABELS "usm"
27+
ENVIRONMENT "UR_ADAPTERS_FORCE_LOAD=\"$<TARGET_FILE:ur_adapter_null>\"")
2428
target_compile_definitions("usm_test-${name}" PRIVATE DEVICES_ENVIRONMENT)
2529
endfunction()
2630

test/usm/usmPoolManager.cpp

Lines changed: 70 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,18 @@
33
// See LICENSE.TXT
44
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
55

6-
#include "../unified_malloc_framework/common/pool.hpp"
7-
#include "../unified_malloc_framework/common/provider.hpp"
86
#include "ur_pool_manager.hpp"
97

10-
#include <uur/fixtures.h>
8+
#include "../unified_malloc_framework/common/pool.h"
9+
#include "../unified_malloc_framework/common/provider.h"
1110

12-
#include <unordered_set>
11+
#include <uur/fixtures.h>
1312

14-
struct urUsmPoolManagerTest
13+
struct urUsmPoolDescriptorTest
1514
: public uur::urMultiDeviceContextTest,
1615
::testing::WithParamInterface<ur_usm_pool_handle_t> {};
1716

18-
TEST_P(urUsmPoolManagerTest, poolIsPerContextTypeAndDevice) {
17+
TEST_P(urUsmPoolDescriptorTest, poolIsPerContextTypeAndDevice) {
1918
auto &devices = uur::DevicesEnvironment::instance->devices;
2019
auto poolHandle = this->GetParam();
2120

@@ -49,7 +48,71 @@ TEST_P(urUsmPoolManagerTest, poolIsPerContextTypeAndDevice) {
4948
ASSERT_EQ(sharedPools, devices.size() * 2);
5049
}
5150

52-
INSTANTIATE_TEST_SUITE_P(urUsmPoolManagerTest, urUsmPoolManagerTest,
51+
INSTANTIATE_TEST_SUITE_P(urUsmPoolDescriptorTest, urUsmPoolDescriptorTest,
5352
::testing::Values(nullptr));
5453

5554
// TODO: add test with sub-devices
55+
56+
struct urUsmPoolManagerTest : public uur::urContextTest {
57+
void SetUp() override {
58+
UUR_RETURN_ON_FATAL_FAILURE(urContextTest::SetUp());
59+
auto [ret, descs] = usm::pool_descriptor::create(nullptr, context);
60+
ASSERT_EQ(ret, UR_RESULT_SUCCESS);
61+
poolDescriptors = descs;
62+
}
63+
64+
std::vector<usm::pool_descriptor> poolDescriptors;
65+
};
66+
67+
TEST_P(urUsmPoolManagerTest, poolManagerPopulate) {
68+
auto [ret, manager] = usm::pool_manager<usm::pool_descriptor>::create();
69+
ASSERT_EQ(ret, UR_RESULT_SUCCESS);
70+
71+
for (auto &desc : poolDescriptors) {
72+
// Populate the pool manager
73+
auto pool = nullPoolCreate();
74+
ASSERT_NE(pool, nullptr);
75+
auto poolUnique = umf::pool_unique_handle_t(pool, umfPoolDestroy);
76+
ASSERT_NE(poolUnique, nullptr);
77+
ret = manager.addPool(desc, poolUnique);
78+
ASSERT_EQ(ret, UR_RESULT_SUCCESS);
79+
}
80+
81+
for (auto &desc : poolDescriptors) {
82+
// Confirm that there is a pool for each descriptor
83+
auto hPoolOpt = manager.getPool(desc);
84+
ASSERT_TRUE(hPoolOpt.has_value());
85+
ASSERT_NE(hPoolOpt.value(), nullptr);
86+
}
87+
}
88+
89+
TEST_P(urUsmPoolManagerTest, poolManagerInsertExisting) {
90+
auto [ret, manager] = usm::pool_manager<usm::pool_descriptor>::create();
91+
ASSERT_EQ(ret, UR_RESULT_SUCCESS);
92+
93+
auto desc = poolDescriptors[0];
94+
95+
auto pool = nullPoolCreate();
96+
ASSERT_NE(pool, nullptr);
97+
auto poolUnique = umf::pool_unique_handle_t(pool, umfPoolDestroy);
98+
ASSERT_NE(poolUnique, nullptr);
99+
100+
ret = manager.addPool(desc, poolUnique);
101+
ASSERT_EQ(ret, UR_RESULT_SUCCESS);
102+
103+
// Inserting an existing key should return an error
104+
ret = manager.addPool(desc, poolUnique);
105+
ASSERT_EQ(ret, UR_RESULT_ERROR_INVALID_ARGUMENT);
106+
}
107+
108+
TEST_P(urUsmPoolManagerTest, poolManagerGetNonexistant) {
109+
auto [ret, manager] = usm::pool_manager<usm::pool_descriptor>::create();
110+
ASSERT_EQ(ret, UR_RESULT_SUCCESS);
111+
112+
for (auto &desc : poolDescriptors) {
113+
auto hPool = manager.getPool(desc);
114+
ASSERT_FALSE(hPool.has_value());
115+
}
116+
}
117+
118+
UUR_INSTANTIATE_DEVICE_TEST_SUITE_P(urUsmPoolManagerTest);

0 commit comments

Comments
 (0)