v2 / vlib / v / tests / builtin_arrays / array_init_with_fields_test.v
63 lines · 56 sloc · 1.13 KB · 6488041a749df9762348d019c4223908c476f2e2
Raw
1import datatypes
2
3struct Fluid[T] {
4mut:
5 elements datatypes.Queue[T]
6 switch bool // 0 by default
7 selements datatypes.Stack[T]
8}
9
10fn (mut fluid Fluid[T]) push(item T) {
11 if fluid.switch {
12 fluid.selements.push(item)
13 } else {
14 fluid.elements.push(item)
15 }
16}
17
18fn (mut fluid Fluid[T]) pop() !T {
19 if fluid.switch {
20 return fluid.selements.pop()!
21 } else {
22 return fluid.elements.pop()!
23 }
24}
25
26fn (fluid Fluid[T]) str() string {
27 if fluid.switch {
28 return fluid.selements.str()
29 } else {
30 return fluid.elements.str()
31 }
32}
33
34fn (fluid Fluid[T]) peek() !T {
35 if fluid.switch {
36 return fluid.selements.peek()!
37 } else {
38 return fluid.elements.peek()!
39 }
40}
41
42// this function converts queue to stack
43fn (mut fluid Fluid[T]) to_stack() !bool {
44 if !fluid.switch {
45 // convert queue to stack
46 for i in 1 .. fluid.elements.len() + 1 {
47 fluid.selements.push(fluid.elements.index(fluid.elements.len() - i)!)
48 }
49 fluid.switch = true
50 }
51 return true
52}
53
54fn test_array_init_with_fields() {
55 mut arr := []Fluid[string]{len: 10}
56 for i in 0 .. arr.len {
57 // add str to queue
58 arr[i].push('${10 + i}')
59 }
60 println(arr)
61 ret := arr[1].to_stack()!
62 assert ret
63}
64