| /// AUTOGENERATED TEST /// |
| #include "lfs.h" |
| #include "emubd/lfs_emubd.h" |
| #include <stdio.h> |
| #include <string.h> |
| #include <stdlib.h> |
| |
| |
| // test stuff |
| static void test_log(const char *s, uintmax_t v) {{ |
| printf("%s: %jd\n", s, v); |
| }} |
| |
| static void test_assert(const char *file, unsigned line, |
| const char *s, uintmax_t v, uintmax_t e) {{ |
| static const char *last[6] = {{0, 0}}; |
| if (v != e || !(last[0] == s || last[1] == s || |
| last[2] == s || last[3] == s || |
| last[4] == s || last[5] == s)) {{ |
| test_log(s, v); |
| last[0] = last[1]; |
| last[1] = last[2]; |
| last[2] = last[3]; |
| last[3] = last[4]; |
| last[4] = last[5]; |
| last[5] = s; |
| }} |
| |
| if (v != e) {{ |
| fprintf(stderr, "\033[31m%s:%u: assert %s failed with %jd, " |
| "expected %jd\033[0m\n", file, line, s, v, e); |
| exit(-2); |
| }} |
| }} |
| |
| #define test_assert(s, v, e) test_assert(__FILE__, __LINE__, s, v, e) |
| |
| |
| // utility functions for traversals |
| static int __attribute__((used)) test_count(void *p, lfs_block_t b) {{ |
| (void)b; |
| unsigned *u = (unsigned*)p; |
| *u += 1; |
| return 0; |
| }} |
| |
| |
| // lfs declarations |
| lfs_t lfs; |
| lfs_emubd_t bd; |
| lfs_file_t file[4]; |
| lfs_dir_t dir[4]; |
| struct lfs_info info; |
| |
| uint8_t buffer[1024]; |
| uint8_t wbuffer[1024]; |
| uint8_t rbuffer[1024]; |
| lfs_size_t size; |
| lfs_size_t wsize; |
| lfs_size_t rsize; |
| |
| uintmax_t test; |
| |
| #ifndef LFS_READ_SIZE |
| #define LFS_READ_SIZE 16 |
| #endif |
| |
| #ifndef LFS_PROG_SIZE |
| #define LFS_PROG_SIZE LFS_READ_SIZE |
| #endif |
| |
| #ifndef LFS_BLOCK_SIZE |
| #define LFS_BLOCK_SIZE 512 |
| #endif |
| |
| #ifndef LFS_BLOCK_COUNT |
| #define LFS_BLOCK_COUNT 1024 |
| #endif |
| |
| #ifndef LFS_BLOCK_CYCLES |
| #define LFS_BLOCK_CYCLES 1024 |
| #endif |
| |
| #ifndef LFS_CACHE_SIZE |
| #define LFS_CACHE_SIZE 64 |
| #endif |
| |
| #ifndef LFS_LOOKAHEAD_SIZE |
| #define LFS_LOOKAHEAD_SIZE 16 |
| #endif |
| |
| const struct lfs_config cfg = {{ |
| .context = &bd, |
| .read = &lfs_emubd_read, |
| .prog = &lfs_emubd_prog, |
| .erase = &lfs_emubd_erase, |
| .sync = &lfs_emubd_sync, |
| |
| .read_size = LFS_READ_SIZE, |
| .prog_size = LFS_PROG_SIZE, |
| .block_size = LFS_BLOCK_SIZE, |
| .block_count = LFS_BLOCK_COUNT, |
| .block_cycles = LFS_BLOCK_CYCLES, |
| .cache_size = LFS_CACHE_SIZE, |
| .lookahead_size = LFS_LOOKAHEAD_SIZE, |
| }}; |
| |
| |
| // Entry point |
| int main(void) {{ |
| lfs_emubd_create(&cfg, "blocks"); |
| |
| {tests} |
| |
| lfs_emubd_destroy(&cfg); |
| }} |