def test_inheriting_repeat(): from pybind11_tests import A_Repeat, B_Repeat, C_Repeat, D_Repeat, A_Tpl, B_Tpl, C_Tpl, D_Tpl class AR(A_Repeat): @staticmethod def unlucky_number(): return 99 class AT(A_Tpl): @staticmethod def unlucky_number(): return 999 obj = AR() if obj.say_something(3) != "hihihi": raise AssertionError if obj.unlucky_number() != 99: raise AssertionError if obj.say_everything() != "hi 99": raise AssertionError obj = AT() if obj.say_something(3) != "hihihi": raise AssertionError if obj.unlucky_number() != 999: raise AssertionError if obj.say_everything() != "hi 999": raise AssertionError for obj in [B_Repeat(), B_Tpl()]: if obj.say_something(3) != "B says hi 3 times": raise AssertionError if obj.unlucky_number() != 13: raise AssertionError if obj.lucky_number() != 7.0: raise AssertionError if obj.say_everything() != "B says hi 1 times 13": raise AssertionError for obj in [C_Repeat(), C_Tpl()]: if obj.say_something(3) != "B says hi 3 times": raise AssertionError if obj.unlucky_number() != 4444: raise AssertionError if obj.lucky_number() != 888.0: raise AssertionError if obj.say_everything() != "B says hi 1 times 4444": raise AssertionError class CR(C_Repeat): def lucky_number(self): return C_Repeat.lucky_number(self) + 1.25 obj = CR() if obj.say_something(3) != "B says hi 3 times": raise AssertionError if obj.unlucky_number() != 4444: raise AssertionError if obj.lucky_number() != 889.25: raise AssertionError if obj.say_everything() != "B says hi 1 times 4444": raise AssertionError class CT(C_Tpl): pass obj = CT() if obj.say_something(3) != "B says hi 3 times": raise AssertionError if obj.unlucky_number() != 4444: raise AssertionError if obj.lucky_number() != 888.0: raise AssertionError if obj.say_everything() != "B says hi 1 times 4444": raise AssertionError class CCR(CR): def lucky_number(self): return CR.lucky_number(self) * 10 obj = CCR() if obj.say_something(3) != "B says hi 3 times": raise AssertionError if obj.unlucky_number() != 4444: raise AssertionError if obj.lucky_number() != 8892.5: raise AssertionError if obj.say_everything() != "B says hi 1 times 4444": raise AssertionError class CCT(CT): def lucky_number(self): return CT.lucky_number(self) * 1000 obj = CCT() if obj.say_something(3) != "B says hi 3 times": raise AssertionError if obj.unlucky_number() != 4444: raise AssertionError if obj.lucky_number() != 888000.0: raise AssertionError if obj.say_everything() != "B says hi 1 times 4444": raise AssertionError class DR(D_Repeat): @staticmethod def unlucky_number(): return 123 @staticmethod def lucky_number(): return 42.0 for obj in [D_Repeat(), D_Tpl()]: if obj.say_something(3) != "B says hi 3 times": raise AssertionError if obj.unlucky_number() != 4444: raise AssertionError if obj.lucky_number() != 888.0: raise AssertionError if obj.say_everything() != "B says hi 1 times 4444": raise AssertionError obj = DR() if obj.say_something(3) != "B says hi 3 times": raise AssertionError if obj.unlucky_number() != 123: raise AssertionError if obj.lucky_number() != 42.0: raise AssertionError if obj.say_everything() != "B says hi 1 times 123": raise AssertionError class DT(D_Tpl): @staticmethod def say_something(times): return "DT says:" + (' quack' * times) @staticmethod def unlucky_number(): return 1234 @staticmethod def lucky_number(): return -4.25 obj = DT() if obj.say_something(3) != "DT says: quack quack quack": raise AssertionError if obj.unlucky_number() != 1234: raise AssertionError if obj.lucky_number() != -4.25: raise AssertionError if obj.say_everything() != "DT says: quack 1234": raise AssertionError class DT2(DT): def say_something(self, times): return "DT2: " + ('QUACK' * times) def unlucky_number(self): return -3 class BT(B_Tpl): @staticmethod def say_something(times): return "BT" * times @staticmethod def unlucky_number(): return -7 @staticmethod def lucky_number(): return -1.375 obj = BT() if obj.say_something(3) != "BTBTBT": raise AssertionError if obj.unlucky_number() != -7: raise AssertionError if obj.lucky_number() != -1.375: raise AssertionError if obj.say_everything() != "BT -7": raise AssertionError
def test_inheriting_repeat(): from pybind11_tests import A_Repeat, B_Repeat, C_Repeat, D_Repeat, A_Tpl, B_Tpl, C_Tpl, D_Tpl class VI_AR(A_Repeat): def unlucky_number(self): return 99 class VI_AT(A_Tpl): def unlucky_number(self): return 999 obj = VI_AR() assert obj.say_something(3) == "hihihi" assert obj.unlucky_number() == 99 assert obj.say_everything() == "hi 99" obj = VI_AT() assert obj.say_something(3) == "hihihi" assert obj.unlucky_number() == 999 assert obj.say_everything() == "hi 999" for obj in [B_Repeat(), B_Tpl()]: assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 13 assert obj.lucky_number() == 7.0 assert obj.say_everything() == "B says hi 1 times 13" for obj in [C_Repeat(), C_Tpl()]: assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 888.0 assert obj.say_everything() == "B says hi 1 times 4444" class VI_CR(C_Repeat): def lucky_number(self): return C_Repeat.lucky_number(self) + 1.25 obj = VI_CR() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 889.25 assert obj.say_everything() == "B says hi 1 times 4444" class VI_CT(C_Tpl): pass obj = VI_CT() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 888.0 assert obj.say_everything() == "B says hi 1 times 4444" class VI_CCR(VI_CR): def lucky_number(self): return VI_CR.lucky_number(self) * 10 obj = VI_CCR() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 8892.5 assert obj.say_everything() == "B says hi 1 times 4444" class VI_CCT(VI_CT): def lucky_number(self): return VI_CT.lucky_number(self) * 1000 obj = VI_CCT() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 888000.0 assert obj.say_everything() == "B says hi 1 times 4444" class VI_DR(D_Repeat): def unlucky_number(self): return 123 def lucky_number(self): return 42.0 for obj in [D_Repeat(), D_Tpl()]: assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 888.0 assert obj.say_everything() == "B says hi 1 times 4444" obj = VI_DR() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 123 assert obj.lucky_number() == 42.0 assert obj.say_everything() == "B says hi 1 times 123" class VI_DT(D_Tpl): def say_something(self, times): return "VI_DT says:" + (' quack' * times) def unlucky_number(self): return 1234 def lucky_number(self): return -4.25 obj = VI_DT() assert obj.say_something(3) == "VI_DT says: quack quack quack" assert obj.unlucky_number() == 1234 assert obj.lucky_number() == -4.25 assert obj.say_everything() == "VI_DT says: quack 1234" class VI_DT2(VI_DT): def say_something(self, times): return "VI_DT2: " + ('QUACK' * times) def unlucky_number(self): return -3 class VI_BT(B_Tpl): def say_something(self, times): return "VI_BT" * times def unlucky_number(self): return -7 def lucky_number(self): return -1.375 obj = VI_BT() assert obj.say_something(3) == "VI_BTVI_BTVI_BT" assert obj.unlucky_number() == -7 assert obj.lucky_number() == -1.375 assert obj.say_everything() == "VI_BT -7"
def test_inheriting_repeat(): from pybind11_tests import A_Repeat, B_Repeat, C_Repeat, D_Repeat, A_Tpl, B_Tpl, C_Tpl, D_Tpl class VI_AR(A_Repeat): def unlucky_number(self): return 99 class VI_AT(A_Tpl): def unlucky_number(self): return 999 obj = VI_AR() assert obj.say_something(3) == "hihihi" assert obj.unlucky_number() == 99 obj = VI_AT() assert obj.say_something(3) == "hihihi" assert obj.unlucky_number() == 999 for obj in [B_Repeat(), B_Tpl()]: assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 13 assert obj.lucky_number() == 7.0 for obj in [C_Repeat(), C_Tpl()]: assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 888.0 class VI_CR(C_Repeat): def lucky_number(self): return C_Repeat.lucky_number(self) + 1.25 obj = VI_CR() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 889.25 class VI_CT(C_Tpl): pass obj = VI_CT() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 888.0 class VI_CCR(VI_CR): def lucky_number(self): return VI_CR.lucky_number(self) * 10 obj = VI_CCR() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 8892.5 class VI_CCT(VI_CT): def lucky_number(self): return VI_CT.lucky_number(self) * 1000 obj = VI_CCT() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 888000.0 class VI_DR(D_Repeat): def unlucky_number(self): return 123 def lucky_number(self): return 42.0 for obj in [D_Repeat(), D_Tpl()]: assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 4444 assert obj.lucky_number() == 888.0 obj = VI_DR() assert obj.say_something(3) == "B says hi 3 times" assert obj.unlucky_number() == 123 assert obj.lucky_number() == 42.0 class VI_DT(D_Tpl): def say_something(self, times): return "VI_DT says:" + (' quack' * times) def unlucky_number(self): return 1234 def lucky_number(self): return -4.25 obj = VI_DT() assert obj.say_something(3) == "VI_DT says: quack quack quack" assert obj.unlucky_number() == 1234 assert obj.lucky_number() == -4.25