1 | 1 |
deleted file mode 100644 |
... | ... |
@@ -1,374 +0,0 @@ |
1 |
-/* |
|
2 |
- * recenteditor_data.c |
|
3 |
- * |
|
4 |
- * A programmers editor |
|
5 |
- * |
|
6 |
- * Tests (ensure correct functionality of modules) |
|
7 |
- * |
|
8 |
- * Author: Dario Rodriguez dario@softhome.net |
|
9 |
- * This program is licensed under the terms of GNU GPL v2.1+ |
|
10 |
- */ |
|
11 |
- |
|
12 |
-#include <stdio.h> |
|
13 |
-#include <stdlib.h> |
|
14 |
-#include <unistd.h> |
|
15 |
-#include <string.h> |
|
16 |
-#include <limits.h> |
|
17 |
-#include <fcntl.h> |
|
18 |
-#include <errno.h> |
|
19 |
- |
|
20 |
-#include "recenteditor_data.h" |
|
21 |
- |
|
22 |
-#define PREFIX "retest_" |
|
23 |
-#define TEST_OK "OK" |
|
24 |
- |
|
25 |
-typedef struct test_t { |
|
26 |
- char *name; |
|
27 |
- char *(*fn)(redata_t *,char *,char *, int, int); |
|
28 |
- char *param1; |
|
29 |
- char *param2; |
|
30 |
- int int1; |
|
31 |
- int int2; |
|
32 |
-} test_t; |
|
33 |
- |
|
34 |
-static char *malloc_data(int size, int seed); |
|
35 |
-static int write_file(char *filename, char *buf, int buflen); |
|
36 |
- |
|
37 |
-char *test_newfile(redata_t *redata, char *filename, char *dummy, int filesize, int dummy2); |
|
38 |
-char *test_edit(redata_t *redata, char *filename, char *edits, int filesize, int seed); |
|
39 |
- |
|
40 |
-int |
|
41 |
-main(int argc, char *argv[]) |
|
42 |
-{ |
|
43 |
- static int sizes[]={-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31,32,33,63,64,65,127,128,129,1023,1024,1025,16384}; |
|
44 |
- test_t tests[]={ |
|
45 |
- {"newfile_16",test_newfile,PREFIX "FILE", NULL, 16, 0}, |
|
46 |
- {"newfile_1024",test_newfile,PREFIX "FILE", NULL, 1024, 0}, |
|
47 |
- {"newfile_32767",test_newfile,PREFIX "FILE", NULL, 32767, 0}, |
|
48 |
- {"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, |
|
49 |
- {"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
|
50 |
- {"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
|
51 |
- {"testedit_add",test_edit,PREFIX "EDIT", "A0$Testing add$",0,0}, |
|
52 |
- {"testedit_del",test_edit,PREFIX "EDIT", "A0$Testing add/del$D8$add/$",0,0}, |
|
53 |
- {"testedit_move",test_edit,PREFIX "EDIT", "A0$This is a text to move.$M17,7$ move$",0,0}, |
|
54 |
- }; |
|
55 |
- int flag_exit=0,flag_all=0; |
|
56 |
- redata_t *redata; |
|
57 |
- int i,s; |
|
58 |
- int nerrors,total; |
|
59 |
- char *res; |
|
60 |
- for(i=1;i<argc;i++) { |
|
61 |
- if(strcmp(argv[i],"--help")==0) { |
|
62 |
- fprintf(stderr,"Syntax: %s [--all] [--exit] [--help]\nExplanation:\n\t--all: do even the slow tests\n\t--exit: exit program at first unsuccessful test\n\t--help: this text\n",argv[0]); |
|
63 |
- return(1); |
|
64 |
- } else if(strcmp(argv[i],"--all")==0) { |
|
65 |
- flag_all=1; |
|
66 |
- } else if(strcmp(argv[i],"--exit")==0) { |
|
67 |
- flag_exit=1; |
|
68 |
- } |
|
69 |
- } |
|
70 |
- nerrors=0; |
|
71 |
- total=0; |
|
72 |
- for(s=0;s<(sizeof(sizes)/sizeof(sizes[0]));s++) { |
|
73 |
- if(sizes[s]!=-1) |
|
74 |
- fprintf(stderr,"SIZE: %i\n",sizes[s]); |
|
75 |
- for(i=0;i<(sizeof(tests)/sizeof(tests[0]));i++,total++) { |
|
76 |
- if(!flag_all && tests[i].int1>=1024) |
|
77 |
- continue; /* too slow: skip unless testing --all */ |
|
78 |
- if((redata=redata_init())==NULL) { |
|
79 |
- fprintf(stderr,"ERROR: problem initializing redata module\n"); |
|
80 |
- return(1); |
|
81 |
- } |
|
82 |
- if(sizes[s]!=-1) |
|
83 |
- redata_config_chunkdatasize(redata,sizes[s]); |
|
84 |
- fprintf(stderr,"%s...",tests[i].name); |
|
85 |
- res=tests[i].fn(redata,tests[i].param1,tests[i].param2,tests[i].int1,tests[i].int2); |
|
86 |
- if(strcmp(res,TEST_OK)==0) { |
|
87 |
- fprintf(stderr," ok.\n"); |
|
88 |
- } else { |
|
89 |
- fprintf(stderr," ERROR: %s\n",res); |
|
90 |
- nerrors++; |
|
91 |
- if(flag_exit) { |
|
92 |
- /* exit on first error */ |
|
93 |
- s=sizeof(sizes)/sizeof(sizes[0]); |
|
94 |
- break; |
|
95 |
- } |
|
96 |
- } |
|
97 |
- redata_free(redata),redata=NULL; |
|
98 |
- } |
|
99 |
- fprintf(stderr,"\n"); |
|
100 |
- } |
|
101 |
- if(nerrors==0) |
|
102 |
- fprintf(stderr,"All %i tests passed OK\n",total); |
|
103 |
- else |
|
104 |
- fprintf(stderr,"%i test(s) failed of %i tests run.\n",nerrors,total); |
|
105 |
- redata_free(redata),redata=NULL; |
|
106 |
- return((nerrors==0)?0:1); |
|
107 |
-} |
|
108 |
- |
|
109 |
-static char * |
|
110 |
-malloc_data(int size, int seed) |
|
111 |
-{ |
|
112 |
- char *mem; |
|
113 |
- int i; |
|
114 |
- if(size<=0 || (mem=malloc(size))==NULL) |
|
115 |
- return(NULL); |
|
116 |
- memset(mem,0,size); |
|
117 |
- if(seed==0) { |
|
118 |
- for(i=0;i<size;i++) |
|
119 |
- ((unsigned char *)mem)[i]=(i%256); |
|
120 |
- } else { |
|
121 |
- srandom(*((unsigned int *)(&seed))); |
|
122 |
- for(i=0;i<size;i++) |
|
123 |
- ((unsigned char *)mem)[i]=(random()&0xff); |
|
124 |
- } |
|
125 |
- return(mem); |
|
126 |
- |
|
127 |
-} |
|
128 |
- |
|
129 |
-static int |
|
130 |
-write_file(char *filename, char *buf, int buflen) |
|
131 |
-{ |
|
132 |
- int fd; |
|
133 |
- if((fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644))==-1) { |
|
134 |
- free(buf),buf=NULL; |
|
135 |
- return(-1); |
|
136 |
- } |
|
137 |
- write(fd,buf,buflen); |
|
138 |
- close(fd),fd=-1; |
|
139 |
- return(0); |
|
140 |
-} |
|
141 |
- |
|
142 |
-char * |
|
143 |
-test_newfile(redata_t *redata, char *filename, char *dummy, int filesize, int dummy2) |
|
144 |
-{ |
|
145 |
- char *mem; |
|
146 |
- char hash129_pre[129]; |
|
147 |
- char hash129_post[129]; |
|
148 |
-fprintf(stderr,"\ntest_newfile(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\"":"",(filename!=NULL)?filename:"NULL",(filename!=NULL)?"\"":"",(dummy!=NULL)?"\"":"",(dummy!=NULL)?dummy:"NULL",(dummy!=NULL)?"\"":"",filesize,dummy2); |
|
149 |
- /* prepare file for loading */ |
|
150 |
- if((mem=malloc_data(filesize,0))==NULL) |
|
151 |
- return("insuf. mem. for temp. buffer"); |
|
152 |
- if(write_file(filename,mem,filesize)==-1) |
|
153 |
- return("couldn't create temporary file"); |
|
154 |
- redata_filehash(redata,filename,hash129_pre); |
|
155 |
- free(mem),mem=NULL; |
|
156 |
- /* load file */ |
|
157 |
- if(redata_load(redata,filename,0)!=0) { |
|
158 |
- unlink(filename); |
|
159 |
- return("couldn't load file"); |
|
160 |
- } |
|
161 |
- unlink(filename); |
|
162 |
- redata_hash(redata,hash129_post); |
|
163 |
- if(strcmp(hash129_pre,hash129_post)!=0) |
|
164 |
- return("loaded file is corrupted"); |
|
165 |
- /* save file */ |
|
166 |
- redata_save(redata,filename); |
|
167 |
- hash129_post[0]='\0'; |
|
168 |
- redata_filehash(redata,filename,hash129_post); |
|
169 |
- if(strcmp(hash129_pre,hash129_post)!=0) |
|
170 |
- return("saved file is corrupted"); |
|
171 |
- unlink(filename); |
|
172 |
- return(TEST_OK); |
|
173 |
-} |
|
174 |
- |
|
175 |
-char * |
|
176 |
-test_edit(redata_t *redata, char *filename, char *edits, int filesize, int seed) |
|
177 |
-{ |
|
178 |
- static char errorbuf[256]; |
|
179 |
- char progress[256]; |
|
180 |
- int k; |
|
181 |
- int cursize,maxsize; |
|
182 |
- char *ptr; |
|
183 |
- int l,o; |
|
184 |
- char *mem; |
|
185 |
- char endcode; |
|
186 |
- char *ptrend; |
|
187 |
- int size; |
|
188 |
- char hash129_memold[129]; |
|
189 |
- char hash129_mem[129]; |
|
190 |
- char hash129_redata[129]; |
|
191 |
- mem=NULL; |
|
192 |
-fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\"":"",(filename!=NULL)?filename:"NULL",(filename!=NULL)?"\"":"",(edits!=NULL)?"\"":"",(edits!=NULL)?edits:"NULL",(edits!=NULL)?"\"":"",filesize,seed); |
|
193 |
- /* two passes: k==0 count needed memory, k==1 do edits */ |
|
194 |
- for(k=0,maxsize=cursize=filesize,progress[0]='\0';k<2;k++,cursize=0,progress[0]='\0') { |
|
195 |
- for(ptr=edits;*ptr!='\0';) { |
|
196 |
- if(k!=0) { |
|
197 |
- redata_memhash(redata,mem,cursize,hash129_memold); |
|
198 |
- } |
|
199 |
- if((l=strlen(progress))<(sizeof(progress)-1)) { |
|
200 |
- progress[l]=(l<(sizeof(progress)-2))?*ptr:'+'; |
|
201 |
- progress[l+1]='\0'; |
|
202 |
- } |
|
203 |
-if(k!=0) unlink("test.pre"),unlink("test.post"),unlink("test.undo"),unlink("test.redo"); |
|
204 |
-if(k!=0) redata_save(redata,"test.pre"); |
|
205 |
- if(*ptr=='A') { |
|
206 |
- /* A<insertpos><endchar><text><endchar> */ |
|
207 |
- ptr++; |
|
208 |
- errno=0; |
|
209 |
- l=(int)strtol(ptr,&ptr,10); |
|
210 |
- if(errno!=0 || l<0 || l>cursize) { |
|
211 |
- if(mem!=NULL) |
|
212 |
- free(mem),mem=NULL; |
|
213 |
- return("test_edit(): error parsing position"); |
|
214 |
- } |
|
215 |
- endcode=*ptr; |
|
216 |
- ptr+=(*ptr!='\0')?1:0; |
|
217 |
- ptrend=strchr(ptr,endcode); |
|
218 |
- ptrend=(ptrend==NULL)?ptr+strlen(ptr):ptrend; |
|
219 |
- size=ptrend-ptr; |
|
220 |
- if(k!=0) { |
|
221 |
- /* editing */ |
|
222 |
- memmove(mem+l+size,mem+l,cursize-l); |
|
223 |
- memcpy(mem+l,ptr,size); |
|
224 |
- redata_op_add(redata,l,ptr,size,NULL); |
|
225 |
- } |
|
226 |
- cursize+=size; |
|
227 |
- ptr+=size; |
|
228 |
- ptr+=(*ptr!='\0')?1:0; |
|
229 |
- } else if(*ptr=='D') { |
|
230 |
- /* D<delpos><endchar><text><endchar> */ |
|
231 |
- ptr++; |
|
232 |
- errno=0; |
|
233 |
- l=(int)strtol(ptr,&ptr,10); |
|
234 |
- if(errno!=0) { |
|
235 |
- if(mem!=NULL) |
|
236 |
- free(mem),mem=NULL; |
|
237 |
- return("test_edit(): error parsing position"); |
|
238 |
- } |
|
239 |
- endcode=*ptr; |
|
240 |
- ptr+=(*ptr!='\0')?1:0; |
|
241 |
- ptrend=strchr(ptr,endcode); |
|
242 |
- ptrend=(ptrend==NULL)?ptr+strlen(ptr):ptrend; |
|
243 |
- size=ptrend-ptr; |
|
244 |
- if(l<0 || (l+size)>cursize) { |
|
245 |
- if(mem!=NULL) |
|
246 |
- free(mem),mem=NULL; |
|
247 |
- return("test_edit(): internal error: invalid pasition or size"); |
|
248 |
- } |
|
249 |
- if(k!=0) { |
|
250 |
- if(memcmp(mem+l,ptr,size)!=0 |
|
251 |
- || redata_data_compare(redata,l,ptr,size)!=0) { |
|
252 |
- if(mem!=NULL) |
|
253 |
- free(mem),mem=NULL; |
|
254 |
- return("test_edit(): internal error: deletion data doesn't match"); |
|
255 |
- } |
|
256 |
- /* editing */ |
|
257 |
- memmove(mem+l,mem+l+size,cursize-l-size); |
|
258 |
- redata_op_del(redata,l,size,NULL); |
|
259 |
- } |
|
260 |
- cursize-=size; |
|
261 |
- ptr+=size; |
|
262 |
- ptr+=(*ptr!='\0')?1:0; |
|
263 |
- } else if(*ptr=='M') { |
|
264 |
- /* M<origpos>,<destpos><endchar><text><endchar> */ |
|
265 |
- ptr++; |
|
266 |
- errno=0; |
|
267 |
- l=(int)strtol(ptr,&ptr,10); |
|
268 |
- if(errno!=0) { |
|
269 |
- if(mem!=NULL) |
|
270 |
- free(mem),mem=NULL; |
|
271 |
- return("test_edit(): error parsing position"); |
|
272 |
- } |
|
273 |
- ptr+=(*ptr==',')?1:0; |
|
274 |
- errno=0; |
|
275 |
- o=(int)strtol(ptr,&ptr,10); |
|
276 |
- if(errno!=0) { |
|
277 |
- if(mem!=NULL) |
|
278 |
- free(mem),mem=NULL; |
|
279 |
- return("test_edit(): error parsing position"); |
|
280 |
- } |
|
281 |
- endcode=*ptr; |
|
282 |
- ptr+=(*ptr!='\0')?1:0; |
|
283 |
- ptrend=strchr(ptr,endcode); |
|
284 |
- ptrend=(ptrend==NULL)?ptr+strlen(ptr):ptrend; |
|
285 |
- size=ptrend-ptr; |
|
286 |
- if(l<0 || (l+size)>cursize || o<0 || o>cursize || (o>=l && o<(l+size))) { |
|
287 |
- if(mem!=NULL) |
|
288 |
- free(mem),mem=NULL; |
|
289 |
- return("test_edit(): internal error: invalid pasition or size"); |
|
290 |
- } |
|
291 |
- if(k!=0) { |
|
292 |
- if(memcmp(mem+l,ptr,size)!=0 |
|
293 |
- || redata_data_compare(redata,l,ptr,size)!=0) { |
|
294 |
- if(mem!=NULL) |
|
295 |
- free(mem),mem=NULL; |
|
296 |
- return("test_edit(): internal error: move data doesn't match"); |
|
297 |
- } |
|
298 |
- /* editing */ |
|
299 |
- if(l>o) { |
|
300 |
- memmove(mem+o+size,mem+o,l-o); |
|
301 |
- memcpy(mem+o,ptr,size); |
|
302 |
- } else { |
|
303 |
- memmove(mem+l,mem+l+size,o-l-size); |
|
304 |
- memcpy(mem+o-size,ptr,size); |
|
305 |
- } |
|
306 |
- redata_op_move(redata,l,size,o,NULL); |
|
307 |
- } |
|
308 |
- ptr+=size; |
|
309 |
- ptr+=(*ptr!='\0')?1:0; |
|
310 |
- } else { |
|
311 |
- if(mem!=NULL) |
|
312 |
- free(mem),mem=NULL; |
|
313 |
- snprintf(errorbuf,sizeof(errorbuf), |
|
314 |
- "test_edit(): unknown edit action at pos %i: '%c' (progress: %s)",(int) (ptr-edits),*ptr,progress); |
|
315 |
- errorbuf[sizeof(errorbuf)-1]='\0'; |
|
316 |
- return(errorbuf); |
|
317 |
- } |
|
318 |
- if(cursize>maxsize) |
|
319 |
- maxsize=cursize; |
|
320 |
- if(k!=0) { |
|
321 |
-if(k!=0) redata_save(redata,"test.post"); |
|
322 |
- redata_hash(redata,hash129_redata); |
|
323 |
- redata_memhash(redata,mem,cursize,hash129_mem); |
|
324 |
- if(strcmp(hash129_redata,hash129_mem)!=0) { |
|
325 |
- if(mem!=NULL) |
|
326 |
- free(mem),mem=NULL; |
|
327 |
- snprintf(errorbuf,sizeof(errorbuf), |
|
328 |
- "corrupted edit before pos %i (progress: %s)",(int) (ptr-edits),progress); |
|
329 |
- errorbuf[sizeof(errorbuf)-1]='\0'; |
|
330 |
- return(errorbuf); |
|
331 |
- } |
|
332 |
- redata_op_undo(redata); |
|
333 |
-redata_save(redata,"test.undo"); |
|
334 |
- redata_hash(redata,hash129_redata); |
|
335 |
- if(strcmp(hash129_redata,hash129_memold)!=0) { |
|
336 |
- if(mem!=NULL) |
|
337 |
- free(mem),mem=NULL; |
|
338 |
- snprintf(errorbuf,sizeof(errorbuf), |
|
339 |
- "corrupted undo before pos %i (progress: %s)",(int) (ptr-edits),progress); |
|
340 |
- errorbuf[sizeof(errorbuf)-1]='\0'; |
|
341 |
- return(errorbuf); |
|
342 |
- } |
|
343 |
- redata_op_redo(redata); |
|
344 |
-redata_save(redata,"test.redo"); |
|
345 |
- redata_hash(redata,hash129_redata); |
|
346 |
- if(strcmp(hash129_redata,hash129_mem)!=0) { |
|
347 |
- if(mem!=NULL) |
|
348 |
- free(mem),mem=NULL; |
|
349 |
- snprintf(errorbuf,sizeof(errorbuf), |
|
350 |
- "corrupted redo before pos %i (progress: %s)",(int) (ptr-edits),progress); |
|
351 |
- errorbuf[sizeof(errorbuf)-1]='\0'; |
|
352 |
- return(errorbuf); |
|
353 |
- } |
|
354 |
- } |
|
355 |
- } |
|
356 |
- if(k==0) { |
|
357 |
- /* reserve memory, do init */ |
|
358 |
- if((mem=malloc_data(maxsize,seed))==NULL) |
|
359 |
- return("insuf. mem. for temp. buffer"); |
|
360 |
- if(write_file(filename,mem,filesize)==-1) |
|
361 |
- return("couldn't create temporary file"); |
|
362 |
- if(redata_load(redata,filename,0)!=0) { |
|
363 |
- unlink(filename); |
|
364 |
- return("couldn't load file"); |
|
365 |
- } |
|
366 |
- unlink(filename); |
|
367 |
- } |
|
368 |
- } |
|
369 |
- if(mem!=NULL) |
|
370 |
- free(mem),mem=NULL; |
|
371 |
-unlink("test.pre"),unlink("test.post"),unlink("test.undo"),unlink("test.redo"); |
|
372 |
- return(TEST_OK); |
|
373 |
-} |
|
374 |
- |
... | ... |
@@ -43,26 +43,38 @@ main(int argc, char *argv[]) |
43 | 43 |
static int sizes[]={-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31,32,33,63,64,65,127,128,129,1023,1024,1025,16384}; |
44 | 44 |
test_t tests[]={ |
45 | 45 |
{"newfile_16",test_newfile,PREFIX "FILE", NULL, 16, 0}, |
46 |
-#if 0 /* more newfile tests (VERY slow) */ |
|
47 | 46 |
{"newfile_1024",test_newfile,PREFIX "FILE", NULL, 1024, 0}, |
48 | 47 |
{"newfile_32767",test_newfile,PREFIX "FILE", NULL, 32767, 0}, |
49 | 48 |
{"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, |
50 | 49 |
{"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
51 | 50 |
{"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
52 |
-#endif |
|
53 | 51 |
{"testedit_add",test_edit,PREFIX "EDIT", "A0$Testing add$",0,0}, |
54 | 52 |
{"testedit_del",test_edit,PREFIX "EDIT", "A0$Testing add/del$D8$add/$",0,0}, |
53 |
+ {"testedit_move",test_edit,PREFIX "EDIT", "A0$This is a text to move.$M17,7$ move$",0,0}, |
|
55 | 54 |
}; |
55 |
+ int flag_exit=0,flag_all=0; |
|
56 | 56 |
redata_t *redata; |
57 | 57 |
int i,s; |
58 | 58 |
int nerrors,total; |
59 | 59 |
char *res; |
60 |
+ for(i=1;i<argc;i++) { |
|
61 |
+ if(strcmp(argv[i],"--help")==0) { |
|
62 |
+ fprintf(stderr,"Syntax: %s [--all] [--exit] [--help]\nExplanation:\n\t--all: do even the slow tests\n\t--exit: exit program at first unsuccessful test\n\t--help: this text\n",argv[0]); |
|
63 |
+ return(1); |
|
64 |
+ } else if(strcmp(argv[i],"--all")==0) { |
|
65 |
+ flag_all=1; |
|
66 |
+ } else if(strcmp(argv[i],"--exit")==0) { |
|
67 |
+ flag_exit=1; |
|
68 |
+ } |
|
69 |
+ } |
|
60 | 70 |
nerrors=0; |
61 | 71 |
total=0; |
62 | 72 |
for(s=0;s<(sizeof(sizes)/sizeof(sizes[0]));s++) { |
63 | 73 |
if(sizes[s]!=-1) |
64 | 74 |
fprintf(stderr,"SIZE: %i\n",sizes[s]); |
65 | 75 |
for(i=0;i<(sizeof(tests)/sizeof(tests[0]));i++,total++) { |
76 |
+ if(!flag_all && tests[i].int1>=1024) |
|
77 |
+ continue; /* too slow: skip unless testing --all */ |
|
66 | 78 |
if((redata=redata_init())==NULL) { |
67 | 79 |
fprintf(stderr,"ERROR: problem initializing redata module\n"); |
68 | 80 |
return(1); |
... | ... |
@@ -76,11 +88,11 @@ main(int argc, char *argv[]) |
76 | 88 |
} else { |
77 | 89 |
fprintf(stderr," ERROR: %s\n",res); |
78 | 90 |
nerrors++; |
79 |
-#if 0 |
|
80 |
-/* exit on first error */ |
|
81 |
-s=sizeof(sizes)/sizeof(sizes[0]); |
|
82 |
-break; |
|
83 |
-#endif |
|
91 |
+ if(flag_exit) { |
|
92 |
+ /* exit on first error */ |
|
93 |
+ s=sizeof(sizes)/sizeof(sizes[0]); |
|
94 |
+ break; |
|
95 |
+ } |
|
84 | 96 |
} |
85 | 97 |
redata_free(redata),redata=NULL; |
86 | 98 |
} |
... | ... |
@@ -168,7 +180,7 @@ test_edit(redata_t *redata, char *filename, char *edits, int filesize, int seed) |
168 | 180 |
int k; |
169 | 181 |
int cursize,maxsize; |
170 | 182 |
char *ptr; |
171 |
- int l; |
|
183 |
+ int l,o; |
|
172 | 184 |
char *mem; |
173 | 185 |
char endcode; |
174 | 186 |
char *ptrend; |
... | ... |
@@ -248,6 +260,53 @@ if(k!=0) redata_save(redata,"test.pre"); |
248 | 260 |
cursize-=size; |
249 | 261 |
ptr+=size; |
250 | 262 |
ptr+=(*ptr!='\0')?1:0; |
263 |
+ } else if(*ptr=='M') { |
|
264 |
+ /* M<origpos>,<destpos><endchar><text><endchar> */ |
|
265 |
+ ptr++; |
|
266 |
+ errno=0; |
|
267 |
+ l=(int)strtol(ptr,&ptr,10); |
|
268 |
+ if(errno!=0) { |
|
269 |
+ if(mem!=NULL) |
|
270 |
+ free(mem),mem=NULL; |
|
271 |
+ return("test_edit(): error parsing position"); |
|
272 |
+ } |
|
273 |
+ ptr+=(*ptr==',')?1:0; |
|
274 |
+ errno=0; |
|
275 |
+ o=(int)strtol(ptr,&ptr,10); |
|
276 |
+ if(errno!=0) { |
|
277 |
+ if(mem!=NULL) |
|
278 |
+ free(mem),mem=NULL; |
|
279 |
+ return("test_edit(): error parsing position"); |
|
280 |
+ } |
|
281 |
+ endcode=*ptr; |
|
282 |
+ ptr+=(*ptr!='\0')?1:0; |
|
283 |
+ ptrend=strchr(ptr,endcode); |
|
284 |
+ ptrend=(ptrend==NULL)?ptr+strlen(ptr):ptrend; |
|
285 |
+ size=ptrend-ptr; |
|
286 |
+ if(l<0 || (l+size)>cursize || o<0 || o>cursize || (o>=l && o<(l+size))) { |
|
287 |
+ if(mem!=NULL) |
|
288 |
+ free(mem),mem=NULL; |
|
289 |
+ return("test_edit(): internal error: invalid pasition or size"); |
|
290 |
+ } |
|
291 |
+ if(k!=0) { |
|
292 |
+ if(memcmp(mem+l,ptr,size)!=0 |
|
293 |
+ || redata_data_compare(redata,l,ptr,size)!=0) { |
|
294 |
+ if(mem!=NULL) |
|
295 |
+ free(mem),mem=NULL; |
|
296 |
+ return("test_edit(): internal error: move data doesn't match"); |
|
297 |
+ } |
|
298 |
+ /* editing */ |
|
299 |
+ if(l>o) { |
|
300 |
+ memmove(mem+o+size,mem+o,l-o); |
|
301 |
+ memcpy(mem+o,ptr,size); |
|
302 |
+ } else { |
|
303 |
+ memmove(mem+l,mem+l+size,o-l-size); |
|
304 |
+ memcpy(mem+o-size,ptr,size); |
|
305 |
+ } |
|
306 |
+ redata_op_move(redata,l,size,o,NULL); |
|
307 |
+ } |
|
308 |
+ ptr+=size; |
|
309 |
+ ptr+=(*ptr!='\0')?1:0; |
|
251 | 310 |
} else { |
252 | 311 |
if(mem!=NULL) |
253 | 312 |
free(mem),mem=NULL; |
... | ... |
@@ -43,11 +43,13 @@ main(int argc, char *argv[]) |
43 | 43 |
static int sizes[]={-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31,32,33,63,64,65,127,128,129,1023,1024,1025,16384}; |
44 | 44 |
test_t tests[]={ |
45 | 45 |
{"newfile_16",test_newfile,PREFIX "FILE", NULL, 16, 0}, |
46 |
-/* {"newfile_1024",test_newfile,PREFIX "FILE", NULL, 1024, 0}, |
|
46 |
+#if 0 /* more newfile tests (VERY slow) */ |
|
47 |
+ {"newfile_1024",test_newfile,PREFIX "FILE", NULL, 1024, 0}, |
|
47 | 48 |
{"newfile_32767",test_newfile,PREFIX "FILE", NULL, 32767, 0}, |
48 | 49 |
{"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, |
49 | 50 |
{"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
50 |
- {"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0},*/ |
|
51 |
+ {"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
|
52 |
+#endif |
|
51 | 53 |
{"testedit_add",test_edit,PREFIX "EDIT", "A0$Testing add$",0,0}, |
52 | 54 |
{"testedit_del",test_edit,PREFIX "EDIT", "A0$Testing add/del$D8$add/$",0,0}, |
53 | 55 |
}; |
... | ... |
@@ -74,15 +76,20 @@ main(int argc, char *argv[]) |
74 | 76 |
} else { |
75 | 77 |
fprintf(stderr," ERROR: %s\n",res); |
76 | 78 |
nerrors++; |
77 |
- } |
|
79 |
+#if 0 |
|
80 |
+/* exit on first error */ |
|
81 |
+s=sizeof(sizes)/sizeof(sizes[0]); |
|
82 |
+break; |
|
83 |
+#endif |
|
84 |
+ } |
|
78 | 85 |
redata_free(redata),redata=NULL; |
79 | 86 |
} |
80 | 87 |
fprintf(stderr,"\n"); |
81 | 88 |
} |
82 | 89 |
if(nerrors==0) |
83 |
- fprintf(stderr,"All tests passed OK\n"); |
|
90 |
+ fprintf(stderr,"All %i tests passed OK\n",total); |
|
84 | 91 |
else |
85 |
- fprintf(stderr,"%i test(s) failed of %i tests run.\n",nerrors,i); |
|
92 |
+ fprintf(stderr,"%i test(s) failed of %i tests run.\n",nerrors,total); |
|
86 | 93 |
redata_free(redata),redata=NULL; |
87 | 94 |
return((nerrors==0)?0:1); |
88 | 95 |
} |
... | ... |
@@ -181,7 +188,8 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
181 | 188 |
progress[l]=(l<(sizeof(progress)-2))?*ptr:'+'; |
182 | 189 |
progress[l+1]='\0'; |
183 | 190 |
} |
184 |
-/*if(k!=0) redata_save(redata,"test.pre");*/ |
|
191 |
+if(k!=0) unlink("test.pre"),unlink("test.post"),unlink("test.undo"),unlink("test.redo"); |
|
192 |
+if(k!=0) redata_save(redata,"test.pre"); |
|
185 | 193 |
if(*ptr=='A') { |
186 | 194 |
/* A<insertpos><endchar><text><endchar> */ |
187 | 195 |
ptr++; |
... | ... |
@@ -251,7 +259,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
251 | 259 |
if(cursize>maxsize) |
252 | 260 |
maxsize=cursize; |
253 | 261 |
if(k!=0) { |
254 |
-/*if(k!=0) redata_save(redata,"test.post");*/ |
|
262 |
+if(k!=0) redata_save(redata,"test.post"); |
|
255 | 263 |
redata_hash(redata,hash129_redata); |
256 | 264 |
redata_memhash(redata,mem,cursize,hash129_mem); |
257 | 265 |
if(strcmp(hash129_redata,hash129_mem)!=0) { |
... | ... |
@@ -263,7 +271,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
263 | 271 |
return(errorbuf); |
264 | 272 |
} |
265 | 273 |
redata_op_undo(redata); |
266 |
-/*redata_save(redata,"test.undo");*/ |
|
274 |
+redata_save(redata,"test.undo"); |
|
267 | 275 |
redata_hash(redata,hash129_redata); |
268 | 276 |
if(strcmp(hash129_redata,hash129_memold)!=0) { |
269 | 277 |
if(mem!=NULL) |
... | ... |
@@ -274,7 +282,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
274 | 282 |
return(errorbuf); |
275 | 283 |
} |
276 | 284 |
redata_op_redo(redata); |
277 |
-/*redata_save(redata,"test.redo");*/ |
|
285 |
+redata_save(redata,"test.redo"); |
|
278 | 286 |
redata_hash(redata,hash129_redata); |
279 | 287 |
if(strcmp(hash129_redata,hash129_mem)!=0) { |
280 | 288 |
if(mem!=NULL) |
... | ... |
@@ -301,6 +309,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
301 | 309 |
} |
302 | 310 |
if(mem!=NULL) |
303 | 311 |
free(mem),mem=NULL; |
312 |
+unlink("test.pre"),unlink("test.post"),unlink("test.undo"),unlink("test.redo"); |
|
304 | 313 |
return(TEST_OK); |
305 | 314 |
} |
306 | 315 |
|
... | ... |
@@ -40,36 +40,45 @@ char *test_edit(redata_t *redata, char *filename, char *edits, int filesize, int |
40 | 40 |
int |
41 | 41 |
main(int argc, char *argv[]) |
42 | 42 |
{ |
43 |
+ static int sizes[]={-1,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,30,31,32,33,63,64,65,127,128,129,1023,1024,1025,16384}; |
|
43 | 44 |
test_t tests[]={ |
44 | 45 |
{"newfile_16",test_newfile,PREFIX "FILE", NULL, 16, 0}, |
45 |
- {"newfile_1024",test_newfile,PREFIX "FILE", NULL, 1024, 0}, |
|
46 |
+/* {"newfile_1024",test_newfile,PREFIX "FILE", NULL, 1024, 0}, |
|
46 | 47 |
{"newfile_32767",test_newfile,PREFIX "FILE", NULL, 32767, 0}, |
47 | 48 |
{"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, |
48 | 49 |
{"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
49 |
- {"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
|
50 |
+ {"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0},*/ |
|
50 | 51 |
{"testedit_add",test_edit,PREFIX "EDIT", "A0$Testing add$",0,0}, |
51 | 52 |
{"testedit_del",test_edit,PREFIX "EDIT", "A0$Testing add/del$D8$add/$",0,0}, |
52 | 53 |
}; |
53 | 54 |
redata_t *redata; |
54 |
- int i; |
|
55 |
- int nerrors; |
|
55 |
+ int i,s; |
|
56 |
+ int nerrors,total; |
|
56 | 57 |
char *res; |
57 |
- for(i=0,nerrors=0;i<(sizeof(tests)/sizeof(tests[0]));i++) { |
|
58 |
- if((redata=redata_init())==NULL) { |
|
59 |
- fprintf(stderr,"ERROR: problem initializing redata module\n"); |
|
60 |
- return(1); |
|
61 |
- } |
|
62 |
- fprintf(stderr,"%s...",tests[i].name); |
|
63 |
- res=tests[i].fn(redata,tests[i].param1,tests[i].param2,tests[i].int1,tests[i].int2); |
|
64 |
- if(strcmp(res,TEST_OK)==0) { |
|
65 |
- fprintf(stderr," ok.\n"); |
|
66 |
- } else { |
|
67 |
- fprintf(stderr," ERROR: %s\n",res); |
|
68 |
- nerrors++; |
|
58 |
+ nerrors=0; |
|
59 |
+ total=0; |
|
60 |
+ for(s=0;s<(sizeof(sizes)/sizeof(sizes[0]));s++) { |
|
61 |
+ if(sizes[s]!=-1) |
|
62 |
+ fprintf(stderr,"SIZE: %i\n",sizes[s]); |
|
63 |
+ for(i=0;i<(sizeof(tests)/sizeof(tests[0]));i++,total++) { |
|
64 |
+ if((redata=redata_init())==NULL) { |
|
65 |
+ fprintf(stderr,"ERROR: problem initializing redata module\n"); |
|
66 |
+ return(1); |
|
67 |
+ } |
|
68 |
+ if(sizes[s]!=-1) |
|
69 |
+ redata_config_chunkdatasize(redata,sizes[s]); |
|
70 |
+ fprintf(stderr,"%s...",tests[i].name); |
|
71 |
+ res=tests[i].fn(redata,tests[i].param1,tests[i].param2,tests[i].int1,tests[i].int2); |
|
72 |
+ if(strcmp(res,TEST_OK)==0) { |
|
73 |
+ fprintf(stderr," ok.\n"); |
|
74 |
+ } else { |
|
75 |
+ fprintf(stderr," ERROR: %s\n",res); |
|
76 |
+ nerrors++; |
|
77 |
+ } |
|
78 |
+ redata_free(redata),redata=NULL; |
|
69 | 79 |
} |
70 |
- redata_free(redata),redata=NULL; |
|
80 |
+ fprintf(stderr,"\n"); |
|
71 | 81 |
} |
72 |
- fprintf(stderr,"\n"); |
|
73 | 82 |
if(nerrors==0) |
74 | 83 |
fprintf(stderr,"All tests passed OK\n"); |
75 | 84 |
else |
... | ... |
@@ -48,6 +48,7 @@ main(int argc, char *argv[]) |
48 | 48 |
{"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
49 | 49 |
{"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
50 | 50 |
{"testedit_add",test_edit,PREFIX "EDIT", "A0$Testing add$",0,0}, |
51 |
+ {"testedit_del",test_edit,PREFIX "EDIT", "A0$Testing add/del$D8$add/$",0,0}, |
|
51 | 52 |
}; |
52 | 53 |
redata_t *redata; |
53 | 54 |
int i; |
... | ... |
@@ -149,7 +150,7 @@ test_edit(redata_t *redata, char *filename, char *edits, int filesize, int seed) |
149 | 150 |
static char errorbuf[256]; |
150 | 151 |
char progress[256]; |
151 | 152 |
int k; |
152 |
- int cursize; |
|
153 |
+ int cursize,maxsize; |
|
153 | 154 |
char *ptr; |
154 | 155 |
int l; |
155 | 156 |
char *mem; |
... | ... |
@@ -162,7 +163,7 @@ test_edit(redata_t *redata, char *filename, char *edits, int filesize, int seed) |
162 | 163 |
mem=NULL; |
163 | 164 |
fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\"":"",(filename!=NULL)?filename:"NULL",(filename!=NULL)?"\"":"",(edits!=NULL)?"\"":"",(edits!=NULL)?edits:"NULL",(edits!=NULL)?"\"":"",filesize,seed); |
164 | 165 |
/* two passes: k==0 count needed memory, k==1 do edits */ |
165 |
- for(k=0,cursize=filesize,progress[0]='\0';k<2;k++,cursize=0,progress[0]='\0') { |
|
166 |
+ for(k=0,maxsize=cursize=filesize,progress[0]='\0';k<2;k++,cursize=0,progress[0]='\0') { |
|
166 | 167 |
for(ptr=edits;*ptr!='\0';) { |
167 | 168 |
if(k!=0) { |
168 | 169 |
redata_memhash(redata,mem,cursize,hash129_memold); |
... | ... |
@@ -196,6 +197,40 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
196 | 197 |
cursize+=size; |
197 | 198 |
ptr+=size; |
198 | 199 |
ptr+=(*ptr!='\0')?1:0; |
200 |
+ } else if(*ptr=='D') { |
|
201 |
+ /* D<delpos><endchar><text><endchar> */ |
|
202 |
+ ptr++; |
|
203 |
+ errno=0; |
|
204 |
+ l=(int)strtol(ptr,&ptr,10); |
|
205 |
+ if(errno!=0) { |
|
206 |
+ if(mem!=NULL) |
|
207 |
+ free(mem),mem=NULL; |
|
208 |
+ return("test_edit(): error parsing position"); |
|
209 |
+ } |
|
210 |
+ endcode=*ptr; |
|
211 |
+ ptr+=(*ptr!='\0')?1:0; |
|
212 |
+ ptrend=strchr(ptr,endcode); |
|
213 |
+ ptrend=(ptrend==NULL)?ptr+strlen(ptr):ptrend; |
|
214 |
+ size=ptrend-ptr; |
|
215 |
+ if(l<0 || (l+size)>cursize) { |
|
216 |
+ if(mem!=NULL) |
|
217 |
+ free(mem),mem=NULL; |
|
218 |
+ return("test_edit(): internal error: invalid pasition or size"); |
|
219 |
+ } |
|
220 |
+ if(k!=0) { |
|
221 |
+ if(memcmp(mem+l,ptr,size)!=0 |
|
222 |
+ || redata_data_compare(redata,l,ptr,size)!=0) { |
|
223 |
+ if(mem!=NULL) |
|
224 |
+ free(mem),mem=NULL; |
|
225 |
+ return("test_edit(): internal error: deletion data doesn't match"); |
|
226 |
+ } |
|
227 |
+ /* editing */ |
|
228 |
+ memmove(mem+l,mem+l+size,cursize-l-size); |
|
229 |
+ redata_op_del(redata,l,size,NULL); |
|
230 |
+ } |
|
231 |
+ cursize-=size; |
|
232 |
+ ptr+=size; |
|
233 |
+ ptr+=(*ptr!='\0')?1:0; |
|
199 | 234 |
} else { |
200 | 235 |
if(mem!=NULL) |
201 | 236 |
free(mem),mem=NULL; |
... | ... |
@@ -204,6 +239,8 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
204 | 239 |
errorbuf[sizeof(errorbuf)-1]='\0'; |
205 | 240 |
return(errorbuf); |
206 | 241 |
} |
242 |
+ if(cursize>maxsize) |
|
243 |
+ maxsize=cursize; |
|
207 | 244 |
if(k!=0) { |
208 | 245 |
/*if(k!=0) redata_save(redata,"test.post");*/ |
209 | 246 |
redata_hash(redata,hash129_redata); |
... | ... |
@@ -242,7 +279,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
242 | 279 |
} |
243 | 280 |
if(k==0) { |
244 | 281 |
/* reserve memory, do init */ |
245 |
- if((mem=malloc_data(cursize,seed))==NULL) |
|
282 |
+ if((mem=malloc_data(maxsize,seed))==NULL) |
|
246 | 283 |
return("insuf. mem. for temp. buffer"); |
247 | 284 |
if(write_file(filename,mem,filesize)==-1) |
248 | 285 |
return("couldn't create temporary file"); |
... | ... |
@@ -171,7 +171,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
171 | 171 |
progress[l]=(l<(sizeof(progress)-2))?*ptr:'+'; |
172 | 172 |
progress[l+1]='\0'; |
173 | 173 |
} |
174 |
-if(k!=0) redata_save(redata,"test.pre"); |
|
174 |
+/*if(k!=0) redata_save(redata,"test.pre");*/ |
|
175 | 175 |
if(*ptr=='A') { |
176 | 176 |
/* A<insertpos><endchar><text><endchar> */ |
177 | 177 |
ptr++; |
... | ... |
@@ -205,7 +205,7 @@ if(k!=0) redata_save(redata,"test.pre"); |
205 | 205 |
return(errorbuf); |
206 | 206 |
} |
207 | 207 |
if(k!=0) { |
208 |
-if(k!=0) redata_save(redata,"test.post"); |
|
208 |
+/*if(k!=0) redata_save(redata,"test.post");*/ |
|
209 | 209 |
redata_hash(redata,hash129_redata); |
210 | 210 |
redata_memhash(redata,mem,cursize,hash129_mem); |
211 | 211 |
if(strcmp(hash129_redata,hash129_mem)!=0) { |
... | ... |
@@ -217,7 +217,7 @@ if(k!=0) redata_save(redata,"test.post"); |
217 | 217 |
return(errorbuf); |
218 | 218 |
} |
219 | 219 |
redata_op_undo(redata); |
220 |
-redata_save(redata,"test.undo"); |
|
220 |
+/*redata_save(redata,"test.undo");*/ |
|
221 | 221 |
redata_hash(redata,hash129_redata); |
222 | 222 |
if(strcmp(hash129_redata,hash129_memold)!=0) { |
223 | 223 |
if(mem!=NULL) |
... | ... |
@@ -228,7 +228,7 @@ redata_save(redata,"test.undo"); |
228 | 228 |
return(errorbuf); |
229 | 229 |
} |
230 | 230 |
redata_op_redo(redata); |
231 |
-redata_save(redata,"test.redo"); |
|
231 |
+/*redata_save(redata,"test.redo");*/ |
|
232 | 232 |
redata_hash(redata,hash129_redata); |
233 | 233 |
if(strcmp(hash129_redata,hash129_mem)!=0) { |
234 | 234 |
if(mem!=NULL) |
... | ... |
@@ -47,7 +47,7 @@ main(int argc, char *argv[]) |
47 | 47 |
{"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, |
48 | 48 |
{"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
49 | 49 |
{"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
50 |
- {"testedit_add",test_edit,PREFIX "EDIT", "A,0,$Testing add$",0,0}, |
|
50 |
+ {"testedit_add",test_edit,PREFIX "EDIT", "A0$Testing add$",0,0}, |
|
51 | 51 |
}; |
52 | 52 |
redata_t *redata; |
53 | 53 |
int i; |
... | ... |
@@ -173,9 +173,8 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
173 | 173 |
} |
174 | 174 |
if(k!=0) redata_save(redata,"test.pre"); |
175 | 175 |
if(*ptr=='A') { |
176 |
- /* A,<insertpos>,<endchar>,<text><endchar> */ |
|
176 |
+ /* A<insertpos><endchar><text><endchar> */ |
|
177 | 177 |
ptr++; |
178 |
- ptr+=(*ptr==',')?1:0; |
|
179 | 178 |
errno=0; |
180 | 179 |
l=(int)strtol(ptr,&ptr,10); |
181 | 180 |
if(errno!=0 || l<0 || l>cursize) { |
... | ... |
@@ -183,7 +182,6 @@ if(k!=0) redata_save(redata,"test.pre"); |
183 | 182 |
free(mem),mem=NULL; |
184 | 183 |
return("test_edit(): error parsing position"); |
185 | 184 |
} |
186 |
- ptr+=(*ptr==',')?1:0; |
|
187 | 185 |
endcode=*ptr; |
188 | 186 |
ptr+=(*ptr!='\0')?1:0; |
189 | 187 |
ptrend=strchr(ptr,endcode); |
... | ... |
@@ -47,7 +47,7 @@ main(int argc, char *argv[]) |
47 | 47 |
{"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, |
48 | 48 |
{"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
49 | 49 |
{"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
50 |
- {"testedit_add",test_edit,PREFIX "EDIT", "A,0,$,Testing add$",0,0}, |
|
50 |
+ {"testedit_add",test_edit,PREFIX "EDIT", "A,0,$Testing add$",0,0}, |
|
51 | 51 |
}; |
52 | 52 |
redata_t *redata; |
53 | 53 |
int i; |
... | ... |
@@ -186,7 +186,6 @@ if(k!=0) redata_save(redata,"test.pre"); |
186 | 186 |
ptr+=(*ptr==',')?1:0; |
187 | 187 |
endcode=*ptr; |
188 | 188 |
ptr+=(*ptr!='\0')?1:0; |
189 |
- ptr+=(*ptr==',')?1:0; |
|
190 | 189 |
ptrend=strchr(ptr,endcode); |
191 | 190 |
ptrend=(ptrend==NULL)?ptr+strlen(ptr):ptrend; |
192 | 191 |
size=ptrend-ptr; |
... | ... |
@@ -171,6 +171,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
171 | 171 |
progress[l]=(l<(sizeof(progress)-2))?*ptr:'+'; |
172 | 172 |
progress[l+1]='\0'; |
173 | 173 |
} |
174 |
+if(k!=0) redata_save(redata,"test.pre"); |
|
174 | 175 |
if(*ptr=='A') { |
175 | 176 |
/* A,<insertpos>,<endchar>,<text><endchar> */ |
176 | 177 |
ptr++; |
... | ... |
@@ -185,6 +186,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
185 | 186 |
ptr+=(*ptr==',')?1:0; |
186 | 187 |
endcode=*ptr; |
187 | 188 |
ptr+=(*ptr!='\0')?1:0; |
189 |
+ ptr+=(*ptr==',')?1:0; |
|
188 | 190 |
ptrend=strchr(ptr,endcode); |
189 | 191 |
ptrend=(ptrend==NULL)?ptr+strlen(ptr):ptrend; |
190 | 192 |
size=ptrend-ptr; |
... | ... |
@@ -206,6 +208,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
206 | 208 |
return(errorbuf); |
207 | 209 |
} |
208 | 210 |
if(k!=0) { |
211 |
+if(k!=0) redata_save(redata,"test.post"); |
|
209 | 212 |
redata_hash(redata,hash129_redata); |
210 | 213 |
redata_memhash(redata,mem,cursize,hash129_mem); |
211 | 214 |
if(strcmp(hash129_redata,hash129_mem)!=0) { |
... | ... |
@@ -217,6 +220,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
217 | 220 |
return(errorbuf); |
218 | 221 |
} |
219 | 222 |
redata_op_undo(redata); |
223 |
+redata_save(redata,"test.undo"); |
|
220 | 224 |
redata_hash(redata,hash129_redata); |
221 | 225 |
if(strcmp(hash129_redata,hash129_memold)!=0) { |
222 | 226 |
if(mem!=NULL) |
... | ... |
@@ -227,6 +231,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
227 | 231 |
return(errorbuf); |
228 | 232 |
} |
229 | 233 |
redata_op_redo(redata); |
234 |
+redata_save(redata,"test.redo"); |
|
230 | 235 |
redata_hash(redata,hash129_redata); |
231 | 236 |
if(strcmp(hash129_redata,hash129_mem)!=0) { |
232 | 237 |
if(mem!=NULL) |
... | ... |
@@ -192,7 +192,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
192 | 192 |
/* editing */ |
193 | 193 |
memmove(mem+l+size,mem+l,cursize-l); |
194 | 194 |
memcpy(mem+l,ptr,size); |
195 |
- redata_op_add(redata,ptr,size,l); |
|
195 |
+ redata_op_add(redata,l,ptr,size,NULL); |
|
196 | 196 |
} |
197 | 197 |
cursize+=size; |
198 | 198 |
ptr+=size; |
... | ... |
@@ -190,7 +190,7 @@ fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\ |
190 | 190 |
size=ptrend-ptr; |
191 | 191 |
if(k!=0) { |
192 | 192 |
/* editing */ |
193 |
- memmove(mem+l+size,mem+l,size); |
|
193 |
+ memmove(mem+l+size,mem+l,cursize-l); |
|
194 | 194 |
memcpy(mem+l,ptr,size); |
195 | 195 |
redata_op_add(redata,ptr,size,l); |
196 | 196 |
} |
... | ... |
@@ -15,6 +15,7 @@ |
15 | 15 |
#include <string.h> |
16 | 16 |
#include <limits.h> |
17 | 17 |
#include <fcntl.h> |
18 |
+#include <errno.h> |
|
18 | 19 |
|
19 | 20 |
#include "recenteditor_data.h" |
20 | 21 |
|
... | ... |
@@ -30,7 +31,11 @@ typedef struct test_t { |
30 | 31 |
int int2; |
31 | 32 |
} test_t; |
32 | 33 |
|
34 |
+static char *malloc_data(int size, int seed); |
|
35 |
+static int write_file(char *filename, char *buf, int buflen); |
|
36 |
+ |
|
33 | 37 |
char *test_newfile(redata_t *redata, char *filename, char *dummy, int filesize, int dummy2); |
38 |
+char *test_edit(redata_t *redata, char *filename, char *edits, int filesize, int seed); |
|
34 | 39 |
|
35 | 40 |
int |
36 | 41 |
main(int argc, char *argv[]) |
... | ... |
@@ -42,7 +47,7 @@ main(int argc, char *argv[]) |
42 | 47 |
{"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, |
43 | 48 |
{"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
44 | 49 |
{"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
45 |
- |
|
50 |
+ {"testedit_add",test_edit,PREFIX "EDIT", "A,0,$,Testing add$",0,0}, |
|
46 | 51 |
}; |
47 | 52 |
redata_t *redata; |
48 | 53 |
int i; |
... | ... |
@@ -67,31 +72,56 @@ main(int argc, char *argv[]) |
67 | 72 |
if(nerrors==0) |
68 | 73 |
fprintf(stderr,"All tests passed OK\n"); |
69 | 74 |
else |
70 |
- fprintf(stderr,"%i tests failed of %i total tests.\n",nerrors,i); |
|
75 |
+ fprintf(stderr,"%i test(s) failed of %i tests run.\n",nerrors,i); |
|
71 | 76 |
redata_free(redata),redata=NULL; |
72 | 77 |
return((nerrors==0)?0:1); |
73 | 78 |
} |
74 | 79 |
|
80 |
+static char * |
|
81 |
+malloc_data(int size, int seed) |
|
82 |
+{ |
|
83 |
+ char *mem; |
|
84 |
+ int i; |
|
85 |
+ if(size<=0 || (mem=malloc(size))==NULL) |
|
86 |
+ return(NULL); |
|
87 |
+ memset(mem,0,size); |
|
88 |
+ if(seed==0) { |
|
89 |
+ for(i=0;i<size;i++) |
|
90 |
+ ((unsigned char *)mem)[i]=(i%256); |
|
91 |
+ } else { |
|
92 |
+ srandom(*((unsigned int *)(&seed))); |
|
93 |
+ for(i=0;i<size;i++) |
|
94 |
+ ((unsigned char *)mem)[i]=(random()&0xff); |
|
95 |
+ } |
|
96 |
+ return(mem); |
|
97 |
+ |
|
98 |
+} |
|
99 |
+ |
|
100 |
+static int |
|
101 |
+write_file(char *filename, char *buf, int buflen) |
|
102 |
+{ |
|
103 |
+ int fd; |
|
104 |
+ if((fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644))==-1) { |
|
105 |
+ free(buf),buf=NULL; |
|
106 |
+ return(-1); |
|
107 |
+ } |
|
108 |
+ write(fd,buf,buflen); |
|
109 |
+ close(fd),fd=-1; |
|
110 |
+ return(0); |
|
111 |
+} |
|
112 |
+ |
|
75 | 113 |
char * |
76 | 114 |
test_newfile(redata_t *redata, char *filename, char *dummy, int filesize, int dummy2) |
77 | 115 |
{ |
78 | 116 |
char *mem; |
79 | 117 |
char hash129_pre[129]; |
80 | 118 |
char hash129_post[129]; |
81 |
- int fd,i; |
|
82 |
-fprintf(stderr,"\ntest_newfile(%s%s%s,%s,%i,%i);\nResult: ",(filename!=NULL)?"\"":"",(filename!=NULL)?filename:"NULL",(filename!=NULL)?"\"":"",(dummy!=NULL)?dummy:"NULL",filesize,dummy2); |
|
119 |
+fprintf(stderr,"\ntest_newfile(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\"":"",(filename!=NULL)?filename:"NULL",(filename!=NULL)?"\"":"",(dummy!=NULL)?"\"":"",(dummy!=NULL)?dummy:"NULL",(dummy!=NULL)?"\"":"",filesize,dummy2); |
|
83 | 120 |
/* prepare file for loading */ |
84 |
- if((mem=malloc(filesize))==NULL) |
|
121 |
+ if((mem=malloc_data(filesize,0))==NULL) |
|
85 | 122 |
return("insuf. mem. for temp. buffer"); |
86 |
- memset(mem,0,filesize); |
|
87 |
- for(i=0;i<filesize;i++) |
|
88 |
- ((unsigned char *)mem)[i]=(filesize%256); |
|
89 |
- if((fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644))==-1) { |
|
90 |
- free(mem),mem=NULL; |
|
123 |
+ if(write_file(filename,mem,filesize)==-1) |
|
91 | 124 |
return("couldn't create temporary file"); |
92 |
- } |
|
93 |
- write(fd,mem,filesize); |
|
94 |
- close(fd),fd=-1; |
|
95 | 125 |
redata_filehash(redata,filename,hash129_pre); |
96 | 126 |
free(mem),mem=NULL; |
97 | 127 |
/* load file */ |
... | ... |
@@ -113,3 +143,116 @@ fprintf(stderr,"\ntest_newfile(%s%s%s,%s,%i,%i);\nResult: ",(filename!=NULL)?"\" |
113 | 143 |
return(TEST_OK); |
114 | 144 |
} |
115 | 145 |
|
146 |
+char * |
|
147 |
+test_edit(redata_t *redata, char *filename, char *edits, int filesize, int seed) |
|
148 |
+{ |
|
149 |
+ static char errorbuf[256]; |
|
150 |
+ char progress[256]; |
|
151 |
+ int k; |
|
152 |
+ int cursize; |
|
153 |
+ char *ptr; |
|
154 |
+ int l; |
|
155 |
+ char *mem; |
|
156 |
+ char endcode; |
|
157 |
+ char *ptrend; |
|
158 |
+ int size; |
|
159 |
+ char hash129_memold[129]; |
|
160 |
+ char hash129_mem[129]; |
|
161 |
+ char hash129_redata[129]; |
|
162 |
+ mem=NULL; |
|
163 |
+fprintf(stderr,"\ntest_edit(%s%s%s,%s%s%s,%i,%i);\nResult: ",(filename!=NULL)?"\"":"",(filename!=NULL)?filename:"NULL",(filename!=NULL)?"\"":"",(edits!=NULL)?"\"":"",(edits!=NULL)?edits:"NULL",(edits!=NULL)?"\"":"",filesize,seed); |
|
164 |
+ /* two passes: k==0 count needed memory, k==1 do edits */ |
|
165 |
+ for(k=0,cursize=filesize,progress[0]='\0';k<2;k++,cursize=0,progress[0]='\0') { |
|
166 |
+ for(ptr=edits;*ptr!='\0';) { |
|
167 |
+ if(k!=0) { |
|
168 |
+ redata_memhash(redata,mem,cursize,hash129_memold); |
|
169 |
+ } |
|
170 |
+ if((l=strlen(progress))<(sizeof(progress)-1)) { |
|
171 |
+ progress[l]=(l<(sizeof(progress)-2))?*ptr:'+'; |
|
172 |
+ progress[l+1]='\0'; |
|
173 |
+ } |
|
174 |
+ if(*ptr=='A') { |
|
175 |
+ /* A,<insertpos>,<endchar>,<text><endchar> */ |
|
176 |
+ ptr++; |
|
177 |
+ ptr+=(*ptr==',')?1:0; |
|
178 |
+ errno=0; |
|
179 |
+ l=(int)strtol(ptr,&ptr,10); |
|
180 |
+ if(errno!=0 || l<0 || l>cursize) { |
|
181 |
+ if(mem!=NULL) |
|
182 |
+ free(mem),mem=NULL; |
|
183 |
+ return("test_edit(): error parsing position"); |
|
184 |
+ } |
|
185 |
+ ptr+=(*ptr==',')?1:0; |
|
186 |
+ endcode=*ptr; |
|
187 |
+ ptr+=(*ptr!='\0')?1:0; |
|
188 |
+ ptrend=strchr(ptr,endcode); |
|
189 |
+ ptrend=(ptrend==NULL)?ptr+strlen(ptr):ptrend; |
|
190 |
+ size=ptrend-ptr; |
|
191 |
+ if(k!=0) { |
|
192 |
+ /* editing */ |
|
193 |
+ memmove(mem+l+size,mem+l,size); |
|
194 |
+ memcpy(mem+l,ptr,size); |
|
195 |
+ redata_op_add(redata,ptr,size,l); |
|
196 |
+ } |
|
197 |
+ cursize+=size; |
|
198 |
+ ptr+=size; |
|
199 |
+ ptr+=(*ptr!='\0')?1:0; |
|
200 |
+ } else { |
|
201 |
+ if(mem!=NULL) |
|
202 |
+ free(mem),mem=NULL; |
|
203 |
+ snprintf(errorbuf,sizeof(errorbuf), |
|
204 |
+ "test_edit(): unknown edit action at pos %i: '%c' (progress: %s)",(int) (ptr-edits),*ptr,progress); |
|
205 |
+ errorbuf[sizeof(errorbuf)-1]='\0'; |
|
206 |
+ return(errorbuf); |
|
207 |
+ } |
|
208 |
+ if(k!=0) { |
|
209 |
+ redata_hash(redata,hash129_redata); |
|
210 |
+ redata_memhash(redata,mem,cursize,hash129_mem); |
|
211 |
+ if(strcmp(hash129_redata,hash129_mem)!=0) { |
|
212 |
+ if(mem!=NULL) |
|
213 |
+ free(mem),mem=NULL; |
|
214 |
+ snprintf(errorbuf,sizeof(errorbuf), |
|
215 |
+ "corrupted edit before pos %i (progress: %s)",(int) (ptr-edits),progress); |
|
216 |
+ errorbuf[sizeof(errorbuf)-1]='\0'; |
|
217 |
+ return(errorbuf); |
|
218 |
+ } |
|
219 |
+ redata_op_undo(redata); |
|
220 |
+ redata_hash(redata,hash129_redata); |
|
221 |
+ if(strcmp(hash129_redata,hash129_memold)!=0) { |
|
222 |
+ if(mem!=NULL) |
|
223 |
+ free(mem),mem=NULL; |
|
224 |
+ snprintf(errorbuf,sizeof(errorbuf), |
|
225 |
+ "corrupted undo before pos %i (progress: %s)",(int) (ptr-edits),progress); |
|
226 |
+ errorbuf[sizeof(errorbuf)-1]='\0'; |
|
227 |
+ return(errorbuf); |
|
228 |
+ } |
|
229 |
+ redata_op_redo(redata); |
|
230 |
+ redata_hash(redata,hash129_redata); |
|
231 |
+ if(strcmp(hash129_redata,hash129_mem)!=0) { |
|
232 |
+ if(mem!=NULL) |
|
233 |
+ free(mem),mem=NULL; |
|
234 |
+ snprintf(errorbuf,sizeof(errorbuf), |
|
235 |
+ "corrupted redo before pos %i (progress: %s)",(int) (ptr-edits),progress); |
|
236 |
+ errorbuf[sizeof(errorbuf)-1]='\0'; |
|
237 |
+ return(errorbuf); |
|
238 |
+ } |
|
239 |
+ } |
|
240 |
+ } |
|
241 |
+ if(k==0) { |
|
242 |
+ /* reserve memory, do init */ |
|
243 |
+ if((mem=malloc_data(cursize,seed))==NULL) |
|
244 |
+ return("insuf. mem. for temp. buffer"); |
|
245 |
+ if(write_file(filename,mem,filesize)==-1) |
|
246 |
+ return("couldn't create temporary file"); |
|
247 |
+ if(redata_load(redata,filename,0)!=0) { |
|
248 |
+ unlink(filename); |
|
249 |
+ return("couldn't load file"); |
|
250 |
+ } |
|
251 |
+ unlink(filename); |
|
252 |
+ } |
|
253 |
+ } |
|
254 |
+ if(mem!=NULL) |
|
255 |
+ free(mem),mem=NULL; |
|
256 |
+ return(TEST_OK); |
|
257 |
+} |
|
258 |
+ |
... | ... |
@@ -14,19 +14,102 @@ |
14 | 14 |
#include <unistd.h> |
15 | 15 |
#include <string.h> |
16 | 16 |
#include <limits.h> |
17 |
+#include <fcntl.h> |
|
17 | 18 |
|
18 | 19 |
#include "recenteditor_data.h" |
19 | 20 |
|
21 |
+#define PREFIX "retest_" |
|
22 |
+#define TEST_OK "OK" |
|
23 |
+ |
|
24 |
+typedef struct test_t { |
|
25 |
+ char *name; |
|
26 |
+ char *(*fn)(redata_t *,char *,char *, int, int); |
|
27 |
+ char *param1; |
|
28 |
+ char *param2; |
|
29 |
+ int int1; |
|
30 |
+ int int2; |
|
31 |
+} test_t; |
|
32 |
+ |
|
33 |
+char *test_newfile(redata_t *redata, char *filename, char *dummy, int filesize, int dummy2); |
|
34 |
+ |
|
20 | 35 |
int |
21 | 36 |
main(int argc, char *argv[]) |
22 | 37 |
{ |
38 |
+ test_t tests[]={ |
|
39 |
+ {"newfile_16",test_newfile,PREFIX "FILE", NULL, 16, 0}, |
|
40 |
+ {"newfile_1024",test_newfile,PREFIX "FILE", NULL, 1024, 0}, |
|
41 |
+ {"newfile_32767",test_newfile,PREFIX "FILE", NULL, 32767, 0}, |
|
42 |
+ {"newfile_32768",test_newfile,PREFIX "FILE", NULL, 32768, 0}, |
|
43 |
+ {"newfile_32769",test_newfile,PREFIX "FILE", NULL, 32769, 0}, |
|
44 |
+ {"newfile_131072",test_newfile,PREFIX "FILE", NULL, 131072, 0}, |
|
45 |
+ |
|
46 |
+ }; |
|
23 | 47 |
redata_t *redata; |
24 |
- if((redata=redata_init())==NULL) { |
|
25 |
- fprintf(stderr,"ERROR: problem initializong redata module\n"); |
|
26 |
- return(1); |
|
48 |
+ int i; |
|
49 |
+ int nerrors; |
|
50 |
+ char *res; |
|
51 |
+ for(i=0,nerrors=0;i<(sizeof(tests)/sizeof(tests[0]));i++) { |
|
52 |
+ if((redata=redata_init())==NULL) { |
|
53 |
+ fprintf(stderr,"ERROR: problem initializing redata module\n"); |
|
54 |
+ return(1); |
|
55 |
+ } |
|
56 |
+ fprintf(stderr,"%s...",tests[i].name); |
|
57 |
+ res=tests[i].fn(redata,tests[i].param1,tests[i].param2,tests[i].int1,tests[i].int2); |
|
58 |
+ if(strcmp(res,TEST_OK)==0) { |
|
59 |
+ fprintf(stderr," ok.\n"); |
|
60 |
+ } else { |
|
61 |
+ fprintf(stderr," ERROR: %s\n",res); |
|
62 |
+ nerrors++; |
|
63 |
+ } |
|
64 |
+ redata_free(redata),redata=NULL; |
|
27 | 65 |
} |
28 |
-#warning TODO |
|
66 |
+ fprintf(stderr,"\n"); |
|
67 |
+ if(nerrors==0) |
|
68 |
+ fprintf(stderr,"All tests passed OK\n"); |
|
69 |
+ else |
|
70 |
+ fprintf(stderr,"%i tests failed of %i total tests.\n",nerrors,i); |
|
29 | 71 |
redata_free(redata),redata=NULL; |
72 |
+ return((nerrors==0)?0:1); |
|
30 | 73 |
} |
31 | 74 |
|
75 |
+char * |
|
76 |
+test_newfile(redata_t *redata, char *filename, char *dummy, int filesize, int dummy2) |
|
77 |
+{ |
|
78 |
+ char *mem; |
|
79 |
+ char hash129_pre[129]; |
|
80 |
+ char hash129_post[129]; |
|
81 |
+ int fd,i; |
|
82 |
+fprintf(stderr,"\ntest_newfile(%s%s%s,%s,%i,%i);\nResult: ",(filename!=NULL)?"\"":"",(filename!=NULL)?filename:"NULL",(filename!=NULL)?"\"":"",(dummy!=NULL)?dummy:"NULL",filesize,dummy2); |
|
83 |
+ /* prepare file for loading */ |
|
84 |
+ if((mem=malloc(filesize))==NULL) |
|
85 |
+ return("insuf. mem. for temp. buffer"); |
|
86 |
+ memset(mem,0,filesize); |
|
87 |
+ for(i=0;i<filesize;i++) |
|
88 |
+ ((unsigned char *)mem)[i]=(filesize%256); |
|
89 |
+ if((fd=open(filename,O_WRONLY|O_CREAT|O_TRUNC,0644))==-1) { |
|
90 |
+ free(mem),mem=NULL; |
|
91 |
+ return("couldn't create temporary file"); |
|
92 |
+ } |
|
93 |
+ write(fd,mem,filesize); |
|
94 |
+ close(fd),fd=-1; |
|
95 |
+ redata_filehash(redata,filename,hash129_pre); |
|
96 |
+ free(mem),mem=NULL; |
|
97 |
+ /* load file */ |
|
98 |
+ if(redata_load(redata,filename,0)!=0) { |
|
99 |
+ unlink(filename); |
|
100 |
+ return("couldn't load file"); |
|
101 |
+ } |
|
102 |
+ unlink(filename); |
|
103 |
+ redata_hash(redata,hash129_post); |
|
104 |
+ if(strcmp(hash129_pre,hash129_post)!=0) |
|
105 |
+ return("loaded file is corrupted"); |
|
106 |
+ /* save file */ |
|
107 |
+ redata_save(redata,filename); |
|
108 |
+ hash129_post[0]='\0'; |
|
109 |
+ redata_filehash(redata,filename,hash129_post); |
|
110 |
+ if(strcmp(hash129_pre,hash129_post)!=0) |
|
111 |
+ return("saved file is corrupted"); |
|
112 |
+ unlink(filename); |
|
113 |
+ return(TEST_OK); |
|
114 |
+} |
|
32 | 115 |
|
1 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,32 @@ |
1 |
+/* |
|
2 |
+ * recenteditor_data.c |
|
3 |
+ * |
|
4 |
+ * A programmers editor |
|
5 |
+ * |
|
6 |
+ * Tests (ensure correct functionality of modules) |
|
7 |
+ * |
|
8 |
+ * Author: Dario Rodriguez dario@softhome.net |
|
9 |
+ * This program is licensed under the terms of GNU GPL v2.1+ |
|
10 |
+ */ |
|
11 |
+ |
|
12 |
+#include <stdio.h> |
|
13 |
+#include <stdlib.h> |
|
14 |
+#include <unistd.h> |
|
15 |
+#include <string.h> |
|
16 |
+#include <limits.h> |
|
17 |
+ |
|
18 |
+#include "recenteditor_data.h" |
|
19 |
+ |
|
20 |
+int |
|
21 |
+main(int argc, char *argv[]) |
|
22 |
+{ |
|
23 |
+ redata_t *redata; |
|
24 |
+ if((redata=redata_init())==NULL) { |
|
25 |
+ fprintf(stderr,"ERROR: problem initializong redata module\n"); |
|
26 |
+ return(1); |
|
27 |
+ } |
|
28 |
+#warning TODO |
|
29 |
+ redata_free(redata),redata=NULL; |
|
30 |
+} |
|
31 |
+ |
|
32 |
+ |