Files
nickel/tests/test_linkedlist.c
Elaina Claus 4db7dfeb5d ensure links only belong to 1 list
also some small documentation changes.
2026-01-14 10:41:54 -05:00

92 lines
2.5 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
#include <stdint.h>
#include <stdbool.h>
#include <time.h>
#include "nickel/linkedlist.h"
// helper function to format bytes out.
char* get_bytes_f(long bytes, char* str) {
if(str != NULL) {
if (bytes > 0)
{
if (bytes < 1024) {
sprintf(str, "%ld bytes", bytes);
}
if ((bytes >= 1024) & (bytes < 1024*1024)) {
sprintf(str, "%.3f Kbytes", ((double)bytes/(double)1024.00));
}
if (bytes >= 1024*1024) {
sprintf(str, "%.3f Mbytes",(double)bytes/(double)(1024*1024));
}
}
}
else {
return NULL;
}
return str;
}
typedef struct test_data {
uint64_t data1;
uint64_t data2;
uint64_t data3;
uint64_t data4;
ni_list_node link;
} test_data;
int main (void)
{
time_t time_now;
srand(time(&time_now));
ni_list data_instances;
ni_list__init(&data_instances);
printf("list is allocated at %p\n", (void*)&data_instances);
size_t test_size = 10;
for(size_t i = 0; i < test_size; i++) {
test_data* t = malloc(sizeof(test_data));
printf("n = %d allocated data at %p...test_data.link at %p...\n", i, &t, &t->link);
t->data1 = rand() % UINT64_MAX;
t->data2 = rand() % UINT64_MAX;
t->data3 = rand() % UINT64_MAX;
t->data4 = rand() % UINT64_MAX;
// ensure our link points at nothing.
t->link.next = NULL;
t->link.prev = NULL;
ni_list__push_back(&data_instances, &(t->link));
printf("write: n = %d: %ld %ld %ld %ld \n\tnext: %p\n\tprev: %p\n",
i, t->data1, t->data2, t->data3, t->data4, t->link.next, t->link.prev);
}
printf("Inserted %d count entries into test list...\n", data_instances.count);
{ // scope for access to iter and list
size_t i = 0;
NI_LIST__FOREACH(&data_instances) {
test_data* t = NI_LIST_CONTAINER_OF(it, test_data, link);
printf("read: %d: %ld %ld %ld %ld \n\tnext: %p\n\tprev: %p\n",
i, t->data1, t->data2, t->data3, t->data4, (void*)it->next, (void*)it->prev);
i++;
}
}
// drain from back of list and remove then free entries
while (!ni_list__is_empty(&data_instances)) {
ni_list_node* tail = ni_list__get_back(&data_instances);
ni_list__remove(&data_instances, tail);
test_data* t = NI_LIST_CONTAINER_OF(tail, test_data, link);
free(t);
}
/* all done! */
}