| 1 | // The series of i?_test.v files, do test different edge cases for |
| 2 | // interface table generation. The differences may seem very minor |
| 3 | // (placement of the interface declaration, whether or not there are |
| 4 | // helper methods, etc), but PLEASE do NOT be tempted to merge them in |
| 5 | // a single _test.v file. Debugging interface code generation issues |
| 6 | // is *much easier* when the _test.v files are very short and focused. |
| 7 | struct Point { |
| 8 | x int |
| 9 | y int |
| 10 | } |
| 11 | |
| 12 | fn (p Point) draw() string { |
| 13 | return 'Point(${p.x},${p.y})' |
| 14 | } |
| 15 | |
| 16 | interface Drawer { |
| 17 | draw() string |
| 18 | } |
| 19 | |
| 20 | fn to_string(d Drawer) string { |
| 21 | return d.draw() |
| 22 | } |
| 23 | |
| 24 | fn test_p_draw_can_be_called() { |
| 25 | p := Point{ |
| 26 | x: 2 |
| 27 | y: 3 |
| 28 | } |
| 29 | res := p.draw() |
| 30 | assert res == 'Point(2,3)' |
| 31 | } |
| 32 | |