diff options
| author | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-03 19:22:36 +0200 |
|---|---|---|
| committer | Aldrik Ramaekers <aldrikboy@gmail.com> | 2025-08-03 19:22:36 +0200 |
| commit | 853bbb3752a5fa2f58ef456ffb6e3a552e13cb11 (patch) | |
| tree | ce49a533f82a42a65fa6a4771a7b8fbfe33798cf /simclist-1.5/regrtest/test3-restore.c | |
initial commit
Diffstat (limited to 'simclist-1.5/regrtest/test3-restore.c')
| -rw-r--r-- | simclist-1.5/regrtest/test3-restore.c | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/simclist-1.5/regrtest/test3-restore.c b/simclist-1.5/regrtest/test3-restore.c new file mode 100644 index 0000000..6e143f6 --- /dev/null +++ b/simclist-1.5/regrtest/test3-restore.c @@ -0,0 +1,64 @@ +#include <stdio.h> +#include <errno.h> +#include <stdlib.h> +#include <sys/types.h> +#include "../simclist.h" + +#define N 123 + +#define hton64(x) (\ + htons(1) == 1 ? \ + (uint64_t)x /* big endian */ \ + : /* little endian */ \ + ((uint64_t)((((uint64_t)(x) & 0xff00000000000000ULL) >> 56) | \ + (((uint64_t)(x) & 0x00ff000000000000ULL) >> 40) | \ + (((uint64_t)(x) & 0x0000ff0000000000ULL) >> 24) | \ + (((uint64_t)(x) & 0x000000ff00000000ULL) >> 8) | \ + (((uint64_t)(x) & 0x00000000ff000000ULL) << 8) | \ + (((uint64_t)(x) & 0x0000000000ff0000ULL) << 24) | \ + (((uint64_t)(x) & 0x000000000000ff00ULL) << 40) | \ + (((uint64_t)(x) & 0x00000000000000ffULL) << 56))) \ + ) + + +void *elunserial(const void *el, uint32_t *len) { + unsigned long long *x; + + *len = sizeof(unsigned long long); + x = malloc(*len); + *x = hton64(*(unsigned long long *)el); + + return x; +} + +int main() { + list_t l; + unsigned long long int data, val; + unsigned int mem; + + list_init(& l); + list_attributes_unserializer(&l, elunserial); + + mem = list_restore_file(&l, "mylistdump.simc"); + if (mem == 0 && errno != 0) { + perror("open"); + printf("fuck off\n"); + } else { + printf("Restored successfully:\n"); + printf("N els: %u\nmemread: %u\n", list_size(&l), mem); + for (data = 1; data < N; data++) { + val = *(unsigned long long *)list_get_at(&l, (unsigned int)data-1); + if (data != val) { + printf("Wrong data. Pos %llu, expected %llu, got %llu\n", data-1, data, val); + return 0; + } + printf("%lld ", val); + } + printf("\n"); + } + + list_destroy(& l); + + return 0; +} + |
