114299Sbbruce@ucdavis.edufrom pybind11_tests import tagbased_polymorphic as m
214299Sbbruce@ucdavis.edu
314299Sbbruce@ucdavis.edu
414299Sbbruce@ucdavis.edudef test_downcast():
514299Sbbruce@ucdavis.edu    zoo = m.create_zoo()
614299Sbbruce@ucdavis.edu    assert [type(animal) for animal in zoo] == [
714299Sbbruce@ucdavis.edu        m.Labrador, m.Dog, m.Chihuahua, m.Cat, m.Panther
814299Sbbruce@ucdavis.edu    ]
914299Sbbruce@ucdavis.edu    assert [animal.name for animal in zoo] == [
1014299Sbbruce@ucdavis.edu        "Fido", "Ginger", "Hertzl", "Tiger", "Leo"
1114299Sbbruce@ucdavis.edu    ]
1214299Sbbruce@ucdavis.edu    zoo[1].sound = "woooooo"
1314299Sbbruce@ucdavis.edu    assert [dog.bark() for dog in zoo[:3]] == [
1414299Sbbruce@ucdavis.edu        "Labrador Fido goes WOOF!",
1514299Sbbruce@ucdavis.edu        "Dog Ginger goes woooooo",
1614299Sbbruce@ucdavis.edu        "Chihuahua Hertzl goes iyiyiyiyiyi and runs in circles"
1714299Sbbruce@ucdavis.edu    ]
1814299Sbbruce@ucdavis.edu    assert [cat.purr() for cat in zoo[3:]] == ["mrowr", "mrrrRRRRRR"]
1914299Sbbruce@ucdavis.edu    zoo[0].excitement -= 1000
2014299Sbbruce@ucdavis.edu    assert zoo[0].excitement == 14000
21