v2 / vlib / v / tests / options / option_fixed_array_2_test.v
52 lines · 44 sloc · 854 bytes · 2fbb3df9fa97168d52bf40bd62605ee4b19c7fc4
Raw
1module main
2
3import encoding.binary
4
5type Addr = [4]u8
6
7fn Addr.from_u32(a u32) Addr {
8 mut bytes := [4]u8{}
9 binary.big_endian_put_u32_fixed(mut bytes, a)
10 return Addr(bytes)
11}
12
13fn (a Addr) str() string {
14 return '${a[0]}.${a[1]}.${a[2]}.${a[3]}'
15}
16
17fn (a Addr) u32() u32 {
18 return binary.big_endian_u32_fixed(a)
19}
20
21struct Net {
22 netaddr Addr
23 broadcast Addr
24mut:
25 h u32
26}
27
28fn (mut n Net) next() ?Addr {
29 if n.h >= n.broadcast.u32() + 1 {
30 return none
31 }
32 defer {
33 n.h++
34 }
35 return Addr.from_u32(n.h)
36}
37
38fn test_main() {
39 net := Net{
40 netaddr: Addr([u8(172), 16, 16, 0]!)
41 broadcast: Addr([u8(172), 16, 16, 3]!)
42 h: u32(2886733824)
43 }
44 mut rets := []string{}
45 for addr in net {
46 rets << addr.str()
47 }
48 assert rets[0] == '172.16.16.0'
49 assert rets[1] == '172.16.16.1'
50 assert rets[2] == '172.16.16.2'
51 assert rets[3] == '172.16.16.3'
52}
53