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