// struct_types.vr — declared struct field types, validated by the checker. // // vr run examples/struct_types.vr // vr test examples/struct_types.vr struct Point { x int y int } struct Named { name string tag ?string origin Point } enum Color { red green blue } struct Painted { c Color } struct Wrapper { pt Point items array ratio float ok bool } fn test_typed_struct_basics() { let p = Point{ x: 3, y: 4 } assert p.x == 3 assert p.y == 4 mut q = Point{ x: 1, y: 2 } q.x = 10 assert q.x + q.y == 12 } fn test_optional_and_nested() { let a = Named{ name: "amy", tag: "admin", origin: Point{ x: 1, y: 2 } } assert a.name == "amy" assert a.tag == "admin" assert a.origin.x == 1 let b = Named{ name: "bo", tag: none, origin: Point{ x: 0, y: 0 } } assert b.tag == none // ints widen to float fields let w = Wrapper{ pt: Point{ x: 5, y: 6 }, items: [1, 2], ratio: 2, ok: true } assert w.ratio == 2.0 and w.pt.y == 6 } fn test_enum_field() { let p = Painted{ c: Color.green } assert p.c == Color.green } fn main() { let p = Point{ x: 3, y: 4 } println(p.x + p.y) let n = Named{ name: "vuurraaf", tag: none, origin: p } println(n.name + " y=" + n.origin.y) }