Files
brolang/examples/programs/milestone_39/main.bro
T

130 lines
2.1 KiB
Plaintext

io :: import "@std/io"
process :: import "@std/process"
debug :: import "@std/debug"
State :: enum {
idle
running
}
Payload :: union(enum) {
count i32
empty void
}
Pair :: struct { i32, bool }
Config :: struct {
enabled bool
ratio f64
label []u8
state State
values [2]i32
pair Pair
maybe ?i32
payload Payload
}
Count :: distinct i32
Byte :: distinct u8
Ratio :: distinct f32
Inner :: distinct u32
Outer :: distinct Inner
first Config :: Config {
enabled = true,
ratio = 1.5,
label = "bro",
state = .running,
values = [20, 22],
pair = Pair {7, true},
maybe = 9,
payload = Payload {count = 4},
}
same Config :: Config {
enabled = true,
ratio = 1.5,
label = "bro",
state = .running,
values = [20, 22],
pair = Pair {7, true},
maybe = 9,
payload = Payload {count = 4},
}
different Config :: Config {
enabled = false,
ratio = 2.5,
label = "bro",
state = .idle,
values = [21, 21],
pair = Pair {7, false},
maybe = null,
payload = .empty,
}
score func($config Config) i32 {
return config.values[0]
}
Carrier func($config Config) type {
return struct { value i32 }
}
read_carrier func($config Config, carrier Carrier(config)) i32 {
return carrier.value + config.values[0]
}
main func(init process.Init) i32 {
if score(first) != 20 or score(same) != 20 or score(different) != 21 {
return 1
}
carrier Carrier(first) :: Carrier(first) {value = 22}
if read_carrier(carrier) != 42 {
return 2
}
writer io.Writer :: io.stdout(init.io)
positive f64 = 1.0
zero f64 = 0.0
infinity f64 :: positive / zero
nan f64 :: zero / zero
io.print(writer, "{} {} {} {} {s} {d} {b} {o} {x} {X} {c} {e} {{}} {d} {b} {} {} {e}\n", {
true,
-42,
1.5,
State.running,
"bro",
2.5,
10,
10,
255,
255,
u8('A'),
1.5,
minval!(i64),
u64(0),
infinity,
nan,
f32(1.5),
}) catch |_| {
return 3
}
io.print(writer, "{} {d} {b} {o} {x} {X} {c} {e} {}\n", {
Count(i32(-42)),
Count(i32(-42)),
Byte(u8(10)),
Byte(u8(10)),
Byte(u8(255)),
Byte(u8(255)),
Byte(u8('A')),
Ratio(f32(1.5)),
Outer(Inner(u32(7))),
}) catch |_| {
return 4
}
debug.print("debug={} {x}\n", {State.idle, 42})
return 0
}