| [cases.bench_file_read] |
| # 0 = in-order |
| # 1 = reversed-order |
| # 2 = random-order |
| defines.ORDER = [0, 1, 2] |
| defines.SIZE = '128*1024' |
| defines.CHUNK_SIZE = 64 |
| code = ''' |
| lfs_t lfs; |
| lfs_format(&lfs, cfg) => 0; |
| lfs_mount(&lfs, cfg) => 0; |
| lfs_size_t chunks = (SIZE+CHUNK_SIZE-1)/CHUNK_SIZE; |
| |
| // first write the file |
| lfs_file_t file; |
| uint8_t buffer[CHUNK_SIZE]; |
| lfs_file_open(&lfs, &file, "file", |
| LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; |
| for (lfs_size_t i = 0; i < chunks; i++) { |
| uint32_t chunk_prng = i; |
| for (lfs_size_t j = 0; j < CHUNK_SIZE; j++) { |
| buffer[j] = BENCH_PRNG(&chunk_prng); |
| } |
| |
| lfs_file_write(&lfs, &file, buffer, CHUNK_SIZE) => CHUNK_SIZE; |
| } |
| lfs_file_write(&lfs, &file, buffer, CHUNK_SIZE) => CHUNK_SIZE; |
| lfs_file_close(&lfs, &file) => 0; |
| |
| // then read the file |
| BENCH_START(); |
| lfs_file_open(&lfs, &file, "file", LFS_O_RDONLY) => 0; |
| |
| uint32_t prng = 42; |
| for (lfs_size_t i = 0; i < chunks; i++) { |
| lfs_off_t i_ |
| = (ORDER == 0) ? i |
| : (ORDER == 1) ? (chunks-1-i) |
| : BENCH_PRNG(&prng) % chunks; |
| lfs_file_seek(&lfs, &file, i_*CHUNK_SIZE, LFS_SEEK_SET) |
| => i_*CHUNK_SIZE; |
| lfs_file_read(&lfs, &file, buffer, CHUNK_SIZE) => CHUNK_SIZE; |
| |
| uint32_t chunk_prng = i_; |
| for (lfs_size_t j = 0; j < CHUNK_SIZE; j++) { |
| assert(buffer[j] == BENCH_PRNG(&chunk_prng)); |
| } |
| } |
| |
| lfs_file_close(&lfs, &file) => 0; |
| BENCH_STOP(); |
| |
| lfs_unmount(&lfs) => 0; |
| ''' |
| |
| [cases.bench_file_write] |
| # 0 = in-order |
| # 1 = reversed-order |
| # 2 = random-order |
| defines.ORDER = [0, 1, 2] |
| defines.SIZE = '128*1024' |
| defines.CHUNK_SIZE = 64 |
| code = ''' |
| lfs_t lfs; |
| lfs_format(&lfs, cfg) => 0; |
| lfs_mount(&lfs, cfg) => 0; |
| lfs_size_t chunks = (SIZE+CHUNK_SIZE-1)/CHUNK_SIZE; |
| |
| BENCH_START(); |
| lfs_file_t file; |
| lfs_file_open(&lfs, &file, "file", |
| LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; |
| |
| uint8_t buffer[CHUNK_SIZE]; |
| uint32_t prng = 42; |
| for (lfs_size_t i = 0; i < chunks; i++) { |
| lfs_off_t i_ |
| = (ORDER == 0) ? i |
| : (ORDER == 1) ? (chunks-1-i) |
| : BENCH_PRNG(&prng) % chunks; |
| uint32_t chunk_prng = i_; |
| for (lfs_size_t j = 0; j < CHUNK_SIZE; j++) { |
| buffer[j] = BENCH_PRNG(&chunk_prng); |
| } |
| |
| lfs_file_seek(&lfs, &file, i_*CHUNK_SIZE, LFS_SEEK_SET) |
| => i_*CHUNK_SIZE; |
| lfs_file_write(&lfs, &file, buffer, CHUNK_SIZE) => CHUNK_SIZE; |
| } |
| |
| lfs_file_close(&lfs, &file) => 0; |
| BENCH_STOP(); |
| |
| lfs_unmount(&lfs) => 0; |
| ''' |