@@ -141,14 +141,9 @@ struct umfLevelZeroProviderTest
141
141
142
142
auto [l0_params, accessor] = this ->GetParam ();
143
143
params = l0_params;
144
- hDevice = ( ze_device_handle_t )params. level_zero_device_handle ;
144
+ memAccessor = accessor ;
145
145
hContext = (ze_context_handle_t )params.level_zero_context_handle ;
146
146
147
- if (params.memory_type == UMF_MEMORY_TYPE_HOST) {
148
- ASSERT_EQ (hDevice, nullptr );
149
- } else {
150
- ASSERT_NE (hDevice, nullptr );
151
- }
152
147
ASSERT_NE (hContext, nullptr );
153
148
154
149
switch (params.memory_type ) {
@@ -167,21 +162,14 @@ struct umfLevelZeroProviderTest
167
162
}
168
163
169
164
ASSERT_NE (zeMemoryTypeExpected, ZE_MEMORY_TYPE_UNKNOWN);
170
-
171
- memAccessor = accessor;
172
165
}
173
166
174
- void TearDown () override {
175
- int ret = destroy_context (hContext);
176
- ASSERT_EQ (ret, 0 );
177
- test::TearDown ();
178
- }
167
+ void TearDown () override { test::TearDown (); }
179
168
180
169
level_zero_memory_provider_params_t params;
181
- ze_device_handle_t hDevice = nullptr ;
170
+ MemoryAccessor *memAccessor = nullptr ;
182
171
ze_context_handle_t hContext = nullptr ;
183
172
ze_memory_type_t zeMemoryTypeExpected = ZE_MEMORY_TYPE_UNKNOWN;
184
- MemoryAccessor *memAccessor = nullptr ;
185
173
};
186
174
187
175
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST (umfLevelZeroProviderTest);
@@ -222,8 +210,97 @@ TEST_P(umfLevelZeroProviderTest, basic) {
222
210
umfMemoryProviderDestroy (provider);
223
211
}
224
212
225
- // TODO add Level Zero Memory Provider specyfic tests
226
- // TODO add negative test and check for Level Zero native errors
213
+ TEST_P (umfLevelZeroProviderTest, getPageSize) {
214
+ umf_memory_provider_handle_t provider = nullptr ;
215
+ umf_result_t umf_result = umfMemoryProviderCreate (
216
+ umfLevelZeroMemoryProviderOps (), ¶ms, &provider);
217
+ ASSERT_EQ (umf_result, UMF_RESULT_SUCCESS);
218
+ ASSERT_NE (provider, nullptr );
219
+
220
+ size_t recommendedPageSize = 0 ;
221
+ umf_result = umfMemoryProviderGetRecommendedPageSize (provider, 0 ,
222
+ &recommendedPageSize);
223
+ ASSERT_EQ (umf_result, UMF_RESULT_SUCCESS);
224
+ ASSERT_GE (recommendedPageSize, 0 );
225
+
226
+ size_t minPageSize = 0 ;
227
+ umf_result =
228
+ umfMemoryProviderGetMinPageSize (provider, nullptr , &minPageSize);
229
+ ASSERT_EQ (umf_result, UMF_RESULT_SUCCESS);
230
+ ASSERT_GE (minPageSize, 0 );
231
+
232
+ ASSERT_GE (recommendedPageSize, minPageSize);
233
+
234
+ umfMemoryProviderDestroy (provider);
235
+ }
236
+
237
+ TEST_P (umfLevelZeroProviderTest, getName) {
238
+ umf_memory_provider_handle_t provider = nullptr ;
239
+ umf_result_t umf_result = umfMemoryProviderCreate (
240
+ umfLevelZeroMemoryProviderOps (), ¶ms, &provider);
241
+ ASSERT_EQ (umf_result, UMF_RESULT_SUCCESS);
242
+ ASSERT_NE (provider, nullptr );
243
+
244
+ const char *name = umfMemoryProviderGetName (provider);
245
+ ASSERT_STREQ (name, " LEVEL_ZERO" );
246
+
247
+ umfMemoryProviderDestroy (provider);
248
+ }
249
+
250
+ TEST_P (umfLevelZeroProviderTest, allocInvalidSize) {
251
+ umf_memory_provider_handle_t provider = nullptr ;
252
+ umf_result_t umf_result = umfMemoryProviderCreate (
253
+ umfLevelZeroMemoryProviderOps (), ¶ms, &provider);
254
+ ASSERT_EQ (umf_result, UMF_RESULT_SUCCESS);
255
+ ASSERT_NE (provider, nullptr );
256
+
257
+ // try to alloc (int)-1
258
+ void *ptr = nullptr ;
259
+ umf_result = umfMemoryProviderAlloc (provider, -1 , 0 , &ptr);
260
+ ASSERT_EQ (umf_result, UMF_RESULT_ERROR_MEMORY_PROVIDER_SPECIFIC);
261
+ const char *message;
262
+ int32_t error;
263
+ umfMemoryProviderGetLastNativeError (provider, &message, &error);
264
+ ASSERT_EQ (error, ZE_RESULT_ERROR_UNSUPPORTED_SIZE);
265
+
266
+ // in case of size == 0 we should got INVALID_ARGUMENT error
267
+ // NOTE: this is invalid only for the DEVICE or SHARED allocations
268
+ if (params.memory_type != UMF_MEMORY_TYPE_HOST) {
269
+ umf_result = umfMemoryProviderAlloc (provider, 0 , 0 , &ptr);
270
+ ASSERT_EQ (umf_result, UMF_RESULT_ERROR_MEMORY_PROVIDER_SPECIFIC);
271
+ umfMemoryProviderGetLastNativeError (provider, &message, &error);
272
+ ASSERT_EQ (error, ZE_RESULT_ERROR_UNSUPPORTED_SIZE);
273
+ }
274
+
275
+ umfMemoryProviderDestroy (provider);
276
+ }
277
+
278
+ TEST_P (umfLevelZeroProviderTest, providerCreateInvalidArgs) {
279
+ umf_memory_provider_handle_t provider = nullptr ;
280
+ umf_result_t umf_result = umfMemoryProviderCreate (
281
+ umfLevelZeroMemoryProviderOps (), nullptr , &provider);
282
+ ASSERT_EQ (umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
283
+
284
+ umf_result = umfMemoryProviderCreate (nullptr , ¶ms, nullptr );
285
+ ASSERT_EQ (umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
286
+ }
287
+
288
+ TEST_P (umfLevelZeroProviderTest, getPageSizeInvalidArgs) {
289
+ umf_memory_provider_handle_t provider = nullptr ;
290
+ umf_result_t umf_result = umfMemoryProviderCreate (
291
+ umfLevelZeroMemoryProviderOps (), ¶ms, &provider);
292
+ ASSERT_EQ (umf_result, UMF_RESULT_SUCCESS);
293
+ ASSERT_NE (provider, nullptr );
294
+
295
+ umf_result = umfMemoryProviderGetMinPageSize (provider, nullptr , nullptr );
296
+ ASSERT_EQ (umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
297
+
298
+ umf_result = umfMemoryProviderGetRecommendedPageSize (provider, 0 , nullptr );
299
+ ASSERT_EQ (umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
300
+
301
+ umfMemoryProviderDestroy (provider);
302
+ }
303
+
227
304
// TODO add tests that mixes Level Zero Memory Provider and Disjoint Pool
228
305
229
306
level_zero_memory_provider_params_t l0Params_device_memory =
0 commit comments