6
#include "../tools/disp.h"
7
#include "../xmlgen/xmlgen.h"
8
#include "../xmlgen/opcgen.h"
11
unsigned long iterations;
22
char *ReadFile(char *fn) {
29
printf("Can't open XML file!\n");
32
fstat(f->_fileno,&st);
33
buf=(char*)malloc(st.st_size+1+sizeof(unsigned long));
35
printf("Can't allocate memory!\n");
38
((unsigned long*)buf)[0]=st.st_size;
39
fread(buf+sizeof(unsigned long),st.st_size,1,f);
41
buf[st.st_size+sizeof(unsigned long)]=0;
45
void ReadConfig(struct TestData *td) {
47
f=fopen("config","r");
49
printf("Error opening config file!\n");
52
fscanf(f,"%lu",&(td->iterations));
56
void parseXML(struct TestData *td, unsigned long iter);
57
void validateXML(struct TestData *td, unsigned long iter);
58
void initXML_Validation(struct TestData *td);
59
void initXML(struct TestData *td);
60
void releaseXML(struct TestData *td);
63
void Usage(char *myname) {
64
printf("Usage:\n\t%s <iterations> [<xml file>|xmlgen|opcgen] [<xsd file>|<size>]\n",myname);
69
int Test(int argc, char *argv[]) {
71
struct timeval pre_time,post_time;
73
unsigned long init_time,init_time2,time;
74
double init_dtime,init_d;
75
unsigned long parse_s;
76
double parse_m,parse_d;
77
unsigned char mode=0; /* 0 - file, 1 - xmlgen, 2 - opcgen */
81
if (argc!=4) Usage(argv[0]);
83
td.iterations = atol(argv[1]);
84
if (td.iterations<=0) Usage(argv[0]);
86
if (!strncmp(argv[2],"xmlgen",6)) mode=1;
87
else if (!strncmp(argv[2],"opcgen",6)) mode=2;
91
td.size = atol(argv[3]);
92
if (td.size<=0) Usage(argv[0]);
93
td.scfn = (char*)malloc(32);
95
rnd_init(); /* Initialising Random Generator */
100
xmlbuf=ReadFile(argv[2]);
102
fprintf(stderr,"Can't read XML file!\n");
105
td.xml=xmlbuf+sizeof(unsigned long);
106
td.xmllen=((unsigned long*)xmlbuf)[0];
111
xmlbuf=xmlgen_init(td.size);
116
strcpy(td.scfn,"../xml.files/generated-oracle.xsd");
118
strcpy(td.scfn,"../xml.files/generated.xsd");
122
xmlbuf=opcgen_init(td.size);
127
strcpy(td.scfn,"../xml.files/opc-oracle.xsd");
129
strcpy(td.scfn,"../xml.files/opc.xsd");
134
xsdbuf=ReadFile(td.scfn);
136
fprintf(stderr,"Can't read XSD file!\n");
140
td.xsd=xsdbuf+sizeof(unsigned long);
141
td.xsdlen=((unsigned long*)xsdbuf)[0];
149
for (i=1;i<=td.iterations;i++) {
158
gettimeofday(&pre_time,NULL);
160
gettimeofday(&post_time,NULL);
161
time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
163
// printf("Pars: %lu\n",time);
170
rnd_init(); /* Restarting random generator */
172
gettimeofday(&pre_time,NULL);
173
initXML_Validation(&td);
174
gettimeofday(&post_time,NULL);
175
init_time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
177
gettimeofday(&pre_time,NULL);
179
gettimeofday(&post_time,NULL);
180
init_time2=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
183
for (i=1;i<=td.iterations;i++) {
192
gettimeofday(&pre_time,NULL);
194
gettimeofday(&post_time,NULL);
195
time=(post_time.tv_sec-pre_time.tv_sec)*1000000+(post_time.tv_usec-pre_time.tv_usec);
197
// printf("Val: %lu\n",time);
215
if (mode) free(td.scfn);
219
printf("Validating Time %lf ms for %lu messages\n", ((double)(disp_s-parse_s)) / 1000,td.iterations);
221
init_dtime=(init_time2 - disp_m);
226
init_d=300 * disp_d / init_dtime;
229
printf("Initialisation time %.3lf + %.3lf(%.2lf%) ms, Validation Time %.3lf(%.2lf%) ms\n",(1. * init_time) / 1000, init_dtime, init_d, (disp_m - parse_m) / 1000, 300*(disp_d+parse_d)/(disp_m-parse_m));