Merge pull request #166 from vibe-d/update_compiler_support

Update to DMD 2.087.0 and LDC 1.6.0.
merged-on-behalf-of: Leonid Kramer <l-kramer@users.noreply.github.com>
This commit is contained in:
The Dlang Bot 2019-08-24 11:34:26 +02:00 committed by GitHub
commit beac700a5b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 158 additions and 176 deletions

View file

@ -5,20 +5,16 @@ d:
# this way the overall test time gets cut down (GDC/LDC are a lot # this way the overall test time gets cut down (GDC/LDC are a lot
# slower tham DMD, so they should be started early), while still # slower tham DMD, so they should be started early), while still
# catching most DMD version related build failures early # catching most DMD version related build failures early
- dmd-2.086.0 - dmd-2.087.1
- dmd-2.078.3 - dmd-2.078.3
- ldc-1.16.0
- ldc-1.15.0
- ldc-1.14.0
- ldc-1.13.0 - ldc-1.13.0
- ldc-1.12.0
- ldc-1.11.0
- ldc-1.10.0
- ldc-1.9.0 - ldc-1.9.0
- ldc-1.8.0 - dmd-2.086.1
- dmd-2.085.1 - dmd-2.085.1
- dmd-2.084.1 - dmd-2.084.1
- dmd-2.083.1
- dmd-2.082.1
- dmd-2.081.2
- dmd-2.080.1
- dmd-2.079.0 - dmd-2.079.0
- dmd-beta - dmd-beta

View file

@ -26,22 +26,19 @@ Supported compilers
The following compilers are tested and supported: The following compilers are tested and supported:
- DMD 2.086.0 - DMD 2.087.1
- DMD 2.086.1
- DMD 2.085.1 - DMD 2.085.1
- DMD 2.084.1 - DMD 2.084.1
- DMD 2.083.1
- DMD 2.082.1
- DMD 2.081.2
- DMD 2.080.1
- DMD 2.079.0 - DMD 2.079.0
- DMD 2.078.3 - LDC 1.16.0
- LDC 1.15.0 - LDC 1.15.0
- LDC 1.14.0 - LDC 1.14.0
- LDC 1.13.0 - LDC 1.13.0
- LDC 1.12.0
- LDC 1.11.0
- LDC 1.10.0
- LDC 1.9.0 - LDC 1.9.0
Supported up to 1.6.2:
- DMD 2.078.3
- LDC 1.8.0 - LDC 1.8.0
Supported up to 1.4.7: Supported up to 1.4.7:

View file

@ -2,37 +2,28 @@ platform: x64
environment: environment:
matrix: matrix:
- DC: dmd - DC: dmd
DVersion: 2.086.0 DVersion: 2.087.1
arch: x64 arch: x64
- DC: dmd - DC: dmd
DVersion: 2.086.0 DVersion: 2.087.1
arch: x86 arch: x86
- DC: dmd - DC: dmd
DVersion: 2.086.0 DVersion: 2.087.1
arch: x86_mscoff arch: x86_mscoff
- DC: dmd
DVersion: 2.086.1
arch: x64
- DC: dmd - DC: dmd
DVersion: 2.085.1 DVersion: 2.085.1
arch: x64 arch: x64
- DC: dmd - DC: dmd
DVersion: 2.084.1 DVersion: 2.084.1
arch: x86 arch: x86
- DC: dmd
DVersion: 2.083.1
arch: x86_mscoff
- DC: dmd
DVersion: 2.082.1
arch: x86_mscoff
- DC: dmd
DVersion: 2.081.2
arch: x86_mscoff
- DC: dmd
DVersion: 2.080.1
arch: x86_mscoff
- DC: dmd - DC: dmd
DVersion: 2.079.0 DVersion: 2.079.0
arch: x86_mscoff arch: x86_mscoff
- DC: dmd - DC: ldc
DVersion: 2.078.3 DVersion: 1.16.0
arch: x64 arch: x64
- DC: ldc - DC: ldc
DVersion: 1.15.0 DVersion: 1.15.0
@ -43,21 +34,9 @@ environment:
- DC: ldc - DC: ldc
DVersion: 1.13.0 DVersion: 1.13.0
arch: x64 arch: x64
- DC: ldc
DVersion: 1.12.0
arch: x64
- DC: ldc
DVersion: 1.11.0
arch: x64
- DC: ldc
DVersion: 1.10.0
arch: x64
- DC: ldc - DC: ldc
DVersion: 1.9.0 DVersion: 1.9.0
arch: x64 arch: x64
- DC: ldc
DVersion: 1.8.0
arch: x64
skip_tags: false skip_tags: false

View file

@ -9,201 +9,211 @@ import core.thread;
import vibe.core.log; import vibe.core.log;
import vibe.core.core; import vibe.core.core;
import vibe.core.process; import vibe.core.process;
import std.algorithm;
import std.array; import std.array;
import std.range; import std.range;
import std.algorithm;
void testEcho() void testEcho()
{ {
foreach (i; 0..100) { foreach (i; 0..100) {
auto procPipes = pipeProcess(["echo", "foo bar"], Redirect.stdout); auto procPipes = pipeProcess(["echo", "foo bar"], Redirect.stdout);
assert(!procPipes.process.exited); auto output = procPipes.stdout.collectOutput();
auto output = procPipes.stdout.collectOutput(); assert(procPipes.process.wait() == 0);
assert(procPipes.process.exited);
assert(procPipes.process.wait() == 0); assert(output == "foo bar\n");
assert(procPipes.process.exited); }
assert(output == "foo bar\n");
}
} }
void testCat() void testCat()
{ {
auto procPipes = pipeProcess(["cat"]); auto procPipes = pipeProcess(["cat"]);
string output; string output;
auto outputTask = runTask({ auto outputTask = runTask({
output = procPipes.stdout.collectOutput(); output = procPipes.stdout.collectOutput();
}); });
auto inputs = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] auto inputs = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
.map!(s => s ~ "\n") .map!(s => s ~ "\n")
.repeat(4000).join.array; .repeat(4000).join.array;
foreach (input; inputs) { foreach (input; inputs) {
procPipes.stdin.write(input); procPipes.stdin.write(input);
} }
procPipes.stdin.close(); procPipes.stdin.close();
assert(procPipes.process.wait() == 0); assert(procPipes.process.wait() == 0);
outputTask.join(); outputTask.join();
assert(output == inputs.join()); assert(output == inputs.join());
} }
void testStderr() void testStderr()
{ {
auto program = q{ auto program = q{
foreach (line; stdin.byLine()) foreach (line; stdin.byLine())
stderr.writeln(line); stderr.writeln(line);
}; };
auto procPipes = pipeProcess(["rdmd", "--eval", program], Redirect.stdin | Redirect.stderr); auto procPipes = pipeProcess(["rdmd", "--eval", program], Redirect.stdin | Redirect.stderr);
// Wait for rdmd to compile // Wait for rdmd to compile
sleep(3.seconds); sleep(3.seconds);
string output; string output;
auto outputTask = runTask({ auto outputTask = runTask({
output = procPipes.stderr.collectOutput(); output = procPipes.stderr.collectOutput();
}); });
auto inputs = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"] auto inputs = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
.map!(s => s ~ "\n") .map!(s => s ~ "\n")
.repeat(4000).join.array; .repeat(4000).join.array;
foreach (input; inputs) { foreach (input; inputs) {
procPipes.stdin.write(input); procPipes.stdin.write(input);
} }
procPipes.stdin.close(); procPipes.stdin.close();
assert(procPipes.process.wait() == 0); assert(procPipes.process.wait() == 0);
outputTask.join(); outputTask.join();
assert(output == inputs.join); assert(output == inputs.join);
} }
void testRandomDeath() void testRandomDeath()
{ {
auto program = q{ auto program = q{
import core.thread; import core.thread;
import std.random; import std.random;
Thread.sleep(dur!"msecs"(uniform(0, 1000))); Thread.sleep(dur!"msecs"(uniform(0, 1000)));
}; };
// Prime rdmd // Prime rdmd
execute(["rdmd", "--eval", program]); execute(["rdmd", "--eval", program]);
foreach (i; 0..20) { foreach (i; 0..20) {
auto process = spawnProcess(["rdmd", "--eval", program]); auto process = spawnProcess(["rdmd", "--eval", program]);
assert(!process.exited); assert(!process.exited);
sleep(800.msecs); sleep(800.msecs);
try { try {
process.kill(); process.kill();
} catch (Exception e) {} } catch (Exception e) {
process.wait(); }
process.wait();
assert(process.exited); assert(process.exited);
} }
} }
void testIgnoreSigterm() void testIgnoreSigterm()
{ {
auto program = q{ auto program = q{
import core.thread; import core.thread;
import core.sys.posix.signal; import core.sys.posix.signal;
signal(SIGINT, SIG_IGN); signal(SIGINT, SIG_IGN);
signal(SIGTERM, SIG_IGN); signal(SIGTERM, SIG_IGN);
foreach (line; stdin.byLine()) { foreach (line; stdin.byLine()) {
writeln(line); writeln(line);
stdout.flush(); stdout.flush();
} }
// Zombie // Zombie
while (true) Thread.sleep(100.dur!"msecs"); while (true) Thread.sleep(100.dur!"msecs");
}; };
auto procPipes = pipeProcess( auto procPipes = pipeProcess(
["rdmd", "--eval", program], ["rdmd", "--eval", program],
Redirect.stdin | Redirect.stdout | Redirect.stderrToStdout); Redirect.stdin | Redirect.stdout | Redirect.stderrToStdout);
string output; string output;
auto outputTask = runTask({ auto outputTask = runTask({
output = procPipes.stdout.collectOutput(); output = procPipes.stdout.collectOutput();
}); });
assert(!procPipes.process.exited); assert(!procPipes.process.exited);
// Give the program some time to compile and install the signal handler // Give the program some time to compile and install the signal handler
sleep(4.seconds); sleep(4.seconds);
procPipes.process.kill(); procPipes.process.kill();
procPipes.stdin.write("foo\n"); procPipes.stdin.write("foo\n");
assert(!procPipes.process.exited); assert(!procPipes.process.exited);
assert(procPipes.process.waitOrForceKill(2.seconds) == 9); assert(procPipes.process.waitOrForceKill(2.seconds) == -9);
assert(procPipes.process.exited); assert(procPipes.process.exited);
outputTask.join(); outputTask.join();
assert(output == "foo\n"); assert(output == "foo\n");
} }
void testSimpleShell() void testSimpleShell()
{ {
auto res = executeShell("echo foo"); auto res = executeShell("echo foo");
assert(res.status == 0); assert(res.status == 0);
assert(res.output == "foo\n"); assert(res.output == "foo\n");
} }
void testLineEndings() void testLineEndings()
{ {
auto program = q{ auto program = q{
write("linux\n"); write("linux\n");
write("os9\r"); write("os9\r");
write("win\r\n"); write("win\r\n");
}; };
auto res = execute(["rdmd", "--eval", program]); auto res = execute(["rdmd", "--eval", program]);
assert(res.status == 0); assert(res.status == 0);
assert(res.output == "linux\nos9\rwin\r\n"); assert(res.output == "linux\nos9\rwin\r\n");
} }
void main() void main()
{ {
// rdmd --eval is only supported in versions >= 2.080 import core.stdc.stdlib : abort;
static if (__VERSION__ >= 2080) { import core.time;
runTask({ import std.meta : AliasSeq;
auto tasks = [
&testEcho,
&testCat,
&testStderr,
&testRandomDeath,
&testIgnoreSigterm,
&testSimpleShell,
&testLineEndings,
].map!(fn => runTask({
try {
fn();
} catch (Exception e) {
logError("%s", e);
throw e;
}
}));
foreach (task; tasks) { // rdmd --eval is only supported in versions >= 2.080
task.join(); static if (__VERSION__ >= 2080) {
} runTask({
alias Tasks = AliasSeq!(
testEcho,
testCat,
testStderr,
testRandomDeath,
testIgnoreSigterm,
testSimpleShell,
testLineEndings
);
exitEventLoop(); static foreach (alias task; Tasks) {{
}); auto t = runTask({
logInfo("Running test %s...", __traits(identifier, task));
auto tm = setTimer(60.seconds, {
logError("Test %s timed out!", __traits(identifier, task));
abort();
});
try {
task();
} catch (Exception e) {
logError("Test %s failed: %s", __traits(identifier, task), e);
abort();
}
tm.stop();
});
t.join();
}}
runEventLoop(); exitEventLoop();
} });
runEventLoop();
}
} }