| from implicittest import * | |
| def check(a, b): | |
| if a != b: | |
| raise RuntimeError(str(a) + " does not equal " + str(b)) | |
| #### Class #### | |
| # No implicit conversion | |
| check(1, A(1).get()) | |
| check(2, A(1.0).get()) | |
| check(3, A(B()).get()) | |
| check(4, A("hello").get()) | |
| check(4, A(None).get()) | |
| check(1, get(1)) | |
| check(2, get(1.0)) | |
| check(3, get(B())) | |
| # Explicit constructor: | |
| try: | |
| check(4, get("hello")) | |
| raise RuntimeError | |
| except TypeError: | |
| pass | |
| #### Template Class #### | |
| # No implicit conversion | |
| check(1, A_int(1).get()) | |
| check(2, A_int(1.0).get()) | |
| check(3, A_int(B()).get()) | |
| check(4, A_int("hello").get()) | |
| check(1, A_int.sget(1)) | |
| check(2, A_int.sget(1.0)) | |
| check(3, A_int.sget(B())) | |
| # explicit constructor: | |
| try: | |
| check(4, A_int.sget("hello")) | |
| raise RuntimeError | |
| except TypeError: | |
| pass | |
| #### Global variable assignment #### | |
| cvar.foo = Foo(1) | |
| check(cvar.foo.ii, 1) | |
| cvar.foo = 1 | |
| check(cvar.foo.ii, 1) | |
| cvar.foo = 1.0 | |
| check(cvar.foo.ii, 2) | |
| cvar.foo = Foo("hello") | |
| check(cvar.foo.ii, 3) | |
| # explicit constructor: | |
| try: | |
| cvar.foo = "hello" | |
| raise RuntimeError | |
| except TypeError: | |
| pass | |
| #### Member variable assignment #### | |
| # Note: also needs naturalvar | |
| b = Bar() | |
| check(b.f.ii, 0) | |
| b.f = Foo("hello") | |
| check(b.f.ii, 3) | |
| b.f = 1 | |
| check(b.f.ii, 1) | |
| b.f = 1.0 | |
| check(b.f.ii, 2) | |
| # explicit constructor: | |
| try: | |
| b.f = "hello" | |
| raise RuntimeError | |
| except TypeError: | |
| pass | |
| #### Class testing None #### | |
| # No implicit conversion | |
| check(1, AA(1).get()) | |
| check(2, AA(1.0).get()) | |
| check(3, AA(B()).get()) | |
| check(3, AA(None).get()) | |
| check(4, AA("hello").get()) | |
| check(5, AA(BB()).get()) | |
| check(1, get_AA_val(1)) | |
| check(2, get_AA_val(1.0)) | |
| check(3, get_AA_val(B())) | |
| check(3, get_AA_val(None)) | |
| check(5, get_AA_val(BB())) | |
| # Explicit constructor: | |
| try: | |
| check(4, get_AA_val("hello")) | |
| raise RuntimeError | |
| except TypeError: | |
| pass | |
| check(1, get_AA_ref(1)) | |
| check(2, get_AA_ref(1.0)) | |
| check(3, get_AA_ref(B())) | |
| check(3, get_AA_ref(None)) | |
| check(5, get_AA_ref(BB())) | |
| # Explicit constructor: | |
| try: | |
| check(4, get_AA_ref("hello")) | |
| raise RuntimeError | |
| except TypeError: | |
| pass | |
| ### overloading priority test ### | |
| ccc = CCC(B()) | |
| check(ccc.checkvalue, 10) | |
| check(ccc.xx(123), 11) | |
| check(ccc.yy(123, 123), 111) |