mirror of
https://github.com/tailix/libkernaux.git
synced 2025-02-17 15:45:32 -05:00
Main: include/kernaux/memmap.h: Write tests (closes #58)
This commit is contained in:
parent
1a1a7af98f
commit
82dcb74824
5 changed files with 202 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -128,6 +128,7 @@
|
|||
/tests/test_cmdline_gen.c
|
||||
/tests/test_elf
|
||||
/tests/test_mbr
|
||||
/tests/test_memmap
|
||||
/tests/test_multiboot2_common_packing
|
||||
/tests/test_multiboot2_header_helpers
|
||||
/tests/test_multiboot2_header_print
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
#define SIZE_256MiB ( 256 * 1024 * 1024)
|
||||
|
|
|
@ -41,6 +41,7 @@ bool KernAux_MemMap_add_entry(
|
|||
|
||||
if (MEMMAP.entries_count >= KERNAUX_MEMMAP_ENTRIES_MAX) return false;
|
||||
if (SIZE_MAX - start < size) return false;
|
||||
if (size == 0) return false;
|
||||
|
||||
const size_t index = MEMMAP.entries_count++;
|
||||
|
||||
|
|
|
@ -103,6 +103,16 @@ test_mbr_LDADD = $(top_builddir)/libkernaux.la
|
|||
test_mbr_SOURCES = test_mbr.c
|
||||
endif
|
||||
|
||||
###############
|
||||
# test_memmap #
|
||||
###############
|
||||
|
||||
if WITH_MEMMAP
|
||||
TESTS += test_memmap
|
||||
test_memmap_LDADD = $(top_builddir)/libkernaux.la
|
||||
test_memmap_SOURCES = test_memmap.c
|
||||
endif
|
||||
|
||||
##################################
|
||||
# test_multiboot2_common_packing #
|
||||
##################################
|
||||
|
|
189
tests/test_memmap.c
Normal file
189
tests/test_memmap.c
Normal file
|
@ -0,0 +1,189 @@
|
|||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
#include <kernaux/memmap.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
#include <stddef.h>
|
||||
#include <string.h>
|
||||
|
||||
static KernAux_MemMap memmap;
|
||||
|
||||
#define MEMSET memset(memmap, 0xff, sizeof(memmap))
|
||||
#define MEMMAP (*memmap)
|
||||
|
||||
int main()
|
||||
{
|
||||
{
|
||||
MEMSET;
|
||||
KernAux_MemMap_init(memmap, 0);
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 0);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(KernAux_MemMap_finish(memmap));
|
||||
|
||||
assert(MEMMAP.is_finished);
|
||||
assert(MEMMAP.memory_size == 0);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(KernAux_MemMap_entry_by_index(memmap, 0) == NULL);
|
||||
}
|
||||
|
||||
{
|
||||
MEMSET;
|
||||
KernAux_MemMap_init(memmap, 0);
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 0);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(!KernAux_MemMap_add_entry(memmap, false, NULL, 0, 0));
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 0);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(KernAux_MemMap_finish(memmap));
|
||||
|
||||
assert(MEMMAP.is_finished);
|
||||
assert(MEMMAP.memory_size == 0);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(KernAux_MemMap_entry_by_index(memmap, 0) == NULL);
|
||||
}
|
||||
|
||||
{
|
||||
MEMSET;
|
||||
KernAux_MemMap_init(memmap, 1);
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 1);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(KernAux_MemMap_add_entry(memmap, false, NULL, 0, 1));
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 1);
|
||||
assert(MEMMAP.entries_count == 1);
|
||||
|
||||
assert(KernAux_MemMap_finish(memmap));
|
||||
|
||||
assert(MEMMAP.is_finished);
|
||||
assert(MEMMAP.memory_size == 1);
|
||||
assert(MEMMAP.entries_count == 1);
|
||||
assert(MEMMAP.entries[0].is_available == false);
|
||||
assert(MEMMAP.entries[0].tag[0] == '\0');
|
||||
assert(MEMMAP.entries[0].start == 0);
|
||||
assert(MEMMAP.entries[0].size == 1);
|
||||
assert(MEMMAP.entries[0].end == 0);
|
||||
assert(MEMMAP.entries[0].limit == 1);
|
||||
|
||||
assert(KernAux_MemMap_entry_by_index(memmap, 0) == &MEMMAP.entries[0]);
|
||||
}
|
||||
|
||||
{
|
||||
MEMSET;
|
||||
KernAux_MemMap_init(memmap, 2);
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 2);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(KernAux_MemMap_add_entry(memmap, false, NULL, 0, 2));
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 2);
|
||||
assert(MEMMAP.entries_count == 1);
|
||||
|
||||
assert(KernAux_MemMap_finish(memmap));
|
||||
|
||||
assert(MEMMAP.is_finished);
|
||||
assert(MEMMAP.memory_size == 2);
|
||||
assert(MEMMAP.entries_count == 1);
|
||||
assert(MEMMAP.entries[0].is_available == false);
|
||||
assert(MEMMAP.entries[0].tag[0] == '\0');
|
||||
assert(MEMMAP.entries[0].start == 0);
|
||||
assert(MEMMAP.entries[0].size == 2);
|
||||
assert(MEMMAP.entries[0].end == 1);
|
||||
assert(MEMMAP.entries[0].limit == 2);
|
||||
|
||||
assert(KernAux_MemMap_entry_by_index(memmap, 0) == &MEMMAP.entries[0]);
|
||||
}
|
||||
|
||||
{
|
||||
MEMSET;
|
||||
KernAux_MemMap_init(memmap, 1);
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 1);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(KernAux_MemMap_add_entry(memmap, false, NULL, 0, 2));
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 1);
|
||||
assert(MEMMAP.entries_count == 1);
|
||||
|
||||
assert(!KernAux_MemMap_finish(memmap));
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 1);
|
||||
assert(MEMMAP.entries_count == 1);
|
||||
assert(MEMMAP.entries[0].is_available == false);
|
||||
assert(MEMMAP.entries[0].tag[0] == '\0');
|
||||
assert(MEMMAP.entries[0].start == 0);
|
||||
assert(MEMMAP.entries[0].size == 2);
|
||||
assert(MEMMAP.entries[0].end == 1);
|
||||
assert(MEMMAP.entries[0].limit == 2);
|
||||
|
||||
assert(KernAux_MemMap_entry_by_index(memmap, 0) == NULL);
|
||||
}
|
||||
|
||||
{
|
||||
MEMSET;
|
||||
KernAux_MemMap_init(memmap, 2);
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 2);
|
||||
assert(MEMMAP.entries_count == 0);
|
||||
|
||||
assert(KernAux_MemMap_add_entry(memmap, false, NULL, 0, 1));
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 2);
|
||||
assert(MEMMAP.entries_count == 1);
|
||||
|
||||
assert(KernAux_MemMap_add_entry(memmap, false, NULL, 1, 1));
|
||||
|
||||
assert(MEMMAP.is_finished == false);
|
||||
assert(MEMMAP.memory_size == 2);
|
||||
assert(MEMMAP.entries_count == 2);
|
||||
|
||||
assert(KernAux_MemMap_finish(memmap));
|
||||
|
||||
assert(MEMMAP.is_finished);
|
||||
assert(MEMMAP.memory_size == 2);
|
||||
assert(MEMMAP.entries_count == 2);
|
||||
assert(MEMMAP.entries[0].is_available == false);
|
||||
assert(MEMMAP.entries[0].tag[0] == '\0');
|
||||
assert(MEMMAP.entries[0].start == 0);
|
||||
assert(MEMMAP.entries[0].size == 1);
|
||||
assert(MEMMAP.entries[0].end == 0);
|
||||
assert(MEMMAP.entries[0].limit == 1);
|
||||
assert(MEMMAP.entries[1].is_available == false);
|
||||
assert(MEMMAP.entries[1].tag[0] == '\0');
|
||||
assert(MEMMAP.entries[1].start == 1);
|
||||
assert(MEMMAP.entries[1].size == 1);
|
||||
assert(MEMMAP.entries[1].end == 1);
|
||||
assert(MEMMAP.entries[1].limit == 2);
|
||||
|
||||
assert(KernAux_MemMap_entry_by_index(memmap, 0) == &MEMMAP.entries[0]);
|
||||
assert(KernAux_MemMap_entry_by_index(memmap, 1) == &MEMMAP.entries[1]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue