Mercurial > projects > ldc
annotate tests/makewebstatistics.d @ 715:30b42a283c8e
Removed TypeOpaque from DMD.
Changed runtime functions taking opaque[] to void[].
Implemented proper type painting, to avoid "resizing" array casts in runtime calls that previously took opaque[].
Implemented dynamic arrays as first class types, this implements proper ABI for these types on x86.
Added dwarf region end after call to assert function, fixes some problems with llvm not allowing this to be missing.
Reverted change to WithStatement from rev [704] it breaks MiniD, mini/with2.d needs to be fixed some other way...
Fixed tango bug 1339 in runtime, problem with _adReverseChar on invalid UTF-8.
Disabled .bc generation in the compiler runtime part, genobj.d triggers some llvm bug when using debug info. the .o seems to work fine.
author | Tomas Lindquist Olsen <tomas.l.olsen@gmail.com> |
---|---|
date | Wed, 22 Oct 2008 14:55:33 +0200 |
parents | 6aaa3d3c1183 |
children | 3e98925bcc39 |
rev | line source |
---|---|
255 | 1 // Based on DSTRESS code by Thomas Kühne |
2 | |
3 module findregressions; | |
4 | |
5 private import std.string; | |
6 private import std.conv; | |
7 private import std.stdio; | |
8 private import std.stream; | |
9 private import std.file; | |
10 private import std.c.stdlib; | |
11 private import std.date; | |
12 private import std.path; | |
13 | |
14 | |
15 enum Result{ | |
16 UNTESTED = 0, | |
17 PASS = 1 << 2, | |
18 XFAIL = 2 << 2, | |
19 XPASS = 3 << 2, | |
20 FAIL = 4 << 2, | |
21 ERROR = 5 << 2, | |
22 BASE_MASK = 7 << 2, | |
23 | |
24 EXT_MASK = 3, | |
25 BAD_MSG = 1, | |
26 BAD_GDB = 2, | |
27 | |
28 MAX = BAD_GDB + BASE_MASK | |
29 } | |
30 | |
31 char[] toString(Result r){ | |
32 switch(r & Result.BASE_MASK){ | |
33 case Result.PASS: return "PASS"; | |
34 case Result.XPASS: return "XPASS"; | |
35 case Result.FAIL: return "FAIL"; | |
36 case Result.XFAIL: return "XFAIL"; | |
37 case Result.ERROR: return "ERROR"; | |
38 case Result.UNTESTED: return "UNTESTED"; | |
39 default: | |
40 break; | |
41 } | |
42 throw new Exception(format("unhandled Result value %s", cast(int)r)); | |
43 } | |
44 | |
45 char[] dateString(){ | |
46 static char[] date; | |
47 if(date is null){ | |
48 auto time = getUTCtime(); | |
49 auto year = YearFromTime(time); | |
50 auto month = MonthFromTime(time); | |
51 auto day = DateFromTime(time); | |
52 date = format("%d-%02d-%02d", year, month+1, day); | |
53 } | |
54 return date; | |
55 } | |
56 | |
57 char[][] unique(char[][] a){ | |
58 char[][] b = a.sort; | |
59 char[][] back; | |
60 | |
61 back ~= b[0]; | |
62 | |
63 size_t ii=0; | |
64 for(size_t i=0; i<b.length; i++){ | |
65 if(back[ii]!=b[i]){ | |
66 back~=b[i]; | |
67 ii++; | |
68 } | |
69 } | |
70 | |
71 return back; | |
72 } | |
73 | |
74 private{ | |
75 version(Windows){ | |
76 import std.c.windows.windows; | |
77 extern(Windows) BOOL GetFileTime(HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime); | |
78 }else version(linux){ | |
79 import std.c.linux.linux; | |
80 version = Unix; | |
81 }else version(Unix){ | |
82 import std.c.unix.unix; | |
83 }else{ | |
84 static assert(0); | |
85 } | |
86 | |
87 alias ulong FStime; | |
88 | |
89 FStime getFStime(char[] fileName){ | |
90 version(Windows){ | |
91 HANDLE h; | |
92 | |
93 if (useWfuncs){ | |
94 wchar* namez = std.utf.toUTF16z(fileName); | |
95 h = CreateFileW(namez,GENERIC_WRITE,0,null,OPEN_ALWAYS, | |
96 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,cast(HANDLE)null); | |
97 }else{ | |
98 char* namez = toMBSz(fileName); | |
99 h = CreateFileA(namez,GENERIC_WRITE,0,null,OPEN_ALWAYS, | |
100 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,cast(HANDLE)null); | |
101 } | |
102 | |
103 if (h == INVALID_HANDLE_VALUE) | |
104 goto err; | |
105 | |
106 FILETIME creationTime; | |
107 FILETIME accessTime; | |
108 FILETIME writeTime; | |
109 | |
110 BOOL b = GetFileTime(h, &creationTime, &accessTime, &writeTime); | |
111 if(b==1){ | |
112 long modA = writeTime.dwLowDateTime; | |
113 long modB = writeTime.dwHighDateTime; | |
114 return modA | (modB << (writeTime.dwHighDateTime.sizeof*8)); | |
115 } | |
116 | |
117 err: | |
118 CloseHandle(h); | |
119 throw new Exception("failed to query file modification : "~fileName); | |
120 }else version(Unix){ | |
121 char* namez = toStringz(fileName); | |
122 struct_stat statbuf; | |
123 | |
124 if(stat(namez, &statbuf)){ | |
125 throw new FileException(fileName, getErrno()); | |
126 } | |
127 | |
128 return statbuf.st_mtime; | |
129 }else{ | |
130 static assert(0); | |
131 } | |
132 } | |
133 } | |
134 | |
135 char[] cleanFileName(char[] file){ | |
136 char[] back; | |
137 bool hadSep; | |
138 | |
139 foreach(char c; file){ | |
140 if(c == '/' || c == '\\'){ | |
141 if(!hadSep){ | |
142 back ~= '/'; | |
143 hadSep = true; | |
144 } | |
145 }else{ | |
146 back ~= c; | |
147 hadSep = false; | |
148 } | |
149 } | |
150 | |
151 size_t start = 0; | |
152 while(back[start] <= ' ' && start < back.length){ | |
153 start++; | |
154 } | |
155 | |
156 size_t end = back.length-1; | |
157 while(back[end] <= ' ' && end >= start){ | |
158 end--; | |
159 } | |
160 | |
161 back = back[start .. end+1]; | |
162 | |
163 return back; | |
164 } | |
165 | |
166 class Test{ | |
167 char[] name; | |
168 char[] file; | |
169 Result r; | |
170 | |
171 this(char[] file){ | |
172 this.file = file; | |
173 | |
174 int start = rfind(file, "/"); | |
175 if(start<0){ | |
176 start = 0; | |
177 }else{ | |
178 start += 1; | |
179 } | |
180 | |
181 int end = rfind(file, "."); | |
182 if(end < start){ | |
183 end = file.length; | |
184 } | |
185 | |
186 name = file[start .. end]; | |
187 } | |
188 } | |
189 | |
190 | |
191 class Log{ | |
192 Test[char[]] tests; | |
193 | |
194 char[] id; | |
195 | |
196 int[Result] counts; | |
197 | |
198 this(char[] id, char[] file){ | |
199 this.id = id; | |
200 counts = [ | |
201 Result.PASS: 0, | |
202 Result.FAIL: 0, | |
203 Result.XPASS: 0, | |
204 Result.XFAIL: 0, | |
205 Result.ERROR: 0 ]; | |
206 | |
207 writefln("parsing: %s", file); | |
208 FStime logTime = getFStime(file); | |
209 Stream source = new BufferedFile(file, FileMode.In); | |
210 while(!source.eof()){ | |
211 add(source.readLine()); | |
212 } | |
213 dropBogusResults(logTime, "dstress"); | |
214 } | |
215 | |
216 | |
217 void dropBogusResults(FStime recordTime, char[] testRoot){ | |
218 uint totalCount = tests.length; | |
219 | |
220 char[][] sourcesTests = tests.keys; | |
221 foreach(char[] source; sourcesTests){ | |
222 if(find(source, "complex/") < 0){ | |
223 try{ | |
224 FStime caseTime = getFStime(testRoot~std.path.sep~source); | |
225 if(caseTime > recordTime){ | |
226 debug(drop) fwritefln(stderr, "dropped: %s", source); | |
227 counts[tests[source].r & Result.BASE_MASK]--; | |
228 tests.remove(source); | |
229 } | |
230 }catch(Exception e){ | |
231 debug(drop) fwritefln(stderr, "dropped: %s", source); | |
232 counts[tests[source].r & Result.BASE_MASK]--; | |
233 tests.remove(source); | |
234 } | |
235 } | |
236 // asm-filter | |
237 int i = find(source, "asm_p"); | |
238 if(i >= 0){ | |
239 counts[tests[source].r & Result.BASE_MASK]--; | |
240 tests.remove(source); | |
241 } | |
242 } | |
243 tests.rehash; | |
244 | |
245 writefln("dropped %s outdated tests (%s remaining)", totalCount - tests.length, tests.length); | |
246 } | |
247 | |
248 | |
249 bool add(char[] line){ | |
250 const char[] SUB = "Torture-Sub-"; | |
251 const char[] TORTURE = "Torture:"; | |
252 | |
253 line = strip(line); | |
254 int id = -1; | |
255 Result r = Result.UNTESTED; | |
256 | |
257 if(line.length > SUB.length && line[0 .. SUB.length] == SUB){ | |
258 line = line[SUB.length .. $]; | |
259 id = 0; | |
260 while(line[id] >= '0' && line[id] <= '9'){ | |
261 id++; | |
262 } | |
263 int start = id; | |
264 id = std.conv.toUint(line[0 .. id]); | |
265 | |
266 while(line[start] != '-'){ | |
267 start++; | |
268 } | |
269 line = line[start+1 .. $]; | |
270 } | |
271 | |
272 char[][] token = split(line); | |
273 if(token.length < 2){ | |
274 return false; | |
275 } | |
276 char[] file = strip(token[1]); | |
277 | |
278 switch(token[0]){ | |
279 case "PASS:": | |
280 r = Result.PASS; break; | |
281 case "FAIL:": | |
282 r = Result.FAIL; break; | |
283 case "XPASS:": | |
284 r = Result.XPASS; break; | |
285 case "XFAIL:": | |
286 r = Result.XFAIL; break; | |
287 case "ERROR:": | |
288 r = Result.ERROR; break; | |
289 default:{ | |
290 if(token[0] == TORTURE){ | |
291 throw new Exception("not yet handled: "~line); | |
292 }else if(id > -1){ | |
293 throw new Exception(format("bug in SUB line: (%s) %s", id, line)); | |
294 } | |
295 } | |
296 } | |
297 | |
298 if(r != Result.UNTESTED){ | |
299 if(std.string.find(line, "bad error message") > -1){ | |
300 r |= Result.BAD_MSG; | |
301 } | |
302 if(std.string.find(line, "bad debugger message") > -1){ | |
303 r |= Result.BAD_MSG; | |
304 } | |
305 | |
306 file = cleanFileName(file); | |
307 | |
308 if(id >= 0){ | |
309 // update sub | |
310 id--; | |
311 | |
312 Test* test = file in tests; | |
313 | |
314 if(test is null){ | |
315 Test t = new Test(file); | |
316 tests[file] = t; | |
317 t.r = r; | |
318 counts[r & Result.BASE_MASK]++; | |
319 }else{ | |
320 if(test.r != Result.UNTESTED){ | |
321 test.r = Result.UNTESTED; | |
322 } | |
323 test.r = r; | |
324 } | |
325 } | |
326 return true; | |
327 } | |
328 return false; | |
329 } | |
330 } | |
331 | |
332 | |
266 | 333 char[] basedir = "web"; |
334 bool regenerate = false; | |
335 | |
255 | 336 int main(char[][] args){ |
337 | |
266 | 338 if(args.length < 3 || (args[1] == "--regenerate" && args.length < 4)){ |
339 fwritefln(stderr, "%s [--regenerate] <reference-log> <log> <log> ...", args[0]); | |
663
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
340 fwritefln(stderr, "bash example: %s reference/dmd-something $(ls reference/ldc*)", args[0]); |
255 | 341 return 1; |
342 } | |
343 | |
266 | 344 char[] reference; |
257 | 345 char[][] files; |
346 if(args[1] == "--regenerate") { | |
347 regenerate = true; | |
266 | 348 reference = args[2]; |
349 files = args[3..$] ~ reference; | |
257 | 350 } else { |
266 | 351 reference = args[1]; |
352 files = args[2..$] ~ reference; | |
257 | 353 } |
354 | |
255 | 355 // make sure base path exists |
356 if(std.file.exists(basedir) && !std.file.isdir(basedir)) | |
357 throw new Exception(basedir ~ " is not a directory!"); | |
358 else if(!std.file.exists(basedir)) | |
359 std.file.mkdir(basedir); | |
360 | |
361 | |
362 Log[char[]] logs; | |
363 | |
266 | 364 // emit per-log data |
365 foreach(char[] file; files) | |
366 generateLogStatistics(file, logs); | |
367 | |
368 // differences between logs | |
369 foreach(int i, char[] file; files[1 .. $]) | |
370 generateChangeStatistics(files[1+i], files[1+i-1], logs); | |
371 | |
372 // differences between reference and logs | |
373 foreach(char[] file; files[0..$-1]) | |
374 generateChangeStatistics(file, reference, logs); | |
375 | |
376 // collect all the stats.base files into a large table | |
377 BufferedFile index = new BufferedFile(std.path.join(basedir, "index.html"), FileMode.OutNew); | |
378 scope(exit) index.close(); | |
379 index.writefln(` | |
663
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
380 <!DOCTYPE html> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
381 <html> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
382 <head> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
383 <title>DStress results for x86-32 Linux</title> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
384 <style type="text/css"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
385 body { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
386 font-family: Arial, Helvetica, sans-serif; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
387 font-size: 0.8em; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
388 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
389 a { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
390 text-decoration: none; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
391 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
392 a:hover { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
393 border-bottom: 1px dotted blue; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
394 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
395 table { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
396 border-collapse: collapse; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
397 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
398 tr { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
399 border-bottom: 1px solid #CCC; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
400 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
401 tr.odd { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
402 background: #e0e0e0; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
403 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
404 tr.head { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
405 border-bottom: none; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
406 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
407 td,th { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
408 padding: 2px 10px 2px 10px; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
409 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
410 .result:hover { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
411 background: #C3DFFF; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
412 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
413 .pass,.xfail,.xpass,.fail,.xpass,.error,.generic { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
414 text-align: center; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
415 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
416 .generic { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
417 background: #EEE; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
418 color: gray; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
419 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
420 .pass { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
421 background: #98FF90; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
422 color: green; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
423 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
424 tr:hover .pass { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
425 background: #83E67B; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
426 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
427 .xfail { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
428 background: #BDFFB8; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
429 color: #0CAE00; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
430 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
431 tr:hover .xfail { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
432 background: #98FF90; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
433 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
434 .fail { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
435 background: #FF6E7A; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
436 color: maroon; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
437 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
438 .xpass { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
439 background: #FF949D; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
440 color: maroon; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
441 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
442 .error { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
443 background: #FFB3B9; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
444 color: maroon; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
445 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
446 .borderleft { |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
447 border-left: 1px solid #CCC; |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
448 } |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
449 </style> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
450 </head> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
451 |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
452 <body> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
453 <h1>DStress results for x86-32 Linux</h1> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
454 |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
455 <h2>Legend</h2> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
456 <table id="legend"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
457 <tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
458 <th>Color</th> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
459 <th>Description</th> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
460 </tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
461 <tr class="result"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
462 <td class="pass">PASS</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
463 <td>Test passed and was expected to pass</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
464 </tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
465 <tr class="result"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
466 <td class="xfail">XFAIL</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
467 <td>Test failed and expected to fail</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
468 </tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
469 <tr class="result"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
470 <td class="fail">FAIL</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
471 <td>Test failed but was expected to pass</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
472 </tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
473 <tr class="result"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
474 <td class="xpass">XPASS</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
475 <td>Test passed but was expected to fail</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
476 </tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
477 <tr class="result"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
478 <td class="error">ERROR</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
479 <td>The compiler, linker or the test segfaulted</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
480 </tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
481 <tr class="result"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
482 <td class="generic">+</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
483 <td>Changes from FAIL, XPASS or ERROR to PASS or XFAIL</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
484 </tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
485 <tr class="result"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
486 <td class="generic">-</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
487 <td>Changes from PASS or XFAIL to FAIL, XPASS or ERROR</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
488 </tr> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
489 <tr class="result"> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
490 <td class="generic">chg</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
491 <td>Changed within the good or bad group without crossing over</td> |
6aaa3d3c1183
First part of rename to LDC.
Christian Kamm <kamm incasoftware de>
parents:
552
diff
changeset
|
492 </tr> |
497
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
493 </table> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
494 |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
495 <h2>Results</h2> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
496 <table> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
497 <tr class="head"> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
498 <th></th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
499 <th colspan="5" class="borderleft">Test results</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
500 <th colspan="3" class="borderleft">Diff to previous</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
501 <th colspan="3" class="borderleft">Diff to ` ~ std.path.getBaseName(reference) ~ `</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
502 </tr> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
503 <tr> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
504 <th>Name</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
505 <th class="borderleft">PASS</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
506 <th>XFAIL</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
507 <th>FAIL</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
508 <th>XPASS</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
509 <th>ERROR</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
510 <th class="borderleft">+</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
511 <th>-</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
512 <th>chg</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
513 <th class="borderleft">+</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
514 <th>-</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
515 <th>chg</th> |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
516 </tr> |
266 | 517 `); |
255 | 518 |
266 | 519 for(int i = files.length - 1; i >= 0; --i) { |
520 auto file = files[i]; | |
497
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
521 index.writefln(`<tr class="` ~ (i%2 ? `result` : `odd result`) ~ `">`); |
266 | 522 char[] id = std.path.getBaseName(file); |
523 char[] statsname = std.path.join(std.path.join(basedir, id), "stats.base"); | |
524 index.writef(cast(char[])std.file.read(statsname)); | |
525 | |
497
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
526 if(i != 0) { |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
527 char[] newid = std.path.getBaseName(files[i-1]); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
528 statsname = std.path.join(std.path.join(basedir, newid ~ "-to-" ~ id), "stats.base"); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
529 index.writef(cast(char[])std.file.read(statsname)); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
530 } else { |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
531 index.writefln(`<td class="borderleft"></td><td></td><td></td>`); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
532 } |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
533 |
266 | 534 if(i != files.length - 1) { |
535 char[] refid = std.path.getBaseName(reference); | |
536 statsname = std.path.join(std.path.join(basedir, refid ~ "-to-" ~ id), "stats.base"); | |
537 index.writef(cast(char[])std.file.read(statsname)); | |
538 } else { | |
497
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
539 index.writefln(`<td class="borderleft"></td><td></td><td></td>`); |
266 | 540 } |
541 | |
497
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
542 index.writefln(`</tr>`); |
266 | 543 } |
544 | |
545 index.writefln(`</table></body></html>`); | |
546 | |
547 return 0; | |
548 } | |
549 | |
550 void generateLogStatistics(char[] file, ref Log[char[]] logs) | |
551 { | |
552 char[] id = std.path.getBaseName(file); | |
553 char[] dirname = std.path.join(basedir, id); | |
554 | |
555 if(std.file.exists(dirname)) { | |
556 if(std.file.isdir(dirname)) { | |
557 if(!regenerate) { | |
558 writefln("Directory ", dirname, " already exists, skipping..."); | |
559 return; | |
255 | 560 } |
561 } | |
562 else | |
266 | 563 throw new Exception(dirname ~ " is not a directory!"); |
564 } | |
565 else | |
566 std.file.mkdir(dirname); | |
255 | 567 |
266 | 568 // parse etc. |
569 Log log = new Log(id, file); | |
570 logs[id] = log; | |
255 | 571 |
266 | 572 // write status |
573 { | |
255 | 574 BufferedFile makeFile(char[] name) { |
261
5723b7385c25
[svn r279] fixed bug in makewebstatistics, regenerated output
ChristianK
parents:
257
diff
changeset
|
575 return new BufferedFile(std.path.join(dirname, name), FileMode.OutNew); |
255 | 576 } |
577 BufferedFile[Result] resultsfile = [ | |
578 Result.PASS: makeFile("pass.html"), | |
579 Result.FAIL: makeFile("fail.html"), | |
580 Result.XPASS: makeFile("xpass.html"), | |
581 Result.XFAIL: makeFile("xfail.html"), | |
582 Result.ERROR: makeFile("error.html") ]; | |
266 | 583 |
255 | 584 scope(exit) { |
585 foreach(file; resultsfile) | |
586 file.close(); | |
587 } | |
266 | 588 |
589 foreach(file; resultsfile) | |
590 file.writefln(`<html><body>`); | |
591 | |
255 | 592 foreach(tkey; log.tests.keys.sort) { |
593 auto test = log.tests[tkey]; | |
594 auto result = test.r & Result.BASE_MASK; | |
266 | 595 resultsfile[result].writefln(test.name, " in ", test.file, "<br>"); |
255 | 596 } |
597 | |
266 | 598 foreach(file; resultsfile) |
599 file.writefln(`</body></html>`); | |
600 } | |
255 | 601 |
266 | 602 BufferedFile stats = new BufferedFile(std.path.join(dirname, "stats.base"), FileMode.OutNew); |
603 scope(exit) stats.close(); | |
497
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
604 stats.writefln(`<td>`, id, `</td>`); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
605 stats.writefln(`<td class="pass borderleft"><a href="`, std.path.join(log.id, "pass.html"), `">`, log.counts[Result.PASS], `</a></td>`); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
606 stats.writefln(`<td class="xfail"><a href="`, std.path.join(log.id, "xfail.html"), `">`, log.counts[Result.XFAIL], `</a></td>`); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
607 stats.writefln(`<td class="fail"><a href="`, std.path.join(log.id, "fail.html"), `">`, log.counts[Result.FAIL], `</a></td>`); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
608 stats.writefln(`<td class="xpass"><a href="`, std.path.join(log.id, "xpass.html"), `">`, log.counts[Result.XPASS], `</a></td>`); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
609 stats.writefln(`<td class="error"><a href="`, std.path.join(log.id, "error.html"), `">`, log.counts[Result.ERROR], `</a></td>`); |
266 | 610 } |
255 | 611 |
266 | 612 void generateChangeStatistics(char[] file1, char[] file2, ref Log[char[]] logs) |
613 { | |
614 char[] newid = std.path.getBaseName(file1); | |
615 char[] oldid = std.path.getBaseName(file2); | |
616 | |
617 char[] dirname = std.path.join(basedir, oldid ~ "-to-" ~ newid); | |
618 | |
619 if(std.file.exists(dirname)) { | |
620 if(std.file.isdir(dirname)) { | |
621 if(!regenerate) { | |
622 writefln("Directory ", dirname, " already exists, skipping..."); | |
623 return; | |
255 | 624 } |
625 } | |
626 else | |
266 | 627 throw new Exception(dirname ~ " is not a directory!"); |
628 } | |
629 else | |
630 std.file.mkdir(dirname); | |
255 | 631 |
266 | 632 // parse etc. |
633 Log newLog, oldLog; | |
634 Log getOrParse(char[] id, char[] file) { | |
635 if(id in logs) | |
636 return logs[id]; | |
637 else { | |
638 Log tmp = new Log(id, file); | |
639 logs[id] = tmp; | |
640 return tmp; | |
255 | 641 } |
266 | 642 } |
643 newLog = getOrParse(newid, file1); | |
644 oldLog = getOrParse(oldid, file2); | |
255 | 645 |
266 | 646 int nRegressions, nImprovements, nChanges; |
647 | |
648 { | |
261
5723b7385c25
[svn r279] fixed bug in makewebstatistics, regenerated output
ChristianK
parents:
257
diff
changeset
|
649 auto regressionsFile = new BufferedFile(std.path.join(dirname, "regressions.html"), FileMode.OutNew); |
255 | 650 scope(exit) regressionsFile.close(); |
266 | 651 regressionsFile.writefln(`<html><body>`); |
652 | |
261
5723b7385c25
[svn r279] fixed bug in makewebstatistics, regenerated output
ChristianK
parents:
257
diff
changeset
|
653 auto improvementsFile = new BufferedFile(std.path.join(dirname, "improvements.html"), FileMode.OutNew); |
255 | 654 scope(exit) improvementsFile.close(); |
266 | 655 improvementsFile.writefln(`<html><body>`); |
656 | |
261
5723b7385c25
[svn r279] fixed bug in makewebstatistics, regenerated output
ChristianK
parents:
257
diff
changeset
|
657 auto changesFile = new BufferedFile(std.path.join(dirname, "changes.html"), FileMode.OutNew); |
255 | 658 scope(exit) changesFile.close(); |
266 | 659 changesFile.writefln(`<html><body>`); |
660 | |
255 | 661 BufferedFile targetFile; |
266 | 662 |
346
c9d5c711d65a
[svn r367] In web dstress statistics, write change lists sorted by filename.
ChristianK
parents:
266
diff
changeset
|
663 foreach(file; newLog.tests.keys.sort){ |
c9d5c711d65a
[svn r367] In web dstress statistics, write change lists sorted by filename.
ChristianK
parents:
266
diff
changeset
|
664 Test* t = file in newLog.tests; |
c9d5c711d65a
[svn r367] In web dstress statistics, write change lists sorted by filename.
ChristianK
parents:
266
diff
changeset
|
665 Test* oldT = file in oldLog.tests; |
255 | 666 |
667 if(oldT !is null){ | |
668 if(oldT.r == t.r) | |
669 continue; | |
552
648409a7fb0c
Fix findregressions and makewebstatistics to adhere to our definition of
Christian Kamm <kamm incasoftware de>
parents:
497
diff
changeset
|
670 else if(t.r >= Result.XPASS && oldT.r && oldT.r <= Result.XFAIL){ |
255 | 671 targetFile = regressionsFile; |
672 nRegressions++; | |
673 } | |
552
648409a7fb0c
Fix findregressions and makewebstatistics to adhere to our definition of
Christian Kamm <kamm incasoftware de>
parents:
497
diff
changeset
|
674 else if(t.r && t.r <= Result.XFAIL && oldT.r >= Result.XPASS){ |
255 | 675 targetFile = improvementsFile; |
676 nImprovements++; | |
677 } | |
678 else { | |
679 targetFile = changesFile; | |
680 nChanges++; | |
681 } | |
266 | 682 targetFile.writefln(toString(oldT.r), " -> ", toString(t.r), " : ", t.name, " in ", t.file, "<br>"); |
255 | 683 } |
266 | 684 } |
255 | 685 |
266 | 686 regressionsFile.writefln(`</body></html>`); |
687 improvementsFile.writefln(`</body></html>`); | |
688 changesFile.writefln(`</body></html>`); | |
255 | 689 } |
690 | |
266 | 691 BufferedFile stats = new BufferedFile(std.path.join(dirname, "stats.base"), FileMode.OutNew); |
692 scope(exit) stats.close(); | |
693 auto dir = oldid ~ "-to-" ~ newid; | |
497
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
694 stats.writefln(`<td class="borderleft"><a href="`, std.path.join(dir, "improvements.html"), `">`, nImprovements, `</a></td>`); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
695 stats.writefln(`<td><a href="`, std.path.join(dir, "regressions.html"), `">`, nRegressions, `</a></td>`); |
70faa6af1357
Change web statistics layout, thanks anders!
Christian Kamm <kamm incasoftware de>
parents:
362
diff
changeset
|
696 stats.writefln(`<td><a href="`, std.path.join(dir, "changes.html"), `">`, nChanges, `</a></td>`); |
255 | 697 } |