test_interspersed.toml 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. [[case]] # interspersed file test
  2. # TODO FILES=26 found bug
  3. #define.SIZE = [10, 100]
  4. #define.FILES = [4, 10, 26]
  5. define = [
  6. {SIZE=10, FILES=4},
  7. {SIZE=10, FILES=10},
  8. #{SIZE=10, FILES=26},
  9. {SIZE=100, FILES=4},
  10. {SIZE=100, FILES=10},
  11. #{SIZE=100, FILES=26},
  12. ]
  13. code = '''
  14. lfs_file_t files[FILES];
  15. const char alphas[] = "abcdefghijklmnopqrstuvwxyz";
  16. lfs_format(&lfs, &cfg) => 0;
  17. lfs_mount(&lfs, &cfg) => 0;
  18. for (int j = 0; j < FILES; j++) {
  19. sprintf(path, "%c", alphas[j]);
  20. lfs_file_open(&lfs, &files[j], path,
  21. LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
  22. }
  23. for (int i = 0; i < SIZE; i++) {
  24. for (int j = 0; j < FILES; j++) {
  25. lfs_file_write(&lfs, &files[j], &alphas[j], 1) => 1;
  26. }
  27. }
  28. for (int j = 0; j < FILES; j++) {
  29. lfs_file_close(&lfs, &files[j]);
  30. }
  31. lfs_dir_open(&lfs, &dir, "/") => 0;
  32. lfs_dir_read(&lfs, &dir, &info) => 1;
  33. assert(strcmp(info.name, ".") == 0);
  34. assert(info.type == LFS_TYPE_DIR);
  35. lfs_dir_read(&lfs, &dir, &info) => 1;
  36. assert(strcmp(info.name, "..") == 0);
  37. assert(info.type == LFS_TYPE_DIR);
  38. for (int j = 0; j < FILES; j++) {
  39. sprintf(path, "%c", alphas[j]);
  40. lfs_dir_read(&lfs, &dir, &info) => 1;
  41. assert(strcmp(info.name, path) == 0);
  42. assert(info.type == LFS_TYPE_REG);
  43. assert(info.size == SIZE);
  44. }
  45. lfs_dir_read(&lfs, &dir, &info) => 0;
  46. lfs_dir_close(&lfs, &dir) => 0;
  47. for (int j = 0; j < FILES; j++) {
  48. sprintf(path, "%c", alphas[j]);
  49. lfs_file_open(&lfs, &files[j], path, LFS_O_RDONLY) => 0;
  50. }
  51. for (int i = 0; i < 10; i++) {
  52. for (int j = 0; j < FILES; j++) {
  53. lfs_file_read(&lfs, &files[j], buffer, 1) => 1;
  54. assert(buffer[0] == alphas[j]);
  55. }
  56. }
  57. for (int j = 0; j < FILES; j++) {
  58. lfs_file_close(&lfs, &files[j]);
  59. }
  60. lfs_unmount(&lfs) => 0;
  61. '''
  62. [[case]] # interspersed remove file test
  63. define.SIZE = [10, 100]
  64. define.FILES = [4, 10, 26]
  65. code = '''
  66. const char alphas[] = "abcdefghijklmnopqrstuvwxyz";
  67. lfs_format(&lfs, &cfg) => 0;
  68. lfs_mount(&lfs, &cfg) => 0;
  69. for (int j = 0; j < FILES; j++) {
  70. sprintf(path, "%c", alphas[j]);
  71. lfs_file_open(&lfs, &file, path,
  72. LFS_O_WRONLY | LFS_O_CREAT | LFS_O_EXCL) => 0;
  73. for (int i = 0; i < SIZE; i++) {
  74. lfs_file_write(&lfs, &file, &alphas[j], 1) => 1;
  75. }
  76. lfs_file_close(&lfs, &file);
  77. }
  78. lfs_unmount(&lfs) => 0;
  79. lfs_mount(&lfs, &cfg) => 0;
  80. lfs_file_open(&lfs, &file, "zzz", LFS_O_WRONLY | LFS_O_CREAT) => 0;
  81. for (int j = 0; j < FILES; j++) {
  82. lfs_file_write(&lfs, &file, (const void*)"~", 1) => 1;
  83. lfs_file_sync(&lfs, &file) => 0;
  84. sprintf(path, "%c", alphas[j]);
  85. lfs_remove(&lfs, path) => 0;
  86. }
  87. lfs_file_close(&lfs, &file);
  88. lfs_dir_open(&lfs, &dir, "/") => 0;
  89. lfs_dir_read(&lfs, &dir, &info) => 1;
  90. assert(strcmp(info.name, ".") == 0);
  91. assert(info.type == LFS_TYPE_DIR);
  92. lfs_dir_read(&lfs, &dir, &info) => 1;
  93. assert(strcmp(info.name, "..") == 0);
  94. assert(info.type == LFS_TYPE_DIR);
  95. lfs_dir_read(&lfs, &dir, &info) => 1;
  96. assert(strcmp(info.name, "zzz") == 0);
  97. assert(info.type == LFS_TYPE_REG);
  98. assert(info.size == FILES);
  99. lfs_dir_read(&lfs, &dir, &info) => 0;
  100. lfs_dir_close(&lfs, &dir) => 0;
  101. lfs_file_open(&lfs, &file, "zzz", LFS_O_RDONLY) => 0;
  102. for (int i = 0; i < FILES; i++) {
  103. lfs_file_read(&lfs, &file, buffer, 1) => 1;
  104. assert(buffer[0] == '~');
  105. }
  106. lfs_file_close(&lfs, &file);
  107. lfs_unmount(&lfs) => 0;
  108. '''
  109. [[case]] # remove inconveniently test
  110. define.SIZE = [10, 100]
  111. code = '''
  112. lfs_format(&lfs, &cfg) => 0;
  113. lfs_mount(&lfs, &cfg) => 0;
  114. lfs_file_t files[3];
  115. lfs_file_open(&lfs, &files[0], "e", LFS_O_WRONLY | LFS_O_CREAT) => 0;
  116. lfs_file_open(&lfs, &files[1], "f", LFS_O_WRONLY | LFS_O_CREAT) => 0;
  117. lfs_file_open(&lfs, &files[2], "g", LFS_O_WRONLY | LFS_O_CREAT) => 0;
  118. for (int i = 0; i < SIZE/2; i++) {
  119. lfs_file_write(&lfs, &files[0], (const void*)"e", 1) => 1;
  120. lfs_file_write(&lfs, &files[1], (const void*)"f", 1) => 1;
  121. lfs_file_write(&lfs, &files[2], (const void*)"g", 1) => 1;
  122. }
  123. lfs_remove(&lfs, "f") => 0;
  124. for (int i = 0; i < SIZE/2; i++) {
  125. lfs_file_write(&lfs, &files[0], (const void*)"e", 1) => 1;
  126. lfs_file_write(&lfs, &files[1], (const void*)"f", 1) => 1;
  127. lfs_file_write(&lfs, &files[2], (const void*)"g", 1) => 1;
  128. }
  129. lfs_file_close(&lfs, &files[0]);
  130. lfs_file_close(&lfs, &files[1]);
  131. lfs_file_close(&lfs, &files[2]);
  132. lfs_dir_open(&lfs, &dir, "/") => 0;
  133. lfs_dir_read(&lfs, &dir, &info) => 1;
  134. assert(strcmp(info.name, ".") == 0);
  135. assert(info.type == LFS_TYPE_DIR);
  136. lfs_dir_read(&lfs, &dir, &info) => 1;
  137. assert(strcmp(info.name, "..") == 0);
  138. assert(info.type == LFS_TYPE_DIR);
  139. lfs_dir_read(&lfs, &dir, &info) => 1;
  140. assert(strcmp(info.name, "e") == 0);
  141. assert(info.type == LFS_TYPE_REG);
  142. assert(info.size == SIZE);
  143. lfs_dir_read(&lfs, &dir, &info) => 1;
  144. assert(strcmp(info.name, "g") == 0);
  145. assert(info.type == LFS_TYPE_REG);
  146. assert(info.size == SIZE);
  147. lfs_dir_read(&lfs, &dir, &info) => 0;
  148. lfs_dir_close(&lfs, &dir) => 0;
  149. lfs_file_open(&lfs, &files[0], "e", LFS_O_RDONLY) => 0;
  150. lfs_file_open(&lfs, &files[1], "g", LFS_O_RDONLY) => 0;
  151. for (int i = 0; i < SIZE; i++) {
  152. lfs_file_read(&lfs, &files[0], buffer, 1) => 1;
  153. assert(buffer[0] == 'e');
  154. lfs_file_read(&lfs, &files[1], buffer, 1) => 1;
  155. assert(buffer[0] == 'g');
  156. }
  157. lfs_file_close(&lfs, &files[0]);
  158. lfs_file_close(&lfs, &files[1]);
  159. lfs_unmount(&lfs) => 0;
  160. '''
  161. [[case]] # reentrant interspersed file test
  162. # TODO FILES=26 found bug
  163. #define.SIZE = [10, 100]
  164. #define.FILES = [4, 10, 26]
  165. define = [
  166. {SIZE=10, FILES=4},
  167. {SIZE=10, FILES=10},
  168. #{SIZE=10, FILES=26},
  169. {SIZE=100, FILES=4},
  170. #{SIZE=100, FILES=10},
  171. #{SIZE=100, FILES=26},
  172. ]
  173. reentrant = true
  174. code = '''
  175. lfs_file_t files[FILES];
  176. const char alphas[] = "abcdefghijklmnopqrstuvwxyz";
  177. err = lfs_mount(&lfs, &cfg);
  178. if (err) {
  179. lfs_format(&lfs, &cfg) => 0;
  180. lfs_mount(&lfs, &cfg) => 0;
  181. }
  182. for (int j = 0; j < FILES; j++) {
  183. sprintf(path, "%c", alphas[j]);
  184. lfs_file_open(&lfs, &files[j], path,
  185. LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND) => 0;
  186. }
  187. for (int i = 0; i < SIZE; i++) {
  188. for (int j = 0; j < FILES; j++) {
  189. size = lfs_file_size(&lfs, &files[j]);
  190. assert((int)size >= 0);
  191. if ((int)size <= i) {
  192. lfs_file_write(&lfs, &files[j], &alphas[j], 1) => 1;
  193. lfs_file_sync(&lfs, &files[j]) => 0;
  194. }
  195. }
  196. }
  197. for (int j = 0; j < FILES; j++) {
  198. lfs_file_close(&lfs, &files[j]);
  199. }
  200. lfs_dir_open(&lfs, &dir, "/") => 0;
  201. lfs_dir_read(&lfs, &dir, &info) => 1;
  202. assert(strcmp(info.name, ".") == 0);
  203. assert(info.type == LFS_TYPE_DIR);
  204. lfs_dir_read(&lfs, &dir, &info) => 1;
  205. assert(strcmp(info.name, "..") == 0);
  206. assert(info.type == LFS_TYPE_DIR);
  207. for (int j = 0; j < FILES; j++) {
  208. sprintf(path, "%c", alphas[j]);
  209. lfs_dir_read(&lfs, &dir, &info) => 1;
  210. assert(strcmp(info.name, path) == 0);
  211. assert(info.type == LFS_TYPE_REG);
  212. assert(info.size == SIZE);
  213. }
  214. lfs_dir_read(&lfs, &dir, &info) => 0;
  215. lfs_dir_close(&lfs, &dir) => 0;
  216. for (int j = 0; j < FILES; j++) {
  217. sprintf(path, "%c", alphas[j]);
  218. lfs_file_open(&lfs, &files[j], path, LFS_O_RDONLY) => 0;
  219. }
  220. for (int i = 0; i < 10; i++) {
  221. for (int j = 0; j < FILES; j++) {
  222. lfs_file_read(&lfs, &files[j], buffer, 1) => 1;
  223. assert(buffer[0] == alphas[j]);
  224. }
  225. }
  226. for (int j = 0; j < FILES; j++) {
  227. lfs_file_close(&lfs, &files[j]);
  228. }
  229. lfs_unmount(&lfs) => 0;
  230. '''