Commit 78b753af9d

Andrew Kelley <superjoe30@gmail.com>
2017-10-16 06:20:51
fix debug safety tests on windows
See #302
1 parent d6bfa3f
Changed files (2)
test/debug_safety.zig
@@ -3,8 +3,7 @@ const tests = @import("tests.zig");
 pub fn addCases(cases: &tests.CompareOutputContext) {
     cases.addDebugSafety("calling panic",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\pub fn main() -> %void {
         \\    @panic("oh no");
@@ -13,8 +12,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("out of bounds slice access",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\pub fn main() -> %void {
         \\    const a = []i32{1, 2, 3, 4};
@@ -28,8 +26,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("integer addition overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -43,8 +40,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("integer subtraction overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -58,8 +54,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("integer multiplication overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -73,8 +68,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("integer negation overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -88,8 +82,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("signed integer division overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -103,8 +96,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("signed shift left overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -118,8 +110,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("unsigned shift left overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -133,8 +124,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("signed shift right overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -148,8 +138,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("unsigned shift right overflow",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -163,8 +152,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("integer division by zero",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -177,8 +165,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("exact division failure",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -192,8 +179,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("cast []u8 to bigger slice of wrong size",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -207,8 +193,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("value does not fit in shortening cast",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -222,8 +207,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("signed integer not fitting in cast to unsigned integer",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -237,8 +221,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("unwrap error",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Whatever;
         \\pub fn main() -> %void {
@@ -251,8 +234,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("cast integer to error and no code matches",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\pub fn main() -> %void {
         \\    _ = bar(9999);
@@ -264,8 +246,7 @@ pub fn addCases(cases: &tests.CompareOutputContext) {
 
     cases.addDebugSafety("@alignCast misaligned",
         \\pub fn panic(message: []const u8) -> noreturn {
-        \\    @breakpoint();
-        \\    while (true) {}
+        \\    @import("std").os.exit(126);
         \\}
         \\error Wrong;
         \\pub fn main() -> %void {
test/tests.zig
@@ -324,23 +324,23 @@ pub const CompareOutputContext = struct {
                 debug.panic("Unable to spawn {}: {}\n", full_exe_path, @errorName(err));
             };
 
-            const debug_trap_signal: i32 = 5;
+            const expected_exit_code: i32 = 126;
             switch (term) {
                 Term.Exited => |code| {
-                    %%io.stderr.printf("\nProgram expected to hit debug trap (signal {}) " ++
-                        "but exited with return code {}\n", debug_trap_signal, code);
-                    return error.TestFailed;
-                },
-                Term.Signal => |sig| {
-                    if (sig != debug_trap_signal) {
-                        %%io.stderr.printf("\nProgram expected to hit debug trap (signal {}) " ++
-                            "but instead signaled {}\n", debug_trap_signal, sig);
+                    if (code != expected_exit_code) {
+                        %%io.stderr.printf("\nProgram expected to exit with code {} " ++
+                            "but exited with code {}\n", expected_exit_code, code);
                         return error.TestFailed;
                     }
                 },
+                Term.Signal => |sig| {
+                    %%io.stderr.printf("\nProgram expected to exit with code {} " ++
+                        "but instead signaled {}\n", expected_exit_code, sig);
+                    return error.TestFailed;
+                },
                 else => {
-                    %%io.stderr.printf("\nProgram expected to hit debug trap (signal {}) " ++
-                        " but exited in an unexpected way\n", debug_trap_signal);
+                    %%io.stderr.printf("\nProgram expected to exit with code {}" ++
+                        " but exited in an unexpected way\n", expected_exit_code);
                     return error.TestFailed;
                 },
             }