Files
2026-08-11 20:38:38 +02:00

94 lines
1.5 KiB
Plaintext

CAP :: 4
LEN :: CAP + 1
Kind :: enum {
circle
square
triangle
}
take_c_int func(value c_int) c_int {
return value
}
take_c_uchar func(value c_uchar) c_uchar {
return value
}
take_c_float func(value c_float) c_float {
return value
}
take_c_double func(value c_double) c_double {
return value
}
take_c_string func(value ?*c_char) i32 {
_ = value
return 0
}
next_kind func(k Kind) Kind {
return match k {
.circle: .square
.square: .triangle
.triangle: .circle
}
}
score_for func(k Kind) i32 {
score :: {
yield match k {
.circle: 1
.square: 2
.triangle: 3
}
}
return score
}
main func() i32 {
items [LEN]mut i32 := undefined
items[0] = 10
items[1] = 20
idx usize := 2
items[idx] = items[0] + items[1]
if (items[2] != 30) return 1
native_i i32 := 12
if (take_c_int(native_i) != 12) return 2
native_u u8 := 7
if (take_c_uchar(native_u) != 7) return 3
native_f f32 := 3.25
cf :: take_c_float(native_f)
if (cf < 3.0 or cf > 4.0) return 4
if (cf == 0.0) return 5
native_d f64 := 5.0
cd :: take_c_double(native_d)
if (cd != 5.0) return 6
as_i32 :: i32(cf)
if (as_i32 != 3) return 7
as_float :: f32(native_i)
if (as_float < 11.5 or as_float > 12.5) return 8
as_c_float :: c_float(as_i32)
if (as_c_float != 3.0) return 9
kind :: next_kind(.circle)
if (kind != .square) return 10
if (score_for(kind) != 2) return 11
label :: match kind {
.circle: "circle"
.square: "square"
.triangle: "triangle"
}
if (take_c_string(label) != 0) return 12
return 0
}