Test PFA asserts

This commit is contained in:
Alex Kotov 2021-12-15 03:10:28 +05:00
parent 99b90a6ce7
commit 4b887b3a67
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
6 changed files with 224 additions and 24 deletions

View File

@ -7,7 +7,7 @@ on:
branches: [master]
jobs:
test_deny_warnings:
nowarn_assert_defopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
@ -20,7 +20,72 @@ jobs:
- name: check
run: make check
test_allow_warnings:
nowarn_assert_noopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --enable-assert --disable-multiboot2 CFLAGS='-O0 -Werror'
- name: make
run: make
- name: check
run: make check
nowarn_assert_maxopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --disable-assert --disable-multiboot2 CFLAGS='-O3 -Werror'
- name: make
run: make
- name: check
run: make check
nowarn_noassert_defopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --disable-assert --disable-multiboot2 CFLAGS='-Werror'
- name: make
run: make
- name: check
run: make check
nowarn_noassert_noopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --disable-assert --disable-multiboot2 CFLAGS='-O0 -Werror'
- name: make
run: make
- name: check
run: make check
nowarn_noassert_maxopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --disable-assert --disable-multiboot2 CFLAGS='-O3 -Werror'
- name: make
run: make
- name: check
run: make check
warn_assert_defopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
@ -32,3 +97,68 @@ jobs:
run: make
- name: check
run: make check
warn_assert_noopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --enable-assert CFLAGS='-O0'
- name: make
run: make
- name: check
run: make check
warn_assert_maxopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --disable-assert CFLAGS='-O3'
- name: make
run: make
- name: check
run: make check
warn_noassert_defopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --disable-assert
- name: make
run: make
- name: check
run: make check
warn_noassert_noopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --disable-assert CFLAGS='-O0'
- name: make
run: make
- name: check
run: make check
warn_noassert_maxopt:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: autogen
run: ./autogen.sh
- name: configure
run: ./configure --disable-assert CFLAGS='-O3'
- name: make
run: make
- name: check
run: make check

1
.gitignore vendored
View File

@ -49,6 +49,7 @@
/tests/test_multiboot2_print
/tests/test_multiboot2_validation
/tests/test_pfa
/tests/test_pfa_assert
/tests/test_printf
/tests/test_stdlib
/tests/test_units_human

View File

@ -68,7 +68,8 @@ if ENABLE_PFA
libkernaux_a_SOURCES += src/pfa.c
TESTS += \
examples/pfa \
tests/test_pfa
tests/test_pfa \
tests/test_pfa_assert
endif
if ENABLE_UNITS
@ -134,6 +135,10 @@ tests_test_pfa_SOURCES = \
$(libkernaux_a_SOURCES) \
tests/test_pfa.c
tests_test_pfa_assert_SOURCES = \
$(libkernaux_a_SOURCES) \
tests/test_pfa_assert.c
tests_test_printf_SOURCES = \
$(libkernaux_a_SOURCES) \
tests/test_printf.c

View File

@ -18,23 +18,15 @@ struct KernAux_PFA {
unsigned char flags[KERNAUX_PFA_FLAGS_SIZE];
};
void KernAux_PFA_initialize(KernAux_PFA pfa)
__attribute__((nonnull));
void KernAux_PFA_initialize(KernAux_PFA pfa);
bool KernAux_PFA_is_available(KernAux_PFA pfa, size_t page_addr)
__attribute__((nonnull));
bool KernAux_PFA_is_available(KernAux_PFA pfa, size_t page_addr);
void KernAux_PFA_mark_available(KernAux_PFA pfa, size_t start, size_t end)
__attribute__((nonnull));
void KernAux_PFA_mark_available(KernAux_PFA pfa, size_t start, size_t end);
void KernAux_PFA_mark_unavailable(KernAux_PFA pfa, size_t start, size_t end);
void KernAux_PFA_mark_unavailable(KernAux_PFA pfa, size_t start, size_t end)
__attribute__((nonnull));
size_t KernAux_PFA_alloc_pages(KernAux_PFA pfa, size_t mem_size)
__attribute__((nonnull));
void KernAux_PFA_free_pages(KernAux_PFA pfa, size_t page_addr, size_t mem_size)
__attribute__((nonnull));
size_t KernAux_PFA_alloc_pages(KernAux_PFA pfa, size_t mem_size);
void KernAux_PFA_free_pages(KernAux_PFA pfa, size_t page_addr, size_t mem_size);
#ifdef __cplusplus
}

View File

@ -36,18 +36,17 @@ static void KernAux_PFA_mark(
bool status,
size_t start,
size_t end
)
__attribute__((nonnull));
);
void KernAux_PFA_initialize(const KernAux_PFA pfa)
{
assert(pfa);
assert_return(pfa);
kernaux_memset(pfa->flags, 0, sizeof(pfa->flags));
}
bool KernAux_PFA_is_available(const KernAux_PFA pfa, const size_t page_addr)
{
assert(pfa);
assert_retval(pfa, false);
assert_retval(page_addr % KERNAUX_PFA_PAGE_SIZE == 0, false);
return GET_FLAG_FROM_ADDR(pfa, page_addr);
@ -75,7 +74,7 @@ void KernAux_PFA_mark(
size_t start,
size_t end
) {
assert(pfa);
assert_return(pfa);
assert_return(start < end);
const size_t start_rem = start % KERNAUX_PFA_PAGE_SIZE;
@ -103,7 +102,7 @@ void KernAux_PFA_mark(
size_t KernAux_PFA_alloc_pages(const KernAux_PFA pfa, size_t mem_size)
{
assert(pfa);
assert_retval(pfa, 0);
const size_t mem_rem = mem_size % KERNAUX_PFA_PAGE_SIZE;
@ -142,7 +141,7 @@ void KernAux_PFA_free_pages(
const size_t page_addr,
size_t mem_size
) {
assert(pfa);
assert_return(pfa);
assert_return(page_addr % KERNAUX_PFA_PAGE_SIZE == 0);
const size_t mem_rem = mem_size % KERNAUX_PFA_PAGE_SIZE;

73
tests/test_pfa_assert.c Normal file
View File

@ -0,0 +1,73 @@
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <kernaux/assert.h>
#include <kernaux/pfa.h>
#include <assert.h>
#include <stddef.h>
static unsigned int count = 0;
static void test();
static void assert_cb(
__attribute__((unused))
const char *const file,
__attribute__((unused))
const int line,
__attribute__((unused))
const char *const str
) {
++count;
}
int main()
{
kernaux_assert_cb = NULL;
test();
#ifdef ENABLE_ASSERT
kernaux_assert_cb = assert_cb;
test();
#endif
return 0;
}
void test()
{
struct KernAux_PFA pfa;
KernAux_PFA_initialize(&pfa);
KernAux_PFA_initialize(NULL);
if (kernaux_assert_cb) assert(count == 1);
assert(!KernAux_PFA_is_available(NULL, KERNAUX_PFA_PAGE_SIZE));
if (kernaux_assert_cb) assert(count == 2);
assert(!KernAux_PFA_is_available(&pfa, 123));
if (kernaux_assert_cb) assert(count == 3);
KernAux_PFA_mark_available(NULL, 0, KERNAUX_PFA_PAGE_SIZE);
if (kernaux_assert_cb) assert(count == 4);
KernAux_PFA_mark_available(&pfa, KERNAUX_PFA_PAGE_SIZE, 0);
if (kernaux_assert_cb) assert(count == 5);
KernAux_PFA_mark_unavailable(NULL, 0, KERNAUX_PFA_PAGE_SIZE);
if (kernaux_assert_cb) assert(count == 6);
KernAux_PFA_mark_unavailable(&pfa, KERNAUX_PFA_PAGE_SIZE, 0);
if (kernaux_assert_cb) assert(count == 7);
assert(KernAux_PFA_alloc_pages(NULL, KERNAUX_PFA_PAGE_SIZE) == 0);
if (kernaux_assert_cb) assert(count == 8);
KernAux_PFA_free_pages(NULL, KERNAUX_PFA_PAGE_SIZE, KERNAUX_PFA_PAGE_SIZE);
if (kernaux_assert_cb) assert(count == 9);
KernAux_PFA_free_pages(&pfa, 123, KERNAUX_PFA_PAGE_SIZE);
if (kernaux_assert_cb) assert(count == 10);
}