mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
e0eba8ce21
```bash find . -type f \( -name "*.c" -o -name "*.h" -o -name "*.cpp" -o -name "*.hpp" \) ! -path "src/3rdparty/*" -print0 | xargs -0 clang-format -i ```
121 lines
3.3 KiB
C
121 lines
3.3 KiB
C
#include "common/FFlist.h"
|
|
#include "common/textModifier.h"
|
|
|
|
#include <string.h>
|
|
#include <stdarg.h>
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
__attribute__((__noreturn__)) static void testFailed(const FFlist* list, const char* expression, int lineNo) {
|
|
fputs(FASTFETCH_TEXT_MODIFIER_ERROR, stderr);
|
|
fprintf(stderr, "[%d] %s, list:", lineNo, expression);
|
|
for (uint32_t i = 0; i < list->length; ++i) {
|
|
fprintf(stderr, "%u ", *(uint32_t*) ffListGet(list, i));
|
|
}
|
|
fputc('\n', stderr);
|
|
fputs(FASTFETCH_TEXT_MODIFIER_RESET, stderr);
|
|
fputc('\n', stderr);
|
|
exit(1);
|
|
}
|
|
|
|
static bool numEqualsAdapter(const void* first, const void* second) {
|
|
return *(uint32_t*) first == *(uint32_t*) second;
|
|
}
|
|
|
|
#define VERIFY(expression) \
|
|
if (!(expression)) testFailed(&list, #expression, __LINE__)
|
|
|
|
int main(void) {
|
|
FFlist list;
|
|
uint32_t n = 0;
|
|
|
|
// initA
|
|
|
|
ffListInit(&list, sizeof(uint32_t));
|
|
|
|
VERIFY(list.elementSize == sizeof(uint32_t));
|
|
VERIFY(list.capacity == 0);
|
|
VERIFY(list.length == 0);
|
|
|
|
// forEach
|
|
FF_LIST_FOR_EACH (uint32_t, item, list) {
|
|
VERIFY(false);
|
|
}
|
|
|
|
// shift
|
|
VERIFY(!ffListShift(&list, &n));
|
|
VERIFY(list.length == 0);
|
|
|
|
// pop
|
|
VERIFY(!ffListPop(&list, &n));
|
|
VERIFY(list.length == 0);
|
|
|
|
// add
|
|
for (uint32_t i = 1; i <= FF_LIST_DEFAULT_ALLOC + 1; ++i) {
|
|
*(uint32_t*) ffListAdd(&list) = i;
|
|
|
|
VERIFY(list.elementSize == sizeof(uint32_t));
|
|
VERIFY(list.length == i);
|
|
|
|
if (i <= FF_LIST_DEFAULT_ALLOC) {
|
|
VERIFY(list.capacity == FF_LIST_DEFAULT_ALLOC);
|
|
} else {
|
|
VERIFY(list.capacity == FF_LIST_DEFAULT_ALLOC * 2);
|
|
}
|
|
|
|
VERIFY(*(uint32_t*) ffListGet(&list, 0) == 1);
|
|
VERIFY(*(uint32_t*) ffListGet(&list, i - 1) == i);
|
|
}
|
|
VERIFY(list.length == FF_LIST_DEFAULT_ALLOC + 1);
|
|
|
|
uint32_t sum = 0;
|
|
// forEach
|
|
FF_LIST_FOR_EACH (uint32_t, item, list) {
|
|
sum += *item;
|
|
}
|
|
VERIFY(sum == (1 + FF_LIST_DEFAULT_ALLOC + 1) * (FF_LIST_DEFAULT_ALLOC + 1) / 2);
|
|
|
|
// ffListFirstIndexComp
|
|
n = 10;
|
|
VERIFY(ffListFirstIndexComp(&list, &n, numEqualsAdapter) == 9);
|
|
n = 999;
|
|
VERIFY(ffListFirstIndexComp(&list, &n, numEqualsAdapter) == list.length);
|
|
|
|
// ffListContains
|
|
n = 10;
|
|
VERIFY(ffListContains(&list, &n, numEqualsAdapter));
|
|
n = 999;
|
|
VERIFY(!ffListContains(&list, &n, numEqualsAdapter));
|
|
|
|
// shift
|
|
VERIFY(ffListShift(&list, &n));
|
|
VERIFY(n == 1);
|
|
VERIFY(list.length == FF_LIST_DEFAULT_ALLOC);
|
|
VERIFY(*(uint32_t*) ffListGet(&list, 0) == 2);
|
|
VERIFY(*(uint32_t*) ffListGet(&list, list.length - 1) == FF_LIST_DEFAULT_ALLOC + 1);
|
|
|
|
// pop
|
|
VERIFY(ffListPop(&list, &n));
|
|
VERIFY(n == FF_LIST_DEFAULT_ALLOC + 1);
|
|
VERIFY(list.length == FF_LIST_DEFAULT_ALLOC - 1);
|
|
VERIFY(*(uint32_t*) ffListGet(&list, 0) == 2);
|
|
VERIFY(*(uint32_t*) ffListGet(&list, list.length - 1) == FF_LIST_DEFAULT_ALLOC);
|
|
|
|
// Destroy
|
|
ffListDestroy(&list);
|
|
|
|
VERIFY(list.elementSize == sizeof(uint32_t));
|
|
VERIFY(list.capacity == 0);
|
|
VERIFY(list.length == 0);
|
|
|
|
{
|
|
FF_LIST_AUTO_DESTROY test = ffListCreate(1);
|
|
VERIFY(test.elementSize == 1);
|
|
VERIFY(test.capacity == 0);
|
|
VERIFY(test.length == 0);
|
|
}
|
|
|
|
// Success
|
|
puts("\033[32mAll tests passed!" FASTFETCH_TEXT_MODIFIER_RESET);
|
|
}
|