struct Dog {
	breed string
}

struct Cat {
	breed string
}

interface Animal {
	breed string
}

fn test_auto_str_gen_for_interfaces() {
	x := Animal(Cat{'Siamese'})
	assert '${x}' == "
Animal(Cat{
    breed: 'Siamese'
})
".trim_space()
}

struct Holder {
	x Animal
}

struct Holder2 {
	x     map[string]Holder
	breed string
}

fn test_auto_str_gen_for_complex_interface_types() {
	a := Animal(Dog{'hi'})
	h := Holder{a}
	m := {
		'dsa': h
	}
	h2 := Holder2{m, 'N/A'}
	a2 := Animal(h2)

	assert '${a2}' == r"
Animal(Holder2{
    x: {'dsa': Holder{
        x: Animal(Dog{
            breed: 'hi'
        })
    }}
    breed: 'N/A'
})
	".trim_space()
}
