|
19 | 19 | using umf_test::test;
|
20 | 20 | using namespace umf_test;
|
21 | 21 |
|
| 22 | +struct LevelZeroProviderInit |
| 23 | + : public test, |
| 24 | + public ::testing::WithParamInterface<umf_usm_memory_type_t> {}; |
| 25 | + |
| 26 | +INSTANTIATE_TEST_SUITE_P(, LevelZeroProviderInit, |
| 27 | + ::testing::Values(UMF_MEMORY_TYPE_HOST, |
| 28 | + UMF_MEMORY_TYPE_DEVICE, |
| 29 | + UMF_MEMORY_TYPE_SHARED)); |
| 30 | + |
| 31 | +TEST_P(LevelZeroProviderInit, FailNullContext) { |
| 32 | + umf_memory_provider_ops_t *ops = umfLevelZeroMemoryProviderOps(); |
| 33 | + ASSERT_NE(ops, nullptr); |
| 34 | + |
| 35 | + auto memory_type = GetParam(); |
| 36 | + |
| 37 | + level_zero_memory_provider_params_t params = {nullptr, nullptr, memory_type, |
| 38 | + nullptr, 0}; |
| 39 | + |
| 40 | + umf_memory_provider_handle_t provider = nullptr; |
| 41 | + umf_result_t result = umfMemoryProviderCreate(ops, ¶ms, &provider); |
| 42 | + ASSERT_EQ(result, UMF_RESULT_ERROR_INVALID_ARGUMENT); |
| 43 | +} |
| 44 | + |
| 45 | +TEST_P(LevelZeroProviderInit, FailNullDevice) { |
| 46 | + if (GetParam() == UMF_MEMORY_TYPE_HOST) { |
| 47 | + GTEST_SKIP() << "Host memory does not require device handle"; |
| 48 | + } |
| 49 | + |
| 50 | + umf_memory_provider_ops_t *ops = umfLevelZeroMemoryProviderOps(); |
| 51 | + ASSERT_NE(ops, nullptr); |
| 52 | + |
| 53 | + auto memory_type = GetParam(); |
| 54 | + auto params = create_level_zero_prov_params(memory_type); |
| 55 | + params.level_zero_device_handle = nullptr; |
| 56 | + |
| 57 | + umf_memory_provider_handle_t provider = nullptr; |
| 58 | + umf_result_t result = umfMemoryProviderCreate(ops, ¶ms, &provider); |
| 59 | + ASSERT_EQ(result, UMF_RESULT_ERROR_INVALID_ARGUMENT); |
| 60 | +} |
| 61 | + |
| 62 | +TEST_F(test, FailNonNullDevice) { |
| 63 | + umf_memory_provider_ops_t *ops = umfLevelZeroMemoryProviderOps(); |
| 64 | + ASSERT_NE(ops, nullptr); |
| 65 | + |
| 66 | + auto memory_type = UMF_MEMORY_TYPE_HOST; |
| 67 | + |
| 68 | + // prepare params for device to get non-null device handle |
| 69 | + auto params = create_level_zero_prov_params(UMF_MEMORY_TYPE_DEVICE); |
| 70 | + params.memory_type = memory_type; |
| 71 | + |
| 72 | + umf_memory_provider_handle_t provider = nullptr; |
| 73 | + umf_result_t result = umfMemoryProviderCreate(ops, ¶ms, &provider); |
| 74 | + ASSERT_EQ(result, UMF_RESULT_ERROR_INVALID_ARGUMENT); |
| 75 | +} |
| 76 | + |
| 77 | +TEST_F(test, FailMismatchedResidentHandlesCount) { |
| 78 | + umf_memory_provider_ops_t *ops = umfLevelZeroMemoryProviderOps(); |
| 79 | + ASSERT_NE(ops, nullptr); |
| 80 | + |
| 81 | + auto memory_type = UMF_MEMORY_TYPE_DEVICE; |
| 82 | + |
| 83 | + auto params = create_level_zero_prov_params(memory_type); |
| 84 | + params.resident_device_count = 99; |
| 85 | + |
| 86 | + umf_memory_provider_handle_t provider = nullptr; |
| 87 | + umf_result_t result = umfMemoryProviderCreate(ops, ¶ms, &provider); |
| 88 | + ASSERT_EQ(result, UMF_RESULT_ERROR_INVALID_ARGUMENT); |
| 89 | +} |
| 90 | + |
| 91 | +TEST_F(test, FailMismatchedResidentHandlesPtr) { |
| 92 | + umf_memory_provider_ops_t *ops = umfLevelZeroMemoryProviderOps(); |
| 93 | + ASSERT_NE(ops, nullptr); |
| 94 | + |
| 95 | + auto memory_type = UMF_MEMORY_TYPE_DEVICE; |
| 96 | + |
| 97 | + auto params = create_level_zero_prov_params(memory_type); |
| 98 | + params.resident_device_handles = ¶ms.level_zero_device_handle; |
| 99 | + |
| 100 | + umf_memory_provider_handle_t provider = nullptr; |
| 101 | + umf_result_t result = umfMemoryProviderCreate(ops, ¶ms, &provider); |
| 102 | + ASSERT_EQ(result, UMF_RESULT_ERROR_INVALID_ARGUMENT); |
| 103 | +} |
| 104 | + |
22 | 105 | class LevelZeroMemoryAccessor : public MemoryAccessor {
|
23 | 106 | public:
|
24 | 107 | LevelZeroMemoryAccessor(ze_context_handle_t hContext,
|
@@ -61,7 +144,11 @@ struct umfLevelZeroProviderTest
|
61 | 144 | hDevice = (ze_device_handle_t)params.level_zero_device_handle;
|
62 | 145 | hContext = (ze_context_handle_t)params.level_zero_context_handle;
|
63 | 146 |
|
64 |
| - ASSERT_NE(hDevice, nullptr); |
| 147 | + if (params.memory_type == UMF_MEMORY_TYPE_HOST) { |
| 148 | + ASSERT_EQ(hDevice, nullptr); |
| 149 | + } else { |
| 150 | + ASSERT_NE(hDevice, nullptr); |
| 151 | + } |
65 | 152 | ASSERT_NE(hContext, nullptr);
|
66 | 153 |
|
67 | 154 | switch (params.memory_type) {
|
|
0 commit comments