testBlockFileMem.c (4277B)
1 #include <stdlib.h> 2 #include <stdio.h> 3 #include <string.h> 4 5 #define ck_assert_str_eq(a,b) a;b; 6 #define ck_assert_str_ne(a,b) a;b; 7 #define ck_assert_ptr_eq(a,b) a;b; 8 #define ck_assert_ptr_ne(a,b) a;b; 9 #define ck_assert_uint_eq(a,b) a;b; 10 #define ck_assert_uint_ne(a,b) a;b; 11 #define ck_assert_int_eq(a,b) a;b; 12 #define ck_assert_int_ne(a,b) a;b; 13 #define ck_assert(a) a; 14 15 16 #include "libsheepyObject.h" 17 #include "blockFile.h" 18 19 int argc; char **argv; 20 21 blockFilet bf; 22 23 void basetT(void) { 24 25 initiateBlockFile(&bf); 26 freeO(&bf); 27 28 blockFilet *rg = NULL; 29 initiateAllocateBlockFile(&rg); 30 terminateO(rg); 31 32 rg = allocBlockFile("file.db"); 33 34 char *s = toStringO(rg); 35 36 ck_assert_str_eq(s, "TODO - blockFile"); 37 free(s); 38 39 blockFilet *rgDup = duplicateO(rg); 40 terminateO(rgDup); 41 42 terminateO(rg); 43 44 } 45 46 char *s1 = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111"; 47 48 char *s2 = "222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222 cfp command printing current path in front of given parameters searchReplace command searches strings in files and replaces them with given searchReplace command searches strings in files and replaces them with"; 49 50 char *s3 = "get block emove data: remove(file, block): bool read block header find first block add blocks to freeF load: load(file, callback) read block 1, find first block add read blocks to a list find next chain of blocks > recreate index, or save the index delete block file: delete(file) close: close(file) delete file: deleteF(filename) add data to a block: addBlock(file, void*, length): u64 block add data in many blocks: addData(file, void*, length): u64[], end with 0"; 51 52 void addT(void) { 53 54 initiateBlockFile(&bf); 55 56 bf.f->open(&bf, "file.db"); 57 bf.f->delete(&bf); 58 bf.f->open(&bf, "file.db"); 59 60 u64 r; 61 62 r = addBFO(&bf, "qweqwe", 7); 63 ck_assert_int_eq(r, 1); 64 65 // add compressed block 66 r = addBFO(&bf, s2, strlen(s2)+1); 67 ck_assert_int_eq(r, 2); 68 69 // add big block 70 r = addBFO(&bf, s1, strlen(s1)+1); 71 ck_assert_int_eq(r, 5); 72 73 freeO(&bf); 74 75 // no free blocks 76 ck_assert_int_eq(fileSize("file.dbx"), 0); 77 78 } 79 80 void getT(void) { 81 82 initiateBlockFile(&bf); 83 84 bf.f->open(&bf, "file.db"); 85 86 bufBlockFilet res; 87 88 res = getBFO(&bf, 5); 89 ck_assert_str_eq((char*)res.data, s1); 90 ck_assert_int_eq(res.len, strlen(s1)+1); 91 free(res.data); 92 93 res = getBFO(&bf, 2); 94 ck_assert_str_eq((char*)res.data, s2); 95 ck_assert_int_eq(res.len, strlen(s2)+1); 96 free(res.data); 97 98 res = getBFO(&bf, 1); 99 ck_assert_str_eq((char*)res.data, "qweqwe"); 100 ck_assert_int_eq(res.len, 7); 101 free(res.data); 102 103 freeO(&bf); 104 105 // no free blocks 106 ck_assert_int_eq(fileSize("file.dbx"), 0); 107 108 } 109 110 void removeT(void) { 111 112 initiateBlockFile(&bf); 113 114 bf.f->open(&bf, "file.db"); 115 116 bufBlockFilet res; 117 bool r; 118 u64 R; 119 120 // remove block 1 121 r = removeBFO(&bf, 1); 122 ck_assert(r); 123 124 // remove block 1 again, fails 125 r = removeBFO(&bf, 1); 126 ck_assert(!r); 127 128 // get a deleted block 129 res = getBFO(&bf, 1); 130 ck_assert_ptr_eq(res.data, NULL); 131 ck_assert_int_eq(res.len, 0); 132 133 // add block 134 R = addBFO(&bf, "asdasd", 7); 135 ck_assert_int_eq(R, 1); 136 137 // remove block 5 138 r = removeBFO(&bf, 5); 139 ck_assert(r); 140 141 // add block 142 R = addBFO(&bf, "zxczxc", 7); 143 ck_assert_int_eq(R, 7); 144 145 // add another big block 146 R = addBFO(&bf, s3, strlen(s3)+1); 147 ck_assert_int_eq(R, 6); 148 149 // remove block 2 150 r = removeBFO(&bf, 2); 151 ck_assert(r); 152 153 // remove block 2 154 r = removeBFO(&bf, 2); 155 ck_assert(!r); 156 157 freeO(&bf); 158 159 // 3 free blocks 160 ck_assert_int_eq(fileSize("file.dbx"), 12); 161 162 } 163 164 bool loadFunc(void UNUSED *c, u64 UNUSED b, bufBlockFilet data) { 165 /* cast(char*, s, data.data); */ 166 /* logVarG(b); */ 167 /* logVarG(s); */ 168 /* logVarG(data.len); */ 169 free(data.data); 170 return true; 171 } 172 173 void loadT(void) { 174 175 initiateBlockFile(&bf); 176 177 bf.f->open(&bf, "file.db"); 178 179 loadBFO(&bf, NULL, loadFunc); 180 /* bufBlockFilet res; */ 181 /* bool r; */ 182 /* u64 R; */ 183 184 freeO(&bf); 185 186 // 3 free blocks 187 ck_assert_int_eq(fileSize("file.dbx"), 12); 188 189 } 190 191 192 int main(int n, char**v) { 193 194 initLibsheepy(v[0]); 195 setLogMode(LOG_VERBOSE); 196 197 basetT(); 198 addT(); 199 getT(); 200 removeT(); 201 loadT(); 202 }