master
 1// Top-level declarations are order-independent:
 2const print = std.debug.print;
 3const std = @import("std");
 4const os = std.os;
 5const assert = std.debug.assert;
 6
 7// Custom error set definition:
 8const ExampleErrorSet = error{
 9    ExampleErrorVariant,
10};
11
12pub fn main() void {
13    // integers
14    const one_plus_one: i32 = 1 + 1;
15    print("1 + 1 = {}\n", .{one_plus_one});
16
17    // floats
18    const seven_div_three: f32 = 7.0 / 3.0;
19    print("7.0 / 3.0 = {}\n", .{seven_div_three});
20
21    // boolean
22    print("{}\n{}\n{}\n", .{
23        true and false,
24        true or false,
25        !true,
26    });
27
28    // optional
29    var optional_value: ?[]const u8 = null;
30    assert(optional_value == null);
31
32    print("\noptional 1\ntype: {}\nvalue: {?s}\n", .{
33        @TypeOf(optional_value), optional_value,
34    });
35
36    optional_value = "hi";
37    assert(optional_value != null);
38
39    print("\noptional 2\ntype: {}\nvalue: {?s}\n", .{
40        @TypeOf(optional_value), optional_value,
41    });
42
43    // error union
44    var number_or_error: ExampleErrorSet!i32 = ExampleErrorSet.ExampleErrorVariant;
45
46    print("\nerror union 1\ntype: {}\nvalue: {!}\n", .{
47        @TypeOf(number_or_error),
48        number_or_error,
49    });
50
51    number_or_error = 1234;
52
53    print("\nerror union 2\ntype: {}\nvalue: {!}\n", .{
54        @TypeOf(number_or_error), number_or_error,
55    });
56}
57
58// exe=succeed