Generated v2 prefixes

This commit is contained in:
geky-bot
2023-05-04 18:31:30 +00:00
67 changed files with 26771 additions and 5203 deletions
+280 -95
View File
@@ -1,8 +1,11 @@
[[case]] # root
[cases.test_dirs_root]
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -14,20 +17,25 @@ code = '''
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # many directory creation
define.N = 'range(0, 100, 3)'
[cases.test_dirs_many_creation]
defines.N = 'range(3, 100, 3)'
if = 'N < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "dir%03d", i);
lfs2_mkdir(&lfs2, path) => 0;
}
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -35,6 +43,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "dir%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -45,20 +54,25 @@ code = '''
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # many directory removal
define.N = 'range(3, 100, 11)'
[cases.test_dirs_many_removal]
defines.N = 'range(3, 100, 11)'
if = 'N < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "removeme%03d", i);
lfs2_mkdir(&lfs2, path) => 0;
}
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -66,6 +80,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "removeme%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -75,14 +90,15 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "removeme%03d", i);
lfs2_remove(&lfs2, path) => 0;
}
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -95,20 +111,25 @@ code = '''
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # many directory rename
define.N = 'range(3, 100, 11)'
[cases.test_dirs_many_rename]
defines.N = 'range(3, 100, 11)'
if = 'N < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "test%03d", i);
lfs2_mkdir(&lfs2, path) => 0;
}
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -116,6 +137,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "test%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -125,7 +147,7 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char oldpath[128];
char newpath[128];
@@ -135,7 +157,7 @@ code = '''
}
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -144,6 +166,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "tedd%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -154,29 +177,35 @@ code = '''
lfs2_unmount(&lfs2);
'''
[[case]] # reentrant many directory creation/rename/removal
define.N = [5, 11]
[cases.test_dirs_many_reentrant]
defines.N = [5, 11]
if = 'BLOCK_COUNT >= 4*N'
reentrant = true
code = '''
err = lfs2_mount(&lfs2, &cfg);
lfs2_t lfs2;
int err = lfs2_mount(&lfs2, cfg);
if (err) {
lfs2_format(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
}
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hi%03d", i);
err = lfs2_mkdir(&lfs2, path);
assert(err == 0 || err == LFS2_ERR_EXIST);
}
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hello%03d", i);
err = lfs2_remove(&lfs2, path);
assert(err == 0 || err == LFS2_ERR_NOENT);
}
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -184,6 +213,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hi%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -209,6 +239,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hello%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -218,6 +249,7 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hello%03d", i);
lfs2_remove(&lfs2, path) => 0;
}
@@ -234,22 +266,28 @@ code = '''
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # file creation
define.N = 'range(3, 100, 11)'
[cases.test_dirs_file_creation]
defines.N = 'range(3, 100, 11)'
if = 'N < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "file%03d", i);
lfs2_file_t file;
lfs2_file_open(&lfs2, &file, path,
LFS2_O_WRONLY | LFS2_O_CREAT | LFS2_O_EXCL) => 0;
lfs2_file_close(&lfs2, &file) => 0;
}
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -257,6 +295,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "file%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_REG);
@@ -267,22 +306,28 @@ code = '''
lfs2_unmount(&lfs2);
'''
[[case]] # file removal
define.N = 'range(0, 100, 3)'
[cases.test_dirs_file_removal]
defines.N = 'range(3, 100, 11)'
if = 'N < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "removeme%03d", i);
lfs2_file_t file;
lfs2_file_open(&lfs2, &file, path,
LFS2_O_WRONLY | LFS2_O_CREAT | LFS2_O_EXCL) => 0;
lfs2_file_close(&lfs2, &file) => 0;
}
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -290,6 +335,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "removeme%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_REG);
@@ -299,14 +345,15 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "removeme%03d", i);
lfs2_remove(&lfs2, path) => 0;
}
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -319,22 +366,28 @@ code = '''
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # file rename
define.N = 'range(0, 100, 3)'
[cases.test_dirs_file_rename]
defines.N = 'range(3, 100, 11)'
if = 'N < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "test%03d", i);
lfs2_file_t file;
lfs2_file_open(&lfs2, &file, path,
LFS2_O_WRONLY | LFS2_O_CREAT | LFS2_O_EXCL) => 0;
lfs2_file_close(&lfs2, &file) => 0;
}
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -342,6 +395,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "test%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_REG);
@@ -351,7 +405,7 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < N; i++) {
char oldpath[128];
char newpath[128];
@@ -361,7 +415,7 @@ code = '''
}
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -370,6 +424,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "tedd%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_REG);
@@ -380,29 +435,36 @@ code = '''
lfs2_unmount(&lfs2);
'''
[[case]] # reentrant file creation/rename/removal
define.N = [5, 25]
[cases.test_dirs_file_reentrant]
defines.N = [5, 25]
if = 'N < BLOCK_COUNT/2'
reentrant = true
code = '''
err = lfs2_mount(&lfs2, &cfg);
lfs2_t lfs2;
int err = lfs2_mount(&lfs2, cfg);
if (err) {
lfs2_format(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
}
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hi%03d", i);
lfs2_file_t file;
lfs2_file_open(&lfs2, &file, path, LFS2_O_CREAT | LFS2_O_WRONLY) => 0;
lfs2_file_close(&lfs2, &file) => 0;
}
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hello%03d", i);
err = lfs2_remove(&lfs2, path);
assert(err == 0 || err == LFS2_ERR_NOENT);
}
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -410,6 +472,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hi%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_REG);
@@ -435,6 +498,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hello%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_REG);
@@ -444,6 +508,7 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "hello%03d", i);
lfs2_remove(&lfs2, path) => 0;
}
@@ -460,24 +525,28 @@ code = '''
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # nested directories
[cases.test_dirs_nested]
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_mkdir(&lfs2, "potato") => 0;
lfs2_file_t file;
lfs2_file_open(&lfs2, &file, "burito",
LFS2_O_WRONLY | LFS2_O_CREAT | LFS2_O_EXCL) => 0;
lfs2_file_close(&lfs2, &file) => 0;
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_mkdir(&lfs2, "potato/baked") => 0;
lfs2_mkdir(&lfs2, "potato/sweet") => 0;
lfs2_mkdir(&lfs2, "potato/fried") => 0;
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "potato") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
info.type => LFS2_TYPE_DIR;
@@ -498,21 +567,21 @@ code = '''
lfs2_unmount(&lfs2) => 0;
// try removing?
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_remove(&lfs2, "potato") => LFS2_ERR_NOTEMPTY;
lfs2_unmount(&lfs2) => 0;
// try renaming?
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_rename(&lfs2, "potato", "coldpotato") => 0;
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_rename(&lfs2, "coldpotato", "warmpotato") => 0;
lfs2_rename(&lfs2, "warmpotato", "hotpotato") => 0;
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_remove(&lfs2, "potato") => LFS2_ERR_NOENT;
lfs2_remove(&lfs2, "coldpotato") => LFS2_ERR_NOENT;
lfs2_remove(&lfs2, "warmpotato") => LFS2_ERR_NOENT;
@@ -520,7 +589,7 @@ code = '''
lfs2_unmount(&lfs2) => 0;
// try cross-directory renaming
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_mkdir(&lfs2, "coldpotato") => 0;
lfs2_rename(&lfs2, "hotpotato/baked", "coldpotato/baked") => 0;
lfs2_rename(&lfs2, "coldpotato", "hotpotato") => LFS2_ERR_NOTEMPTY;
@@ -536,7 +605,7 @@ code = '''
lfs2_remove(&lfs2, "hotpotato") => LFS2_ERR_NOTEMPTY;
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_open(&lfs2, &dir, "hotpotato") => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
@@ -558,7 +627,7 @@ code = '''
lfs2_unmount(&lfs2) => 0;
// final remove
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_remove(&lfs2, "hotpotato") => LFS2_ERR_NOTEMPTY;
lfs2_remove(&lfs2, "hotpotato/baked") => 0;
lfs2_remove(&lfs2, "hotpotato") => LFS2_ERR_NOTEMPTY;
@@ -568,7 +637,7 @@ code = '''
lfs2_remove(&lfs2, "hotpotato") => 0;
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
@@ -584,17 +653,22 @@ code = '''
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # recursive remove
define.N = [10, 100]
[cases.test_dirs_recursive_remove]
defines.N = [10, 100]
if = 'N < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_mkdir(&lfs2, "prickly-pear") => 0;
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "prickly-pear/cactus%03d", i);
lfs2_mkdir(&lfs2, path) => 0;
}
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "prickly-pear") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -602,6 +676,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "cactus%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -611,7 +686,7 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2);
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_remove(&lfs2, "prickly-pear") => LFS2_ERR_NOTEMPTY;
lfs2_dir_open(&lfs2, &dir, "prickly-pear") => 0;
@@ -622,6 +697,7 @@ code = '''
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, "..") == 0);
for (int i = 0; i < N; i++) {
char path[1024];
sprintf(path, "cactus%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -636,22 +712,24 @@ code = '''
lfs2_remove(&lfs2, "prickly-pear") => LFS2_ERR_NOENT;
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_remove(&lfs2, "prickly-pear") => LFS2_ERR_NOENT;
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # other error cases
[cases.test_dirs_other_errors]
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_mkdir(&lfs2, "potato") => 0;
lfs2_file_t file;
lfs2_file_open(&lfs2, &file, "burito",
LFS2_O_WRONLY | LFS2_O_CREAT | LFS2_O_EXCL) => 0;
lfs2_file_close(&lfs2, &file) => 0;
lfs2_unmount(&lfs2) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_mkdir(&lfs2, "potato") => LFS2_ERR_EXIST;
lfs2_mkdir(&lfs2, "burito") => LFS2_ERR_EXIST;
@@ -659,6 +737,7 @@ code = '''
LFS2_O_WRONLY | LFS2_O_CREAT | LFS2_O_EXCL) => LFS2_ERR_EXIST;
lfs2_file_open(&lfs2, &file, "potato",
LFS2_O_WRONLY | LFS2_O_CREAT | LFS2_O_EXCL) => LFS2_ERR_EXIST;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "tomato") => LFS2_ERR_NOENT;
lfs2_dir_open(&lfs2, &dir, "burito") => LFS2_ERR_NOTDIR;
lfs2_file_open(&lfs2, &file, "tomato", LFS2_O_RDONLY) => LFS2_ERR_NOENT;
@@ -678,6 +757,7 @@ code = '''
// check that errors did not corrupt directory
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
assert(strcmp(info.name, ".") == 0);
@@ -696,7 +776,7 @@ code = '''
lfs2_unmount(&lfs2) => 0;
// or on disk
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(info.type == LFS2_TYPE_DIR);
@@ -715,21 +795,27 @@ code = '''
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # directory seek
define.COUNT = [4, 128, 132]
[cases.test_dirs_seek]
defines.COUNT = [4, 128, 132]
if = 'COUNT < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
lfs2_mkdir(&lfs2, "hello") => 0;
for (int i = 0; i < COUNT; i++) {
char path[1024];
sprintf(path, "hello/kitty%03d", i);
lfs2_mkdir(&lfs2, path) => 0;
}
lfs2_unmount(&lfs2) => 0;
for (int j = 2; j < COUNT; j++) {
lfs2_mount(&lfs2, &cfg) => 0;
// try seeking to each dir entry
for (int j = 0; j < COUNT; j++) {
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "hello") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
assert(info.type == LFS2_TYPE_DIR);
@@ -737,24 +823,25 @@ code = '''
assert(strcmp(info.name, "..") == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_soff_t pos;
for (int i = 0; i < j; i++) {
char path[1024];
sprintf(path, "kitty%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, path) == 0);
assert(info.type == LFS2_TYPE_DIR);
pos = lfs2_dir_tell(&lfs2, &dir);
assert(pos >= 0);
}
lfs2_soff_t pos = lfs2_dir_tell(&lfs2, &dir);
assert(pos >= 0);
lfs2_dir_seek(&lfs2, &dir, pos) => 0;
char path[1024];
sprintf(path, "kitty%03d", j);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, path) == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_rewind(&lfs2, &dir) => 0;
sprintf(path, "kitty%03d", 0);
sprintf(path, "kitty%03u", 0);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
assert(info.type == LFS2_TYPE_DIR);
@@ -774,22 +861,73 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2) => 0;
}
// try seeking to end of dir
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "hello") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, "..") == 0);
assert(info.type == LFS2_TYPE_DIR);
for (int i = 0; i < COUNT; i++) {
char path[1024];
sprintf(path, "kitty%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, path) == 0);
assert(info.type == LFS2_TYPE_DIR);
}
lfs2_soff_t pos = lfs2_dir_tell(&lfs2, &dir);
assert(pos >= 0);
lfs2_dir_read(&lfs2, &dir, &info) => 0;
lfs2_dir_seek(&lfs2, &dir, pos) => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 0;
lfs2_dir_rewind(&lfs2, &dir) => 0;
char path[1024];
sprintf(path, "kitty%03d", 0);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, "..") == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, path) == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_seek(&lfs2, &dir, pos) => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 0;
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2) => 0;
'''
[[case]] # root seek
define.COUNT = [4, 128, 132]
[cases.test_dirs_toot_seek]
defines.COUNT = [4, 128, 132]
if = 'COUNT < BLOCK_COUNT/2'
code = '''
lfs2_format(&lfs2, &cfg) => 0;
lfs2_mount(&lfs2, &cfg) => 0;
lfs2_t lfs2;
lfs2_format(&lfs2, cfg) => 0;
lfs2_mount(&lfs2, cfg) => 0;
for (int i = 0; i < COUNT; i++) {
char path[1024];
sprintf(path, "hi%03d", i);
lfs2_mkdir(&lfs2, path) => 0;
}
lfs2_unmount(&lfs2) => 0;
for (int j = 2; j < COUNT; j++) {
lfs2_mount(&lfs2, &cfg) => 0;
for (int j = 0; j < COUNT; j++) {
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
assert(info.type == LFS2_TYPE_DIR);
@@ -797,24 +935,25 @@ code = '''
assert(strcmp(info.name, "..") == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_soff_t pos;
for (int i = 0; i < j; i++) {
char path[1024];
sprintf(path, "hi%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, path) == 0);
assert(info.type == LFS2_TYPE_DIR);
pos = lfs2_dir_tell(&lfs2, &dir);
assert(pos >= 0);
}
lfs2_soff_t pos = lfs2_dir_tell(&lfs2, &dir);
assert(pos >= 0);
lfs2_dir_seek(&lfs2, &dir, pos) => 0;
char path[1024];
sprintf(path, "hi%03d", j);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, path) == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_rewind(&lfs2, &dir) => 0;
sprintf(path, "hi%03d", 0);
sprintf(path, "hi%03u", 0);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
assert(info.type == LFS2_TYPE_DIR);
@@ -834,5 +973,51 @@ code = '''
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2) => 0;
}
// try seeking to end of dir
lfs2_mount(&lfs2, cfg) => 0;
lfs2_dir_t dir;
lfs2_dir_open(&lfs2, &dir, "/") => 0;
struct lfs2_info info;
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, "..") == 0);
assert(info.type == LFS2_TYPE_DIR);
for (int i = 0; i < COUNT; i++) {
char path[1024];
sprintf(path, "hi%03d", i);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, path) == 0);
assert(info.type == LFS2_TYPE_DIR);
}
lfs2_soff_t pos = lfs2_dir_tell(&lfs2, &dir);
assert(pos >= 0);
lfs2_dir_read(&lfs2, &dir, &info) => 0;
lfs2_dir_seek(&lfs2, &dir, pos) => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 0;
lfs2_dir_rewind(&lfs2, &dir) => 0;
char path[1024];
sprintf(path, "hi%03d", 0);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, ".") == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, "..") == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_read(&lfs2, &dir, &info) => 1;
assert(strcmp(info.name, path) == 0);
assert(info.type == LFS2_TYPE_DIR);
lfs2_dir_seek(&lfs2, &dir, pos) => 0;
lfs2_dir_read(&lfs2, &dir, &info) => 0;
lfs2_dir_close(&lfs2, &dir) => 0;
lfs2_unmount(&lfs2) => 0;
'''