1module main
2
3struct Anything {
4mut:
5	name  string = ''
6	keepo int = 0
7}
8
9fn (a Anything) str() string {
10	return a.name
11}
12
13fn test_array_of_ptrs_to_structs_can_be_printed() {
14	mut testing := []&Anything{}
15	testing << &Anything{
16		name: 'Hehe'
17	}
18	testing << &Anything{
19		name: 'other'
20	}
21	testing << &Anything{
22		name: 'test'
23	}
24	for test in testing {
25		println(test)
26		assert true
27	}
28	println('testing: $testing')
29	println(testing)
30	assert true
31}
32
33// At the same time, this should also work:
34// (note the str method defined on (a &T), instead on (a T))
35struct PstrAnything {
36mut:
37	name  string = ''
38	keepo int = 0
39}
40
41fn (a &PstrAnything) str() string {
42	return a.name
43}
44
45fn test_array_of_ptrs_to_structs_can_be_printed_when_structs_have_str_with_ptr() {
46	mut testing := []&PstrAnything{}
47	testing << &PstrAnything{
48		name: 'abc'
49	}
50	testing << &PstrAnything{
51		name: 'def'
52	}
53	testing << &PstrAnything{
54		name: 'ghi'
55	}
56	for test in testing {
57		println(test)
58		assert true
59	}
60	println('testing: $testing')
61	println(testing)
62	assert true
63}
64
65//
66fn test_stack_array_of_structs_can_be_printed_when_structs_have_ordinary_str() {
67	mut t := [3]Anything
68	t[0] = Anything{
69		name: '012'
70	}
71	t[1] = Anything{
72		name: '345'
73	}
74	t[2] = Anything{
75		name: '678'
76	}
77	for test in t {
78		println(test)
79		assert true
80	}
81	println('t: $t')
82	println(t)
83	println('t[0] := ${t[0]}')
84	assert true
85}
86
87fn test_stack_array_of_structs_can_be_printed_when_structs_have_str_with_ptr() {
88	// this generates a C error
89	mut pt := [3]PstrAnything
90	pt[0] = PstrAnything{
91		name: 'P012'
92	}
93	pt[1] = PstrAnything{
94		name: 'P345'
95	}
96	pt[2] = PstrAnything{
97		name: 'P678'
98	}
99	for test in pt {
100		println(test)
101		assert true
102	}
103	println('pt: $pt')
104	println(pt)
105	print('pt[0] := ')
106	print(pt[0])
107	println('')
108	assert true
109	$if debug_buggy_println ? {
110		// TODO: fix string interpolation for structs with `fn (t &T) str() string` too:
111		println('pt[0] := ${pt[0]}')
112	}
113}
114