@@ -141,14 +141,9 @@ struct umfLevelZeroProviderTest
141141
142142 auto [l0_params, accessor] = this ->GetParam ();
143143 params = l0_params;
144- hDevice = ( ze_device_handle_t )params. level_zero_device_handle ;
144+ memAccessor = accessor ;
145145 hContext = (ze_context_handle_t )params.level_zero_context_handle ;
146146
147- if (params.memory_type == UMF_MEMORY_TYPE_HOST) {
148- ASSERT_EQ (hDevice, nullptr );
149- } else {
150- ASSERT_NE (hDevice, nullptr );
151- }
152147 ASSERT_NE (hContext, nullptr );
153148
154149 switch (params.memory_type ) {
@@ -167,21 +162,14 @@ struct umfLevelZeroProviderTest
167162 }
168163
169164 ASSERT_NE (zeMemoryTypeExpected, ZE_MEMORY_TYPE_UNKNOWN);
170-
171- memAccessor = accessor;
172165 }
173166
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 (); }
179168
180169 level_zero_memory_provider_params_t params;
181- ze_device_handle_t hDevice = nullptr ;
170+ MemoryAccessor *memAccessor = nullptr ;
182171 ze_context_handle_t hContext = nullptr ;
183172 ze_memory_type_t zeMemoryTypeExpected = ZE_MEMORY_TYPE_UNKNOWN;
184- MemoryAccessor *memAccessor = nullptr ;
185173};
186174
187175GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST (umfLevelZeroProviderTest);
@@ -222,8 +210,97 @@ TEST_P(umfLevelZeroProviderTest, basic) {
222210 umfMemoryProviderDestroy (provider);
223211}
224212
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+
227304// TODO add tests that mixes Level Zero Memory Provider and Disjoint Pool
228305
229306level_zero_memory_provider_params_t l0Params_device_memory =
0 commit comments