| 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) |