Skip to content

Commit 0fcb0f7

Browse files
authored
Merge pull request #1350 from lukaszstolarczuk/set-mem-tests
Add tests for umfFixedMemoryProviderParamsSetMemory
2 parents 7857df6 + 65c6a33 commit 0fcb0f7

File tree

1 file changed

+102
-3
lines changed

1 file changed

+102
-3
lines changed

test/provider_fixed_memory.cpp

Lines changed: 102 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,11 @@ TEST_P(FixedProviderTest, alloc_page64_align_one_half_pages_WRONG_ALIGNMENT_2) {
240240
UMF_RESULT_ERROR_INVALID_ALIGNMENT, 0);
241241
}
242242

243+
TEST_P(FixedProviderTest, alloc_size_exceeds_buffer) {
244+
size_t size = memory_size + page_size;
245+
test_alloc_failure(size, 0, UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY, 0);
246+
}
247+
243248
// Other positive tests
244249

245250
TEST_P(FixedProviderTest, get_min_page_size) {
@@ -334,11 +339,105 @@ TEST_F(test, create_with_zero_size) {
334339
ASSERT_EQ(wrong_params, nullptr);
335340
}
336341

337-
TEST_P(FixedProviderTest, alloc_size_exceeds_buffer) {
338-
size_t size = memory_size + page_size;
339-
test_alloc_failure(size, 0, UMF_RESULT_ERROR_OUT_OF_HOST_MEMORY, 0);
342+
TEST_F(test, params_several_set_memory) {
343+
umf_memory_provider_handle_t provider1 = nullptr, provider2 = nullptr;
344+
size_t memory_size1 = FIXED_BUFFER_SIZE,
345+
memory_size2 = FIXED_BUFFER_SIZE * 10;
346+
size_t alloc_size1 = memory_size1 / 2, alloc_size2 = memory_size2 / 2;
347+
void *memory_buffer1 = nullptr;
348+
void *memory_buffer2 = nullptr;
349+
memory_buffer1 = malloc(memory_size1);
350+
memory_buffer2 = malloc(memory_size2);
351+
void *ptr1 = nullptr;
352+
void *ptr2 = nullptr;
353+
const char *source_str = "Allocated memory!";
354+
355+
umf_fixed_memory_provider_params_handle_t params = nullptr;
356+
umf_result_t umf_result = umfFixedMemoryProviderParamsCreate(
357+
&params, memory_buffer1, memory_size1);
358+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
359+
360+
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
361+
&provider1);
362+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
363+
364+
umf_result = umfMemoryProviderAlloc(provider1, alloc_size1, 0, &ptr1);
365+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
366+
ASSERT_NE(ptr1, nullptr);
367+
368+
// provider1: write to the allocated memory and free it
369+
memset(ptr1, '\0', alloc_size1);
370+
memcpy(ptr1, (const void *)source_str, sizeof(source_str));
371+
ASSERT_GE((uintptr_t)ptr1, (uintptr_t)memory_buffer1);
372+
ASSERT_LE((uintptr_t)ptr1 + alloc_size1,
373+
(uintptr_t)memory_buffer1 + memory_size1);
374+
375+
umf_result = umfMemoryProviderFree(provider1, ptr1, alloc_size1);
376+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
377+
378+
// Reuse the same params for the new provider
379+
umf_result = umfFixedMemoryProviderParamsSetMemory(params, memory_buffer2,
380+
memory_size2);
381+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
382+
383+
umf_result = umfMemoryProviderCreate(umfFixedMemoryProviderOps(), params,
384+
&provider2);
385+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
386+
387+
umf_result = umfMemoryProviderAlloc(provider2, alloc_size2, 0, &ptr2);
388+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
389+
ASSERT_NE(ptr2, nullptr);
390+
391+
// provider2: write to the allocated memory and free it
392+
memset(ptr2, '\0', alloc_size2);
393+
memcpy(ptr2, (const void *)source_str, sizeof(source_str));
394+
ASSERT_GE((uintptr_t)ptr2, (uintptr_t)memory_buffer2);
395+
ASSERT_LE((uintptr_t)ptr2 + alloc_size2,
396+
(uintptr_t)memory_buffer2 + memory_size2);
397+
398+
umf_result = umfMemoryProviderFree(provider2, ptr2, alloc_size2);
399+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
400+
401+
ASSERT_NE(ptr1, ptr2);
402+
ASSERT_NE(provider1, provider2);
403+
404+
// Cleanup
405+
umfMemoryProviderDestroy(provider1);
406+
umfMemoryProviderDestroy(provider2);
407+
408+
umf_result = umfFixedMemoryProviderParamsDestroy(params);
409+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
410+
411+
free(memory_buffer1);
412+
free(memory_buffer2);
413+
}
414+
415+
TEST_F(test, params_invalid_set_memory) {
416+
constexpr size_t memory_size = 100;
417+
char memory_buffer[memory_size];
418+
umf_fixed_memory_provider_params_handle_t valid_params = nullptr;
419+
umf_result_t umf_result = umfFixedMemoryProviderParamsCreate(
420+
&valid_params, memory_buffer, memory_size);
421+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
422+
423+
umf_result =
424+
umfFixedMemoryProviderParamsSetMemory(NULL, memory_buffer, memory_size);
425+
ASSERT_EQ(umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
426+
427+
umf_result =
428+
umfFixedMemoryProviderParamsSetMemory(valid_params, NULL, memory_size);
429+
ASSERT_EQ(umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
430+
431+
umf_result =
432+
umfFixedMemoryProviderParamsSetMemory(valid_params, memory_buffer, 0);
433+
ASSERT_EQ(umf_result, UMF_RESULT_ERROR_INVALID_ARGUMENT);
434+
435+
umf_result = umfFixedMemoryProviderParamsDestroy(valid_params);
436+
ASSERT_EQ(umf_result, UMF_RESULT_SUCCESS);
340437
}
341438

439+
// Split / merge tests
440+
342441
TEST_P(FixedProviderTest, merge) {
343442
umf_result_t umf_result;
344443
void *ptr1 = nullptr;

0 commit comments

Comments
 (0)