annotate tests/findregressions.d @ 552:648409a7fb0c

Fix findregressions and makewebstatistics to adhere to our definition of Improvement and Regression.
author Christian Kamm <kamm incasoftware de>
date Thu, 28 Aug 2008 08:37:47 +0200
parents 395223f9875e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
186
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
1 // Based on DSTRESS code by Thomas Kühne
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
2
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
3 module findregressions;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
4
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
5 private import std.string;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
6 private import std.conv;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
7 private import std.stdio;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
8 private import std.stream;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
9 private import std.file;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
10 private import std.c.stdlib;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
11 private import std.date;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
12
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
13
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
14 enum Result{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
15 UNTESTED = 0,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
16 PASS = 1 << 2,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
17 XFAIL = 2 << 2,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
18 XPASS = 3 << 2,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
19 FAIL = 4 << 2,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
20 ERROR = 5 << 2,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
21 BASE_MASK = 7 << 2,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
22
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
23 EXT_MASK = 3,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
24 BAD_MSG = 1,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
25 BAD_GDB = 2,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
26
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
27 MAX = BAD_GDB + BASE_MASK
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
28 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
29
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
30 char[] toString(Result r){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
31 switch(r & Result.BASE_MASK){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
32 case Result.PASS: return "PASS";
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
33 case Result.XPASS: return "XPASS";
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
34 case Result.FAIL: return "FAIL";
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
35 case Result.XFAIL: return "XFAIL";
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
36 case Result.ERROR: return "ERROR";
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
37 case Result.UNTESTED: return "UNTESTED";
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
38 default:
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
39 break;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
40 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
41 throw new Exception(format("unhandled Result value %s", cast(int)r));
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
42 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
43
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
44 char[] dateString(){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
45 static char[] date;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
46 if(date is null){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
47 auto time = getUTCtime();
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
48 auto year = YearFromTime(time);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
49 auto month = MonthFromTime(time);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
50 auto day = DateFromTime(time);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
51 date = format("%d-%02d-%02d", year, month+1, day);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
52 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
53 return date;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
54 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
55
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
56 char[][] unique(char[][] a){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
57 char[][] b = a.sort;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
58 char[][] back;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
59
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
60 back ~= b[0];
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
61
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
62 size_t ii=0;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
63 for(size_t i=0; i<b.length; i++){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
64 if(back[ii]!=b[i]){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
65 back~=b[i];
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
66 ii++;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
67 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
68 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
69
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
70 return back;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
71 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
72
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
73 private{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
74 version(Windows){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
75 import std.c.windows.windows;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
76 extern(Windows) BOOL GetFileTime(HANDLE hFile, LPFILETIME lpCreationTime, LPFILETIME lpLastAccessTime, LPFILETIME lpLastWriteTime);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
77 }else version(linux){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
78 import std.c.linux.linux;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
79 version = Unix;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
80 }else version(Unix){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
81 import std.c.unix.unix;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
82 }else{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
83 static assert(0);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
84 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
85
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
86 alias ulong FStime;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
87
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
88 FStime getFStime(char[] fileName){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
89 version(Windows){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
90 HANDLE h;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
91
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
92 if (useWfuncs){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
93 wchar* namez = std.utf.toUTF16z(fileName);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
94 h = CreateFileW(namez,GENERIC_WRITE,0,null,OPEN_ALWAYS,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
95 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,cast(HANDLE)null);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
96 }else{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
97 char* namez = toMBSz(fileName);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
98 h = CreateFileA(namez,GENERIC_WRITE,0,null,OPEN_ALWAYS,
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
99 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,cast(HANDLE)null);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
100 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
101
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
102 if (h == INVALID_HANDLE_VALUE)
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
103 goto err;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
104
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
105 FILETIME creationTime;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
106 FILETIME accessTime;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
107 FILETIME writeTime;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
108
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
109 BOOL b = GetFileTime(h, &creationTime, &accessTime, &writeTime);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
110 if(b==1){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
111 long modA = writeTime.dwLowDateTime;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
112 long modB = writeTime.dwHighDateTime;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
113 return modA | (modB << (writeTime.dwHighDateTime.sizeof*8));
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
114 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
115
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
116 err:
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
117 CloseHandle(h);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
118 throw new Exception("failed to query file modification : "~fileName);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
119 }else version(Unix){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
120 char* namez = toStringz(fileName);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
121 struct_stat statbuf;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
122
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
123 if(stat(namez, &statbuf)){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
124 throw new FileException(fileName, getErrno());
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
125 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
126
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
127 return statbuf.st_mtime;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
128 }else{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
129 static assert(0);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
130 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
131 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
132 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
133
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
134 char[] cleanFileName(char[] file){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
135 char[] back;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
136 bool hadSep;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
137
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
138 foreach(char c; file){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
139 if(c == '/' || c == '\\'){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
140 if(!hadSep){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
141 back ~= '/';
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
142 hadSep = true;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
143 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
144 }else{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
145 back ~= c;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
146 hadSep = false;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
147 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
148 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
149
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
150 size_t start = 0;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
151 while(back[start] <= ' ' && start < back.length){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
152 start++;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
153 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
154
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
155 size_t end = back.length-1;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
156 while(back[end] <= ' ' && end >= start){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
157 end--;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
158 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
159
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
160 back = back[start .. end+1];
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
161
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
162 return back;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
163 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
164
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
165 class Test{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
166 char[] name;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
167 char[] file;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
168 Result r;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
169
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
170 this(char[] file){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
171 this.file = file;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
172
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
173 int start = rfind(file, "/");
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
174 if(start<0){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
175 start = 0;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
176 }else{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
177 start += 1;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
178 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
179
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
180 int end = rfind(file, ".");
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
181 if(end < start){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
182 end = file.length;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
183 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
184
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
185 name = file[start .. end];
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
186 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
187 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
188
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
189
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
190 class Log{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
191 Test[char[]] tests;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
192
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
193 char[] id;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
194
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
195 this(char[] id){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
196 this.id = id;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
197 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
198
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
199
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
200 void dropBogusResults(FStime recordTime, char[] testRoot){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
201 uint totalCount = tests.length;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
202
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
203 char[][] sourcesTests = tests.keys;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
204 foreach(char[] source; sourcesTests){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
205 if(find(source, "complex/") < 0){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
206 try{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
207 FStime caseTime = getFStime(testRoot~std.path.sep~source);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
208 if(caseTime > recordTime){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
209 debug(drop) fwritefln(stderr, "dropped: %s", source);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
210 tests.remove(source);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
211 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
212 }catch(Exception e){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
213 debug(drop) fwritefln(stderr, "dropped: %s", source);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
214 tests.remove(source);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
215 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
216 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
217 // asm-filter
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
218 int i = find(source, "asm_p");
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
219 if(i >= 0){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
220 tests.remove(source);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
221 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
222 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
223 tests.rehash;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
224
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
225 writefln("dropped %s outdated tests (%s remaining)", totalCount - tests.length, tests.length);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
226 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
227
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
228
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
229 bool add(char[] line){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
230 const char[] SUB = "Torture-Sub-";
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
231 const char[] TORTURE = "Torture:";
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
232
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
233 line = strip(line);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
234 int id = -1;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
235 Result r = Result.UNTESTED;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
236
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
237 if(line.length > SUB.length && line[0 .. SUB.length] == SUB){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
238 line = line[SUB.length .. $];
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
239 id = 0;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
240 while(line[id] >= '0' && line[id] <= '9'){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
241 id++;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
242 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
243 int start = id;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
244 id = std.conv.toUint(line[0 .. id]);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
245
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
246 while(line[start] != '-'){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
247 start++;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
248 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
249 line = line[start+1 .. $];
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
250 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
251
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
252 char[][] token = split(line);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
253 if(token.length < 2){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
254 return false;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
255 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
256 char[] file = strip(token[1]);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
257
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
258 switch(token[0]){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
259 case "PASS:":
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
260 r = Result.PASS; break;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
261 case "FAIL:":
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
262 r = Result.FAIL; break;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
263 case "XPASS:":
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
264 r = Result.XPASS; break;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
265 case "XFAIL:":
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
266 r = Result.XFAIL; break;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
267 case "ERROR:":
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
268 r = Result.ERROR; break;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
269 default:{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
270 if(token[0] == TORTURE){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
271 throw new Exception("not yet handled: "~line);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
272 }else if(id > -1){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
273 throw new Exception(format("bug in SUB line: (%s) %s", id, line));
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
274 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
275 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
276 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
277
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
278 if(r != Result.UNTESTED){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
279 if(std.string.find(line, "bad error message") > -1){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
280 r |= Result.BAD_MSG;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
281 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
282 if(std.string.find(line, "bad debugger message") > -1){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
283 r |= Result.BAD_MSG;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
284 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
285
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
286 file = cleanFileName(file);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
287
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
288 if(id >= 0){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
289 // update sub
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
290 id--;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
291
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
292 Test* test = file in tests;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
293
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
294 if(test is null){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
295 Test t = new Test(file);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
296 tests[file] = t;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
297 t.r = r;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
298 }else{
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
299 if(test.r != Result.UNTESTED){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
300 test.r = Result.UNTESTED;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
301 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
302 test.r = r;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
303 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
304 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
305 return true;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
306 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
307 return false;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
308 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
309 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
310
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
311
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
312 int main(char[][] args){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
313
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
314 if(args.length < 2){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
315 fwritefln(stderr, "%s <old log> <new log>", args[0]);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
316 return 1;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
317 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
318
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
319
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
320 Log[] logs;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
321
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
322 foreach(size_t id, char[] file; args[1 .. $]){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
323 writefln("parsing: %s", file);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
324 FStime logTime = getFStime(file);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
325 debug fwritefln(stderr, "sourceTime: %s", logTime);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
326
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
327 Log l= new Log(file);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
328 Stream source = new BufferedFile(file, FileMode.In);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
329 while(!source.eof()){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
330 l.add(source.readLine());
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
331 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
332
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
333 l.dropBogusResults(logTime, "dstress");
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
334
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
335 logs ~= l;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
336 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
337
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
338 Log oldLog = logs[0];
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
339 Log newLog = logs[1];
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
340
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
341 foreach(Test t; newLog.tests.values){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
342 Test* oldT = t.file in oldLog.tests;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
343
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
344 if(oldT !is null){
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
345 if(oldT.r == t.r)
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
346 continue;
552
648409a7fb0c Fix findregressions and makewebstatistics to adhere to our definition of
Christian Kamm <kamm incasoftware de>
parents: 186
diff changeset
347 else if(t.r >= Result.XPASS && oldT.r && oldT.r <= Result.XFAIL){
186
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
348 writef("Regression ");
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
349 }
552
648409a7fb0c Fix findregressions and makewebstatistics to adhere to our definition of
Christian Kamm <kamm incasoftware de>
parents: 186
diff changeset
350 else if(t.r && t.r <= Result.XFAIL && oldT.r >= Result.XPASS){
186
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
351 writef("Improvement ");
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
352 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
353 else {
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
354 writef("Change ");
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
355 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
356 writefln(toString(oldT.r), " -> ", toString(t.r), " : ", t.name, " in ", t.file);
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
357 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
358 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
359
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
360
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
361 return 0;
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
362 }
395223f9875e [svn r202] added start of dstress-based test suite to tests/
ChristianK
parents:
diff changeset
363