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