6
#include "../tools/disp.h"
7
#include "../xmlgen/xmlgen.h"
8
#include "../xmlgen/opcgen.h"
10
#ifdef GENERATOR_XMARK
11
#include "../xmlgen/xmark.h"
12
#endif /* GENERATOR_XMARK */
15
unsigned long iterations;
23
char *ReadFile(char *fn) {
30
printf("Can't open XML file!\n");
33
fstat(f->_fileno,&st);
34
buf=(char*)malloc(st.st_size+1+sizeof(unsigned long));
36
printf("Can't allocate memory!\n");
39
((unsigned long*)buf)[0]=st.st_size;
40
fread(buf+sizeof(unsigned long),st.st_size,1,f);
42
buf[st.st_size+sizeof(unsigned long)]=0;
46
void ReadConfig(struct TestData *td) {
48
f=fopen("config","r");
50
printf("Error opening config file!\n");
53
fscanf(f,"%lu",&(td->iterations));
57
void initXML(struct TestData *td);
58
void releaseXML(struct TestData *td);
59
void parseXML(struct TestData *td, unsigned long iter);
61
void Usage(char *myname) {
63
printf("Usage:\n\t%s <iterations> [<xml file>|xmlgen|opcgen",myname);
64
#ifdef GENERATOR_XMARK
67
#ifdef DTD_VALIDATION_SUPPORTED
71
#endif /* GENERATOR_XMARK */
76
int Test(int argc, char *argv[]) {
78
struct timeval pre_time,post_time;
80
unsigned long init_time,init_time2,time;
81
double init_dtime,init_d;
82
unsigned char mode=0; /* 0 - file, 1 - xmlgen, 2 - opcgen */
87
if ((argc<3)||(argc>4)) Usage(argv[0]);
89
td.iterations = atol(argv[1]);
90
if (td.iterations<=0) Usage(argv[0]);
93
#ifndef DTD_VALIDATION_SUPPORTED
94
fprintf(stderr,"DTD validation not implemented yet or not supported by parser!\n");
99
if (!strncmp(argv[2],"xmlgen",6)) mode=1;
100
else if (!strncmp(argv[2],"opcgen",6)) mode=2;
101
#ifdef GENERATOR_XMARK
102
else if (!strncmp(argv[2],"xmark",8)) mode=3;
103
#ifdef DTD_VALIDATION
104
else if (!strncmp(argv[2],"xmarkdtd",8)) mode=4;
106
#endif /* GENERATOR_XMARK */
111
if (argc==4) td.size = atol(argv[3]);
113
if (td.size<1) Usage(argv[0]);
115
rnd_init(); /* Initialising Random Generator */
122
xmlbuf=ReadFile(argv[2]);
124
fprintf(stderr,"Can't read XML file!\n");
127
td.xml=xmlbuf+sizeof(unsigned long);
128
td.xmllen=((unsigned long*)xmlbuf)[0];
131
xmlbuf=xmlgen_init(td.size);
136
xmlbuf=opcgen_init(td.size);
140
#ifdef GENERATOR_XMARK
142
xmlbuf=xmark_init(td.size);
147
xmlbuf=xmark_init(td.size);
151
#endif /* GENERATOR_XMARK */
155
gettimeofday(&pre_time,NULL);
157
gettimeofday(&post_time,NULL);
158
init_time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
160
#ifdef PARABIX_PARSER_FIX
161
f = fopen("/tmp/parabix.test", "w");
162
fwrite(td.xml, td.xmllen, 1, f);
166
gettimeofday(&pre_time,NULL);
168
gettimeofday(&post_time,NULL);
169
init_time2=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
172
for (i=1;i<=td.iterations;i++) {
180
#ifdef GENERATOR_XMARK
187
#endif /* GENERATOR_XMARK */
190
#ifdef PARABIX_PARSER_FIX
191
f = fopen("/tmp/parabix.test", "w");
192
fwrite(td.xml, td.xmllen, 1, f);
196
gettimeofday(&pre_time,NULL);
198
gettimeofday(&post_time,NULL);
199
time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
201
// printf("%lu\n",time);
216
#ifdef GENERATOR_XMARK
221
#endif /* GENERATOR_XMARK */
225
printf("Parsing Time %lf ms for %lu messages\n", ((double)disp_s) / 1000,td.iterations);
227
if ((init_time2 - disp_m)<10) {
231
init_d=300 * disp_d / fabs(init_time2 - disp_m);
232
init_dtime=(init_time2 - disp_m)/1000;
234
printf("Initialisation time %.3lf + %.3lf(%.2lf%) ms, Parsing Time %.3lf(%.2lf%) ms\n",(1. * init_time) / 1000, init_dtime, init_d, disp_m / 1000, 300*disp_d/disp_m);