aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2019-05-10 16:03:54 -0400
committerAndrew Kelley <andrew@ziglang.org>2019-05-10 16:03:54 -0400
commita6f7a9ce2b008ff66ab32c8162d64dd77ffe952f (patch)
tree7e0f1e80cabf9e2869949035aa5ff95e06749d4c /test
parentd065f297ab6de5ca35636d169195ce5da6235786 (diff)
downloadzig-a6f7a9ce2b008ff66ab32c8162d64dd77ffe952f.tar.gz
zig-a6f7a9ce2b008ff66ab32c8162d64dd77ffe952f.zip
translate-c: we have our first test of self-hosted
See #1964
Diffstat (limited to 'test')
-rw-r--r--test/tests.zig28
-rw-r--r--test/translate_c.zig6
2 files changed, 32 insertions, 2 deletions
diff --git a/test/tests.zig b/test/tests.zig
index 61fd0426f1..fec6a294ff 100644
--- a/test/tests.zig
+++ b/test/tests.zig
@@ -903,6 +903,7 @@ pub const TranslateCContext = struct {
sources: ArrayList(SourceFile),
expected_lines: ArrayList([]const u8),
allow_warnings: bool,
+ stage2: bool,
const SourceFile = struct {
filename: []const u8,
@@ -955,7 +956,8 @@ pub const TranslateCContext = struct {
var zig_args = ArrayList([]const u8).init(b.allocator);
zig_args.append(b.zig_exe) catch unreachable;
- zig_args.append("translate-c") catch unreachable;
+ const translate_c_cmd = if (self.case.stage2) "translate-c-2" else "translate-c";
+ zig_args.append(translate_c_cmd) catch unreachable;
zig_args.append(b.pathFromRoot(root_src)) catch unreachable;
warn("Test {}/{} {}...", self.test_index + 1, self.context.test_index, self.name);
@@ -1052,6 +1054,7 @@ pub const TranslateCContext = struct {
.sources = ArrayList(TestCase.SourceFile).init(self.b.allocator),
.expected_lines = ArrayList([]const u8).init(self.b.allocator),
.allow_warnings = allow_warnings,
+ .stage2 = false,
};
tc.addSourceFile(filename, source);
@@ -1072,6 +1075,26 @@ pub const TranslateCContext = struct {
self.addCase(tc);
}
+ pub fn add_both(self: *TranslateCContext, name: []const u8, source: []const u8, expected_lines: ...) void {
+ for ([]bool{ false, true }) |stage2| {
+ const tc = self.create(false, "source.c", name, source, expected_lines);
+ tc.stage2 = stage2;
+ self.addCase(tc);
+ }
+ }
+
+ pub fn add_2(self: *TranslateCContext, name: []const u8, source: []const u8, expected_lines: ...) void {
+ const tc = self.create(false, "source.c", name, source, expected_lines);
+ tc.stage2 = true;
+ self.addCase(tc);
+ }
+
+ pub fn addC_2(self: *TranslateCContext, name: []const u8, source: []const u8, expected_lines: ...) void {
+ const tc = self.create(false, "source.c", name, source, expected_lines);
+ tc.stage2 = true;
+ self.addCase(tc);
+ }
+
pub fn addAllowWarnings(self: *TranslateCContext, name: []const u8, source: []const u8, expected_lines: ...) void {
const tc = self.create(true, "source.h", name, source, expected_lines);
self.addCase(tc);
@@ -1080,7 +1103,8 @@ pub const TranslateCContext = struct {
pub fn addCase(self: *TranslateCContext, case: *const TestCase) void {
const b = self.b;
- const annotated_case_name = fmt.allocPrint(self.b.allocator, "translate-c {}", case.name) catch unreachable;
+ const translate_c_cmd = if (case.stage2) "translate-c-2" else "translate-c";
+ const annotated_case_name = fmt.allocPrint(self.b.allocator, "{} {}", translate_c_cmd, case.name) catch unreachable;
if (self.test_filter) |filter| {
if (mem.indexOf(u8, annotated_case_name, filter) == null) return;
}
diff --git a/test/translate_c.zig b/test/translate_c.zig
index 8ad1583396..762b28e3aa 100644
--- a/test/translate_c.zig
+++ b/test/translate_c.zig
@@ -2,6 +2,12 @@ const tests = @import("tests.zig");
const builtin = @import("builtin");
pub fn addCases(cases: *tests.TranslateCContext) void {
+ cases.add_both("simple noreturn fn",
+ \\void __attribute__((noreturn)) foo(void);
+ ,
+ \\extern fn foo() noreturn;
+ );
+
cases.add("macro with left shift",
\\#define REDISMODULE_READ (1<<0)
,