first commit, initial layout and some ideas I want to implement, included my linked list impl
This commit is contained in:
87
tests/test_linkedlist.c
Normal file
87
tests/test_linkedlist.c
Normal file
@@ -0,0 +1,87 @@
|
||||
#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...link at %p...\n", i, &t->link);
|
||||
|
||||
t->data1 = rand() % UINT64_MAX;
|
||||
t->data2 = rand() % UINT64_MAX;
|
||||
t->data3 = rand() % UINT64_MAX;
|
||||
t->data4 = rand() % UINT64_MAX;
|
||||
|
||||
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++;
|
||||
}
|
||||
}
|
||||
|
||||
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! */
|
||||
}
|
||||
Reference in New Issue
Block a user