mirror of
https://github.com/tailix/libkernaux.git
synced 2025-02-17 15:45:32 -05:00
Test PFA asserts
This commit is contained in:
parent
99b90a6ce7
commit
4b887b3a67
6 changed files with 224 additions and 24 deletions
134
.github/workflows/test.yml
vendored
134
.github/workflows/test.yml
vendored
|
@ -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
1
.gitignore
vendored
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
13
src/pfa.c
13
src/pfa.c
|
@ -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
73
tests/test_pfa_assert.c
Normal 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);
|
||||
}
|
Loading…
Add table
Reference in a new issue