annotate tests/findregressions.d @ 650:aa6a0b7968f7

Added test case for bug #100 Removed dubious check for not emitting static private global in other modules without access. This should be handled properly somewhere else, it's causing unresolved global errors for stuff that should work (in MiniD)
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Sun, 05 Oct 2008 17:28:15 +0200
parents 648409a7fb0c
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