aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authoralexander <justin.b.alexander1@gmail.com>2018-12-27 13:46:32 -0600
committeralexander <justin.b.alexander1@gmail.com>2018-12-27 13:46:32 -0600
commit64061cc1bfb8e925d20f5824aa178b61eb2e5f11 (patch)
tree0a295c4828194b9569600d956f1373de615cdab3 /test
parent4a1f0e141893fe56f540709c8fb12b8b8dc22218 (diff)
downloadzig-64061cc1bfb8e925d20f5824aa178b61eb2e5f11.tar.gz
zig-64061cc1bfb8e925d20f5824aa178b61eb2e5f11.zip
Test cases for compiler error and working behavior for switching on booleans
Diffstat (limited to 'test')
-rw-r--r--test/cases/switch.zig37
-rw-r--r--test/compile_errors.zig38
2 files changed, 75 insertions, 0 deletions
diff --git a/test/cases/switch.zig b/test/cases/switch.zig
index d5258f0bb1..1162fdd4b2 100644
--- a/test/cases/switch.zig
+++ b/test/cases/switch.zig
@@ -232,3 +232,40 @@ test "capture value of switch with all unreachable prongs" {
};
assert(x == 1);
}
+
+test "switching on booleans" {
+ testSwitchOnBools();
+ comptime testSwitchOnBools();
+}
+
+fn testSwitchOnBools() void {
+ assert(testSwitchOnBoolsTrueAndFalse(true) == false);
+ assert(testSwitchOnBoolsTrueAndFalse(false) == true);
+
+ assert(testSwitchOnBoolsTrueWithElse(true) == false);
+ assert(testSwitchOnBoolsTrueWithElse(false) == true);
+
+ assert(testSwitchOnBoolsFalseWithElse(true) == false);
+ assert(testSwitchOnBoolsFalseWithElse(false) == true);
+}
+
+fn testSwitchOnBoolsTrueAndFalse(x: bool) bool {
+ return switch (x) {
+ true => false,
+ false => true,
+ };
+}
+
+fn testSwitchOnBoolsTrueWithElse(x: bool) bool {
+ return switch (x) {
+ true => false,
+ else => true,
+ };
+}
+
+fn testSwitchOnBoolsFalseWithElse(x: bool) bool {
+ return switch (x) {
+ false => true,
+ else => false,
+ };
+}
diff --git a/test/compile_errors.zig b/test/compile_errors.zig
index ee3741ee6b..880a96a322 100644
--- a/test/compile_errors.zig
+++ b/test/compile_errors.zig
@@ -2,6 +2,44 @@ const tests = @import("tests.zig");
pub fn addCases(cases: *tests.CompileErrorContext) void {
cases.add(
+ "duplicate boolean switch value",
+ \\comptime {
+ \\ const x = switch (true) {
+ \\ true => false,
+ \\ false => true,
+ \\ true => false,
+ \\ };
+ \\}
+ \\comptime {
+ \\ const x = switch (true) {
+ \\ false => true,
+ \\ true => false,
+ \\ false => true,
+ \\ };
+ \\}
+ ,
+ ".tmp_source.zig:5:9: error: duplicate switch value",
+ ".tmp_source.zig:12:9: error: duplicate switch value",
+ );
+
+ cases.add(
+ "missing boolean switch value",
+ \\comptime {
+ \\ const x = switch (true) {
+ \\ true => false,
+ \\ };
+ \\}
+ \\comptime {
+ \\ const x = switch (true) {
+ \\ false => true,
+ \\ };
+ \\}
+ ,
+ ".tmp_source.zig:2:15: error: switch must handle all possibilities",
+ ".tmp_source.zig:7:15: error: switch must handle all possibilities",
+ );
+
+ cases.add(
"reading past end of pointer casted array",
\\comptime {
\\ const array = "aoeu";