... | ... |
@@ -988,7 +988,10 @@ redata_op_add(redata_t *redata, long insertpos, char *buf, long buflen, undostac |
988 | 988 |
bothering=chunk->useddata-pos; |
989 | 989 |
bothering=(bothering>nextavail)?nextavail:bothering; |
990 | 990 |
redata_chunk_movedata(redata,chunkno,chunk->useddata-bothering,chunkno+1,0,bothering); |
991 |
- redata_chunk_insertdata(redata,chunkno,pos,buf,buflen); |
|
991 |
+ avail=redata->chunkdatasize-chunk->useddata; |
|
992 |
+ avail=(avail>buflen)?buflen:avail; |
|
993 |
+ redata_chunk_insertdata(redata,chunkno,pos,buf,avail); |
|
994 |
+ redata_chunk_insertdata(redata,chunkno+1,0,buf+avail,buflen-avail); |
|
992 | 995 |
} else { |
993 | 996 |
/* will need to add more chunks */ |
994 | 997 |
needed=(buflen+redata->chunkdatasize-1)/redata->chunkdatasize; |
... | ... |
@@ -1068,7 +1071,7 @@ redata_op_del(redata_t *redata, long delpos, long size, undostack_t *fromhere) |
1068 | 1071 |
curpos=(curchunk==chunkno)?pos:0; |
1069 | 1072 |
curdel=redata->chunks[curchunk]->useddata-curpos; |
1070 | 1073 |
curdel=(curdel>(size-ndel))?(size-ndel):curdel; |
1071 |
- redata_chunk_deletedata(redata,chunkno,curpos,curdel); |
|
1074 |
+ redata_chunk_deletedata(redata,curchunk,curpos,curdel); |
|
1072 | 1075 |
ndel+=curdel; |
1073 | 1076 |
} |
1074 | 1077 |
/* fix nl and delete unused chunks */ |
... | ... |
@@ -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 |
|