119ea8026Sopenharmony_ci 219ea8026Sopenharmony_ci[cases.test_interspersed_files] 319ea8026Sopenharmony_cidefines.SIZE = [10, 100] 419ea8026Sopenharmony_cidefines.FILES = [4, 10, 26] 519ea8026Sopenharmony_cicode = ''' 619ea8026Sopenharmony_ci lfs_t lfs; 719ea8026Sopenharmony_ci lfs_file_t files[FILES]; 819ea8026Sopenharmony_ci const char alphas[] = "abcdefghijklmnopqrstuvwxyz"; 919ea8026Sopenharmony_ci lfs_format(&lfs, cfg) => 0; 1019ea8026Sopenharmony_ci lfs_mount(&lfs, cfg) => 0; 1119ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 1219ea8026Sopenharmony_ci char path[1024]; 1319ea8026Sopenharmony_ci sprintf(path, "%c", alphas[j]); 1419ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[j], path, 1519ea8026Sopenharmony_ci LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; 1619ea8026Sopenharmony_ci } 1719ea8026Sopenharmony_ci 1819ea8026Sopenharmony_ci for (int i = 0; i < SIZE; i++) { 1919ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 2019ea8026Sopenharmony_ci lfs_file_write(&lfs, &files[j], &alphas[j], 1) => 1; 2119ea8026Sopenharmony_ci } 2219ea8026Sopenharmony_ci } 2319ea8026Sopenharmony_ci 2419ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 2519ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[j]); 2619ea8026Sopenharmony_ci } 2719ea8026Sopenharmony_ci 2819ea8026Sopenharmony_ci lfs_dir_t dir; 2919ea8026Sopenharmony_ci lfs_dir_open(&lfs, &dir, "/") => 0; 3019ea8026Sopenharmony_ci struct lfs_info info; 3119ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 3219ea8026Sopenharmony_ci assert(strcmp(info.name, ".") == 0); 3319ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_DIR); 3419ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 3519ea8026Sopenharmony_ci assert(strcmp(info.name, "..") == 0); 3619ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_DIR); 3719ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 3819ea8026Sopenharmony_ci char path[1024]; 3919ea8026Sopenharmony_ci sprintf(path, "%c", alphas[j]); 4019ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 4119ea8026Sopenharmony_ci assert(strcmp(info.name, path) == 0); 4219ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_REG); 4319ea8026Sopenharmony_ci assert(info.size == SIZE); 4419ea8026Sopenharmony_ci } 4519ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 0; 4619ea8026Sopenharmony_ci lfs_dir_close(&lfs, &dir) => 0; 4719ea8026Sopenharmony_ci 4819ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 4919ea8026Sopenharmony_ci char path[1024]; 5019ea8026Sopenharmony_ci sprintf(path, "%c", alphas[j]); 5119ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[j], path, LFS_O_RDONLY) => 0; 5219ea8026Sopenharmony_ci } 5319ea8026Sopenharmony_ci 5419ea8026Sopenharmony_ci for (int i = 0; i < 10; i++) { 5519ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 5619ea8026Sopenharmony_ci uint8_t buffer[1024]; 5719ea8026Sopenharmony_ci lfs_file_read(&lfs, &files[j], buffer, 1) => 1; 5819ea8026Sopenharmony_ci assert(buffer[0] == alphas[j]); 5919ea8026Sopenharmony_ci } 6019ea8026Sopenharmony_ci } 6119ea8026Sopenharmony_ci 6219ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 6319ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[j]); 6419ea8026Sopenharmony_ci } 6519ea8026Sopenharmony_ci 6619ea8026Sopenharmony_ci lfs_unmount(&lfs) => 0; 6719ea8026Sopenharmony_ci''' 6819ea8026Sopenharmony_ci 6919ea8026Sopenharmony_ci[cases.test_interspersed_remove_files] 7019ea8026Sopenharmony_cidefines.SIZE = [10, 100] 7119ea8026Sopenharmony_cidefines.FILES = [4, 10, 26] 7219ea8026Sopenharmony_cicode = ''' 7319ea8026Sopenharmony_ci lfs_t lfs; 7419ea8026Sopenharmony_ci const char alphas[] = "abcdefghijklmnopqrstuvwxyz"; 7519ea8026Sopenharmony_ci lfs_format(&lfs, cfg) => 0; 7619ea8026Sopenharmony_ci lfs_mount(&lfs, cfg) => 0; 7719ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 7819ea8026Sopenharmony_ci char path[1024]; 7919ea8026Sopenharmony_ci sprintf(path, "%c", alphas[j]); 8019ea8026Sopenharmony_ci lfs_file_t file; 8119ea8026Sopenharmony_ci lfs_file_open(&lfs, &file, path, 8219ea8026Sopenharmony_ci LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0; 8319ea8026Sopenharmony_ci for (int i = 0; i < SIZE; i++) { 8419ea8026Sopenharmony_ci lfs_file_write(&lfs, &file, &alphas[j], 1) => 1; 8519ea8026Sopenharmony_ci } 8619ea8026Sopenharmony_ci lfs_file_close(&lfs, &file); 8719ea8026Sopenharmony_ci } 8819ea8026Sopenharmony_ci lfs_unmount(&lfs) => 0; 8919ea8026Sopenharmony_ci 9019ea8026Sopenharmony_ci lfs_mount(&lfs, cfg) => 0; 9119ea8026Sopenharmony_ci lfs_file_t file; 9219ea8026Sopenharmony_ci lfs_file_open(&lfs, &file, "zzz", LFS_O_WRONLY | LFS_O_CREAT) => 0; 9319ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 9419ea8026Sopenharmony_ci lfs_file_write(&lfs, &file, (const void*)"~", 1) => 1; 9519ea8026Sopenharmony_ci lfs_file_sync(&lfs, &file) => 0; 9619ea8026Sopenharmony_ci 9719ea8026Sopenharmony_ci char path[1024]; 9819ea8026Sopenharmony_ci sprintf(path, "%c", alphas[j]); 9919ea8026Sopenharmony_ci lfs_remove(&lfs, path) => 0; 10019ea8026Sopenharmony_ci } 10119ea8026Sopenharmony_ci lfs_file_close(&lfs, &file); 10219ea8026Sopenharmony_ci 10319ea8026Sopenharmony_ci lfs_dir_t dir; 10419ea8026Sopenharmony_ci lfs_dir_open(&lfs, &dir, "/") => 0; 10519ea8026Sopenharmony_ci struct lfs_info info; 10619ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 10719ea8026Sopenharmony_ci assert(strcmp(info.name, ".") == 0); 10819ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_DIR); 10919ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 11019ea8026Sopenharmony_ci assert(strcmp(info.name, "..") == 0); 11119ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_DIR); 11219ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 11319ea8026Sopenharmony_ci assert(strcmp(info.name, "zzz") == 0); 11419ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_REG); 11519ea8026Sopenharmony_ci assert(info.size == FILES); 11619ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 0; 11719ea8026Sopenharmony_ci lfs_dir_close(&lfs, &dir) => 0; 11819ea8026Sopenharmony_ci 11919ea8026Sopenharmony_ci lfs_file_open(&lfs, &file, "zzz", LFS_O_RDONLY) => 0; 12019ea8026Sopenharmony_ci for (int i = 0; i < FILES; i++) { 12119ea8026Sopenharmony_ci uint8_t buffer[1024]; 12219ea8026Sopenharmony_ci lfs_file_read(&lfs, &file, buffer, 1) => 1; 12319ea8026Sopenharmony_ci assert(buffer[0] == '~'); 12419ea8026Sopenharmony_ci } 12519ea8026Sopenharmony_ci lfs_file_close(&lfs, &file); 12619ea8026Sopenharmony_ci 12719ea8026Sopenharmony_ci lfs_unmount(&lfs) => 0; 12819ea8026Sopenharmony_ci''' 12919ea8026Sopenharmony_ci 13019ea8026Sopenharmony_ci[cases.test_interspersed_remove_inconveniently] 13119ea8026Sopenharmony_cidefines.SIZE = [10, 100] 13219ea8026Sopenharmony_cicode = ''' 13319ea8026Sopenharmony_ci lfs_t lfs; 13419ea8026Sopenharmony_ci lfs_format(&lfs, cfg) => 0; 13519ea8026Sopenharmony_ci lfs_mount(&lfs, cfg) => 0; 13619ea8026Sopenharmony_ci lfs_file_t files[3]; 13719ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[0], "e", LFS_O_WRONLY | LFS_O_CREAT) => 0; 13819ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[1], "f", LFS_O_WRONLY | LFS_O_CREAT) => 0; 13919ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[2], "g", LFS_O_WRONLY | LFS_O_CREAT) => 0; 14019ea8026Sopenharmony_ci 14119ea8026Sopenharmony_ci for (int i = 0; i < SIZE/2; i++) { 14219ea8026Sopenharmony_ci lfs_file_write(&lfs, &files[0], (const void*)"e", 1) => 1; 14319ea8026Sopenharmony_ci lfs_file_write(&lfs, &files[1], (const void*)"f", 1) => 1; 14419ea8026Sopenharmony_ci lfs_file_write(&lfs, &files[2], (const void*)"g", 1) => 1; 14519ea8026Sopenharmony_ci } 14619ea8026Sopenharmony_ci 14719ea8026Sopenharmony_ci lfs_remove(&lfs, "f") => 0; 14819ea8026Sopenharmony_ci 14919ea8026Sopenharmony_ci for (int i = 0; i < SIZE/2; i++) { 15019ea8026Sopenharmony_ci lfs_file_write(&lfs, &files[0], (const void*)"e", 1) => 1; 15119ea8026Sopenharmony_ci lfs_file_write(&lfs, &files[1], (const void*)"f", 1) => 1; 15219ea8026Sopenharmony_ci lfs_file_write(&lfs, &files[2], (const void*)"g", 1) => 1; 15319ea8026Sopenharmony_ci } 15419ea8026Sopenharmony_ci 15519ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[0]); 15619ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[1]); 15719ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[2]); 15819ea8026Sopenharmony_ci 15919ea8026Sopenharmony_ci lfs_dir_t dir; 16019ea8026Sopenharmony_ci lfs_dir_open(&lfs, &dir, "/") => 0; 16119ea8026Sopenharmony_ci struct lfs_info info; 16219ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 16319ea8026Sopenharmony_ci assert(strcmp(info.name, ".") == 0); 16419ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_DIR); 16519ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 16619ea8026Sopenharmony_ci assert(strcmp(info.name, "..") == 0); 16719ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_DIR); 16819ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 16919ea8026Sopenharmony_ci assert(strcmp(info.name, "e") == 0); 17019ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_REG); 17119ea8026Sopenharmony_ci assert(info.size == SIZE); 17219ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 17319ea8026Sopenharmony_ci assert(strcmp(info.name, "g") == 0); 17419ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_REG); 17519ea8026Sopenharmony_ci assert(info.size == SIZE); 17619ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 0; 17719ea8026Sopenharmony_ci lfs_dir_close(&lfs, &dir) => 0; 17819ea8026Sopenharmony_ci 17919ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[0], "e", LFS_O_RDONLY) => 0; 18019ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[1], "g", LFS_O_RDONLY) => 0; 18119ea8026Sopenharmony_ci for (int i = 0; i < SIZE; i++) { 18219ea8026Sopenharmony_ci uint8_t buffer[1024]; 18319ea8026Sopenharmony_ci lfs_file_read(&lfs, &files[0], buffer, 1) => 1; 18419ea8026Sopenharmony_ci assert(buffer[0] == 'e'); 18519ea8026Sopenharmony_ci lfs_file_read(&lfs, &files[1], buffer, 1) => 1; 18619ea8026Sopenharmony_ci assert(buffer[0] == 'g'); 18719ea8026Sopenharmony_ci } 18819ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[0]); 18919ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[1]); 19019ea8026Sopenharmony_ci 19119ea8026Sopenharmony_ci lfs_unmount(&lfs) => 0; 19219ea8026Sopenharmony_ci''' 19319ea8026Sopenharmony_ci 19419ea8026Sopenharmony_ci[cases.test_interspersed_reentrant_files] 19519ea8026Sopenharmony_cidefines.SIZE = [10, 100] 19619ea8026Sopenharmony_cidefines.FILES = [4, 10, 26] 19719ea8026Sopenharmony_cireentrant = true 19819ea8026Sopenharmony_cicode = ''' 19919ea8026Sopenharmony_ci lfs_t lfs; 20019ea8026Sopenharmony_ci lfs_file_t files[FILES]; 20119ea8026Sopenharmony_ci const char alphas[] = "abcdefghijklmnopqrstuvwxyz"; 20219ea8026Sopenharmony_ci 20319ea8026Sopenharmony_ci int err = lfs_mount(&lfs, cfg); 20419ea8026Sopenharmony_ci if (err) { 20519ea8026Sopenharmony_ci lfs_format(&lfs, cfg) => 0; 20619ea8026Sopenharmony_ci lfs_mount(&lfs, cfg) => 0; 20719ea8026Sopenharmony_ci } 20819ea8026Sopenharmony_ci 20919ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 21019ea8026Sopenharmony_ci char path[1024]; 21119ea8026Sopenharmony_ci sprintf(path, "%c", alphas[j]); 21219ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[j], path, 21319ea8026Sopenharmony_ci LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0; 21419ea8026Sopenharmony_ci } 21519ea8026Sopenharmony_ci 21619ea8026Sopenharmony_ci for (int i = 0; i < SIZE; i++) { 21719ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 21819ea8026Sopenharmony_ci lfs_ssize_t size = lfs_file_size(&lfs, &files[j]); 21919ea8026Sopenharmony_ci assert(size >= 0); 22019ea8026Sopenharmony_ci if ((int)size <= i) { 22119ea8026Sopenharmony_ci lfs_file_write(&lfs, &files[j], &alphas[j], 1) => 1; 22219ea8026Sopenharmony_ci lfs_file_sync(&lfs, &files[j]) => 0; 22319ea8026Sopenharmony_ci } 22419ea8026Sopenharmony_ci } 22519ea8026Sopenharmony_ci } 22619ea8026Sopenharmony_ci 22719ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 22819ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[j]); 22919ea8026Sopenharmony_ci } 23019ea8026Sopenharmony_ci 23119ea8026Sopenharmony_ci lfs_dir_t dir; 23219ea8026Sopenharmony_ci lfs_dir_open(&lfs, &dir, "/") => 0; 23319ea8026Sopenharmony_ci struct lfs_info info; 23419ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 23519ea8026Sopenharmony_ci assert(strcmp(info.name, ".") == 0); 23619ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_DIR); 23719ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 23819ea8026Sopenharmony_ci assert(strcmp(info.name, "..") == 0); 23919ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_DIR); 24019ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 24119ea8026Sopenharmony_ci char path[1024]; 24219ea8026Sopenharmony_ci sprintf(path, "%c", alphas[j]); 24319ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 1; 24419ea8026Sopenharmony_ci assert(strcmp(info.name, path) == 0); 24519ea8026Sopenharmony_ci assert(info.type == LFS_TYPE_REG); 24619ea8026Sopenharmony_ci assert(info.size == SIZE); 24719ea8026Sopenharmony_ci } 24819ea8026Sopenharmony_ci lfs_dir_read(&lfs, &dir, &info) => 0; 24919ea8026Sopenharmony_ci lfs_dir_close(&lfs, &dir) => 0; 25019ea8026Sopenharmony_ci 25119ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 25219ea8026Sopenharmony_ci char path[1024]; 25319ea8026Sopenharmony_ci sprintf(path, "%c", alphas[j]); 25419ea8026Sopenharmony_ci lfs_file_open(&lfs, &files[j], path, LFS_O_RDONLY) => 0; 25519ea8026Sopenharmony_ci } 25619ea8026Sopenharmony_ci 25719ea8026Sopenharmony_ci for (int i = 0; i < 10; i++) { 25819ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 25919ea8026Sopenharmony_ci uint8_t buffer[1024]; 26019ea8026Sopenharmony_ci lfs_file_read(&lfs, &files[j], buffer, 1) => 1; 26119ea8026Sopenharmony_ci assert(buffer[0] == alphas[j]); 26219ea8026Sopenharmony_ci } 26319ea8026Sopenharmony_ci } 26419ea8026Sopenharmony_ci 26519ea8026Sopenharmony_ci for (int j = 0; j < FILES; j++) { 26619ea8026Sopenharmony_ci lfs_file_close(&lfs, &files[j]); 26719ea8026Sopenharmony_ci } 26819ea8026Sopenharmony_ci 26919ea8026Sopenharmony_ci lfs_unmount(&lfs) => 0; 27019ea8026Sopenharmony_ci''' 271