/xmlbench/trunk

To get this branch, use:
bzr branch http://darksoft.org/webbzr/xmlbench/trunk
1 by Suren A. Chilingaryan
Initial import
1
#ifndef _RANDOM_H
2
#define _RANDOM_H
3
4
#define rnd_seed 1
5
6
7
char rnd_string[512];
8
char rnd_qsize=15;
9
char rnd_q[15][32]={"bad","badConfigurationError","badNotConnected",
10
    "badDeviceFailure","badSensorFailure","badLastKnownValue",
11
    "badCommFailure","badOutOfService","uncertain","uncertainLastUsableValue",
12
    "uncertainSensorNotAccurate","uncertainEUExceeded","uncertainSubNormal",
13
    "good","goodLocalOverride"};
14
15
char last_type=0;
16
char rnd_tsize=16;
17
char rnd_t[16][32]={"duration","dateTime","time","date","boolean",
18
    "base64Binary","hexBinary","float","double","anyURI",
19
    "QName","nonNegativeInteger","decimal","integer","string","normalizedString"};
20
21
void rnd_init() {
22
    srand(rnd_seed);
23
}
24
25
26
char rnd_digit() {
27
    return rand()/(RAND_MAX/9)+'0';
28
}
29
30
unsigned long rnd_int_max(unsigned long max) {
8 by Suren A. Chilingaryan
QT pull parser and fixes
31
    return 1.*max*rand()/RAND_MAX;
1 by Suren A. Chilingaryan
Initial import
32
}
33
34
long rnd_int_minmax(long min,long max) {
8 by Suren A. Chilingaryan
QT pull parser and fixes
35
    return min+1.*(max-min)*rand()/RAND_MAX;
1 by Suren A. Chilingaryan
Initial import
36
}
37
38
double rnd_double(double max) {
39
    return max * rand() / RAND_MAX;
40
}
41
42
char rnd_char() {
43
    if (rnd_int_max(2))
44
	return 65 + rand()/(RAND_MAX/(91-65));
45
    else 
46
	return 97 + rand()/(RAND_MAX/(123-97));
47
}
48
49
50
char rnd_cyr() {
51
    if (rnd_int_max(2))
52
	return 92 + rand()/(RAND_MAX/(224-92));
53
    else 
54
	return 224 + rand()/(RAND_MAX/(256-224));
55
}
56
57
char *rnd_path() {
58
    int i, size;
59
    
60
    size = rnd_int_max(64)+1;
61
    rnd_string[0]='/';
62
    for (i=1;i<size;i++) rnd_string[i]=rnd_char();
63
    rnd_string[i]=0;
64
    return rnd_string;
65
}
66
67
char *rnd_name() {
68
    int i, size;
69
    
70
    size = rnd_int_max(24)+1;
71
    for (i=0;i<size;i++) rnd_string[i]=rnd_char();
72
    rnd_string[i]=0;
73
    return rnd_string;
74
}
75
76
char *rnd_long_string(int c) {
77
    int i, size;
78
    
79
    if (c) size=c;
80
    else size = rnd_int_max(96)+1;
81
82
#ifdef CYRILLIC_TEXT
83
    for (i=0;i<size;i++) rnd_string[i]=rnd_cyr();
84
#else
85
    for (i=0;i<size;i++) rnd_string[i]=rnd_char();
86
#endif
87
    rnd_string[i]=0;
88
    return rnd_string;
89
}
90
91
char *rnd_datetime() {
92
    sprintf(rnd_string,"%u-%02u-%02uT%02u:%02u:%02u.%07u+0%u:00",
93
	1997+rnd_int_max(6),rnd_int_max(12)+1,rnd_int_max(28)+1,
94
	rnd_int_max(24),rnd_int_max(59),rnd_int_max(59),
95
	rnd_int_max(9999999),rnd_int_max(8));
96
    return rnd_string;
97
}
98
99
char *rnd_time() {
100
    sprintf(rnd_string,"%02u:%02u:%02u.%07u+0%u:00",
101
	rnd_int_max(24),rnd_int_max(59),rnd_int_max(59),
102
	rnd_int_max(9999999),rnd_int_max(8));
103
    return rnd_string;
104
}
105
106
char *rnd_date() {
107
    sprintf(rnd_string,"%u-%02u-%02u",
108
	1997+rnd_int_max(6),rnd_int_max(12)+1,rnd_int_max(28)+1);
109
    return rnd_string;
110
}
111
112
char *rnd_boolean() {
113
    if (rnd_int_max(2))
114
	strcpy(rnd_string,"true");
115
    else
116
	strcpy(rnd_string,"false");
117
    return rnd_string;
118
}
119
120
char *rnd_number_unsigned() {
121
    sprintf(rnd_string,"%u",rnd_int_max(65535));
122
    return rnd_string;
123
}
124
125
char *rnd_number_float() {
126
    sprintf(rnd_string,"%lf",rnd_double(1));
127
    return rnd_string;
128
}
129
130
char *rnd_duration() {
131
    sprintf(rnd_string,"P%uY%uM%uDT%uH%uM%uS",
132
	rnd_digit()+1,rnd_int_max(11)+1,rnd_int_max(27)+1,
133
	rnd_int_max(24),rnd_int_max(59),rnd_int_max(59));
134
    return rnd_string;
135
}
136
137
char *rnd_qualitystatus() {
138
    return rnd_q[rnd_int_max(rnd_qsize)];
139
}
140
141
char *rnd_type() {
142
    last_type=rnd_int_max(rnd_tsize);
143
    strcpy(rnd_string,rnd_t[last_type]);
144
    return rnd_string;
145
}
146
147
char *rnd_xsdtype() {
148
    last_type=rnd_int_max(rnd_tsize);
149
    strcpy(rnd_string,"xsd:");
150
    strcpy(rnd_string+4,rnd_t[last_type]);
151
    return rnd_string;
152
}
153
154
char *rnd_uri() {
155
    int i,size;
156
    strcpy(rnd_string,"http://");
157
158
    size = rnd_int_max(8)+8;
159
    for (i=7;i<size;i++) rnd_string[i]=rnd_char();
160
    strcpy(rnd_string+i,".ru/");
161
162
    size = rnd_int_max(16)+i+4;
163
    for (i+=4;i<size;i++) rnd_string[i]=rnd_char();
164
    if (rnd_int_max(2)) {
165
	rnd_string[i++]='?';
166
	size = rnd_int_max(32)+i;
167
	for (;i<size;i++) rnd_string[i]=rnd_char();
168
    }
169
    rnd_string[i]=0;
170
    return rnd_string;
171
}
172
173
char rnd_hex() {
174
    int i;
175
    
176
    i = rnd_int_max(16);
177
    if (i<10) return ('0'+i);
178
    else return ('A'+(i-10));
179
}
180
181
char *rnd_hexbinary(int size) {
182
    int i;
183
    if (!size) size=256;
184
    for (i=0;i<size;i++) rnd_string[i]=rnd_hex();
185
    rnd_string[i]=0;
186
    return rnd_string;
187
}
188
189
char *rnd_last_type() {
190
    switch (last_type) {
191
	case 0:
192
	    rnd_duration();
193
	break;
194
	case 1:
195
	    rnd_datetime();
196
	break;
197
	case 2:
198
	    rnd_time();
199
	break;
200
	case 3:
201
	    rnd_date();
202
	break;
203
	case 4:
204
	    rnd_boolean();
205
	break;
206
	case 5:
207
	case 6:
208
	    rnd_hexbinary(0);
209
	break;
210
	case 7:
211
	case 8:
212
	    rnd_number_float();
213
	break;
214
	case 9:
215
	    rnd_uri();
216
	break;
217
	case 10:
218
	    rnd_xsdtype();
219
	break;
220
	case 11:
221
	case 12:
222
	case 13:
223
	    rnd_number_unsigned();
224
	break;
225
	default:
226
	    rnd_long_string(0);
227
    }
228
    return rnd_string;
229
}
230
231
#endif /* _RANDOM_H */