master
 1const std = @import("std");
 2const builtin = @import("builtin");
 3const expect = std.testing.expect;
 4
 5test "switch simple" {
 6    const a: u64 = 10;
 7    const zz: u64 = 103;
 8
 9    // All branches of a switch expression must be able to be coerced to a
10    // common type.
11    //
12    // Branches cannot fallthrough. If fallthrough behavior is desired, combine
13    // the cases and use an if.
14    const b = switch (a) {
15        // Multiple cases can be combined via a ','
16        1, 2, 3 => 0,
17
18        // Ranges can be specified using the ... syntax. These are inclusive
19        // of both ends.
20        5...100 => 1,
21
22        // Branches can be arbitrarily complex.
23        101 => blk: {
24            const c: u64 = 5;
25            break :blk c * 2 + 1;
26        },
27
28        // Switching on arbitrary expressions is allowed as long as the
29        // expression is known at compile-time.
30        zz => zz,
31        blk: {
32            const d: u32 = 5;
33            const e: u32 = 100;
34            break :blk d + e;
35        } => 107,
36
37        // The else branch catches everything not already captured.
38        // Else branches are mandatory unless the entire range of values
39        // is handled.
40        else => 9,
41    };
42
43    try expect(b == 1);
44}
45
46// Switch expressions can be used outside a function:
47const os_msg = switch (builtin.target.os.tag) {
48    .linux => "we found a linux user",
49    else => "not a linux user",
50};
51
52// Inside a function, switch statements implicitly are compile-time
53// evaluated if the target expression is compile-time known.
54test "switch inside function" {
55    switch (builtin.target.os.tag) {
56        .fuchsia => {
57            // On an OS other than fuchsia, block is not even analyzed,
58            // so this compile error is not triggered.
59            // On fuchsia this compile error would be triggered.
60            @compileError("fuchsia not supported");
61        },
62        else => {},
63    }
64}
65
66// test