head 1.3; access; symbols SFIO_1999:1.1.1.2 SFIO_1998:1.1.1.1 ATT:1.1.1; locks; strict; comment @ * @; 1.3 date 99.09.11.13.20.43; author rse; state Exp; branches; next 1.2; 1.2 date 99.09.11.12.42.11; author rse; state Exp; branches; next 1.1; 1.1 date 97.06.02.18.15.17; author rse; state Exp; branches 1.1.1.1; next ; 1.1.1.1 date 97.06.02.18.15.17; author rse; state Exp; branches; next 1.1.1.2; 1.1.1.2 date 99.08.04.17.51.12; author rse; state Exp; branches; next ; desc @@ 1.3 log @Merge in Sfio 1999 changes @ text @#include "sftest.h" #undef fork /* see if multiple writers do create a consistent set of records. */ #define N_WRITER 3 #define N_RECORD 10000 static long vrandom() { #define LOWBITS ((~((unsigned long)0)) >> 1) static unsigned long hash = 0xdeadbeef; return (hash = hash*0xbadbeef + 0xdeadbeef)&LOWBITS; } int main() { ssize_t size[N_WRITER][N_RECORD]; int count[N_WRITER]; char record[N_WRITER][128], *s; Sfio_t* fw[N_WRITER]; Sfio_t* fr; int i, r, done; /* create random record sizes */ for(i = 0; i < N_WRITER; ++i) for(r = 0; r < N_RECORD; ++r) size[i][r] = (ssize_t)(vrandom()%64) + 2; /* records for different processes */ for(i = 0; i < N_WRITER; ++i) for(r = 0; r < 128; ++r) record[i][r] = '0'+i; /* create file */ fr = sfopen(NIL(Sfio_t*),Kpv[0],"w+"); /* create records */ for(i = 0; i < N_WRITER; ++i) { fw[i] = sfopen(NIL(Sfio_t*),Kpv[0],"a"); count[i] = 0; } for(done = 0; done < N_WRITER; ) { i = (int)(vrandom()%N_WRITER); if(count[i] < N_RECORD) { r = size[i][count[i]]; if(!(s = sfreserve(fw[i],r,1)) || sfvalue(fw[i]) < r ) terror("sfreserve fails in process %d\n", i); memcpy(s,record[i],r-1); s[r-1] = '\n'; sfwrite(fw[i],s,r); if((count[i] += 1) == N_RECORD) { done += 1; sfclose(fw[i]); } } } for(i = 0; i < N_WRITER; ++i) count[i] = 0; while((s = sfgetr(fr,'\n',0)) ) { if((i = s[0] - '0') < 0 || i >= N_WRITER) terror("Wrong record type\n"); for(r = sfvalue(fr)-2; r > 0; --r) if(s[r] != s[0]) terror("Bad record%d, count=%d\n", i, count[i]); if(sfvalue(fr) != size[i][count[i]]) terror("Record%d count=%d size=%d sfvalue=%d\n", i, count[i], size[i][count[i]], sfvalue(fr)); count[i] += 1; } for(i = 0; i < N_WRITER; ++i) if(count[i] != N_RECORD) terror("Bad count%d %d\n", i, count[i]); rmkpv(); return 0; } @ 1.2 log @Incorporate stuff from RSE's Sfio98 variant @ text @d37 1 a37 1 fr = sfopen(NIL(Sfio_t*),"xxx","w+"); d41 1 a41 1 { fw[i] = sfopen(NIL(Sfio_t*),"xxx","a"); d84 2 a85 3 unlink("xxx"); exit(0); @ 1.1 log @Initial revision @ text @d17 1 a17 1 main() @ 1.1.1.1 log @Import of Sfio1998 @ text @@ 1.1.1.2 log @Import of Sfio1999 @ text @d37 1 a37 1 fr = sfopen(NIL(Sfio_t*),Kpv[0],"w+"); d41 1 a41 1 { fw[i] = sfopen(NIL(Sfio_t*),Kpv[0],"a"); d84 3 a86 2 rmkpv(); return 0; @