blockFile

Log

Files

Refs

LICENSE

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 }