| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519 |
- [case testI64BasicOps]
- from typing import List, Any, Tuple, Union
- from mypy_extensions import i64, i32, i16
- from testutil import assertRaises
- def inc(n: i64) -> i64:
- return n + 1
- def test_inc() -> None:
- # Use int() to avoid constant folding
- n = 1 + int()
- m = 2 + int()
- assert inc(n) == m
- def min_ll(x: i64, y: i64) -> i64:
- if x < y:
- return x
- else:
- return y
- def test_min() -> None:
- assert min_ll(1 + int(), 2) == 1
- assert min_ll(2 + int(), 1) == 1
- assert min_ll(1 + int(), 1) == 1
- assert min_ll(-2 + int(), 1) == -2
- assert min_ll(1 + int(), -2) == -2
- def eq(x: i64, y: i64) -> bool:
- return x == y
- def test_eq() -> None:
- assert eq(int(), int())
- assert eq(5 + int(), 5 + int())
- assert eq(-5 + int(), -5 + int())
- assert not eq(int(), 1 + int())
- assert not eq(5 + int(), 6 + int())
- assert not eq(-5 + int(), -6 + int())
- assert not eq(-5 + int(), 5 + int())
- def test_comparisons() -> None:
- one: i64 = 1 + int()
- one2: i64 = 1 + int()
- two: i64 = 2 + int()
- assert one < two
- assert not (one < one2)
- assert not (two < one)
- assert two > one
- assert not (one > one2)
- assert not (one > two)
- assert one <= two
- assert one <= one2
- assert not (two <= one)
- assert two >= one
- assert one >= one2
- assert not (one >= two)
- assert one == one2
- assert not (one == two)
- assert one != two
- assert not (one != one2)
- def is_true(x: i64) -> bool:
- if x:
- return True
- else:
- return False
- def is_true2(x: i64) -> bool:
- return bool(x)
- def is_false(x: i64) -> bool:
- if not x:
- return True
- else:
- return False
- def test_i64_as_bool() -> None:
- assert not is_true(0)
- assert not is_true2(0)
- assert is_false(0)
- for x in 1, 55, -1, -7, 1 << 40, -(1 << 50):
- assert is_true(x)
- assert is_true2(x)
- assert not is_false(x)
- def bool_as_i64(b: bool) -> i64:
- return b
- def test_bool_as_i64() -> None:
- assert bool_as_i64(False) == 0
- assert bool_as_i64(True) == 1
- def div_by_3(x: i64) -> i64:
- return x // 3
- def div_by_neg_3(x: i64) -> i64:
- return x // -3
- def div(x: i64, y: i64) -> i64:
- return x // y
- def test_divide_by_constant() -> None:
- for i in range(-1000, 1000):
- assert div_by_3(i) == i // 3
- for i in range(-2**63, -2**63 + 1000):
- assert div_by_3(i) == i // 3
- for i in range(2**63 - 1000, 2**63):
- assert div_by_3(i) == i // 3
- def test_divide_by_negative_constant() -> None:
- for i in range(-1000, 1000):
- assert div_by_neg_3(i) == i // -3
- for i in range(-2**63, -2**63 + 1000):
- assert div_by_neg_3(i) == i // -3
- for i in range(2**63 - 1000, 2**63):
- assert div_by_neg_3(i) == i // -3
- def test_divide_by_variable() -> None:
- values = (list(range(-50, 50)) +
- list(range(-2**63, -2**63 + 10)) +
- list(range(2**63 - 10, 2**63)))
- for x in values:
- for y in values:
- if y != 0:
- if x // y == 2**63:
- with assertRaises(OverflowError, "integer division overflow"):
- div(x, y)
- else:
- assert div(x, y) == x // y
- else:
- with assertRaises(ZeroDivisionError, "integer division or modulo by zero"):
- div(x, y)
- def mod_by_7(x: i64) -> i64:
- return x % 7
- def mod_by_neg_7(x: i64) -> i64:
- return x // -7
- def mod(x: i64, y: i64) -> i64:
- return x % y
- def test_mod_by_constant() -> None:
- for i in range(-1000, 1000):
- assert mod_by_7(i) == i % 7
- for i in range(-2**63, -2**63 + 1000):
- assert mod_by_7(i) == i % 7
- for i in range(2**63 - 1000, 2**63):
- assert mod_by_7(i) == i % 7
- def test_mod_by_negative_constant() -> None:
- for i in range(-1000, 1000):
- assert mod_by_neg_7(i) == i // -7
- for i in range(-2**63, -2**63 + 1000):
- assert mod_by_neg_7(i) == i // -7
- for i in range(2**63 - 1000, 2**63):
- assert mod_by_neg_7(i) == i // -7
- def test_mod_by_variable() -> None:
- values = (list(range(-50, 50)) +
- list(range(-2**63, -2**63 + 10)) +
- list(range(2**63 - 10, 2**63)))
- for x in values:
- for y in values:
- if y != 0:
- assert mod(x, y) == x % y
- else:
- with assertRaises(ZeroDivisionError, "integer division or modulo by zero"):
- mod(x, y)
- def get_item(a: List[i64], n: i64) -> i64:
- return a[n]
- def test_get_list_item() -> None:
- a = [1, 6, -2]
- assert get_item(a, 0) == 1
- assert get_item(a, 1) == 6
- assert get_item(a, 2) == -2
- assert get_item(a, -1) == -2
- assert get_item(a, -2) == 6
- assert get_item(a, -3) == 1
- with assertRaises(IndexError, "list index out of range"):
- get_item(a, 3)
- with assertRaises(IndexError, "list index out of range"):
- get_item(a, -4)
- # TODO: Very large/small values and indexes
- def test_simple_arithmetic_ops() -> None:
- zero: i64 = int()
- one: i64 = zero + 1
- two: i64 = one + 1
- neg_one: i64 = -one
- assert one + one == 2
- assert one + two == 3
- assert one + neg_one == 0
- assert one - one == 0
- assert one - two == -1
- assert one * one == 1
- assert one * two == 2
- assert two * two == 4
- assert two * neg_one == -2
- assert neg_one * one == -1
- assert neg_one * neg_one == 1
- assert two * 0 == 0
- assert 0 * two == 0
- assert -one == -1
- assert -two == -2
- assert -neg_one == 1
- assert -zero == 0
- def test_bitwise_ops() -> None:
- x: i64 = 7997307308812232241 + int()
- y: i64 = 4333433528471475340 + int()
- z: i64 = -2462230749488444526 + int()
- zero: i64 = int()
- one: i64 = zero + 1
- two: i64 = zero + 2
- neg_one: i64 = -one
- assert x & y == 3179577071592752128
- assert x & z == 5536089561888850448
- assert z & z == z
- assert x & zero == 0
- assert x | y == 9151163765690955453
- assert x | z == -1013002565062733
- assert z | z == z
- assert x | 0 == x
- assert x ^ y == 5971586694098203325
- assert x ^ z == -5537102564453913181
- assert z ^ z == 0
- assert z ^ 0 == z
- assert x << one == -2452129456085087134
- assert x << two == -4904258912170174268
- assert z << two == 8597821075755773512
- assert z << 0 == z
- assert x >> one == 3998653654406116120
- assert x >> two == 1999326827203058060
- assert z >> two == -615557687372111132
- assert z >> 0 == z
- assert ~x == -7997307308812232242
- assert ~z == 2462230749488444525
- assert ~zero == -1
- assert ~neg_one == 0
- def test_coerce_to_and_from_int() -> None:
- for shift in range(0, 64):
- for sign in 1, -1:
- for delta in range(-5, 5):
- n = sign * (1 << shift) + delta
- if -(1 << 63) <= n < (1 << 63):
- x: i64 = n
- m: int = x
- assert m == n
- def test_coerce_to_and_from_int2() -> None:
- for shift in range(0, 64):
- for sign in 1, -1:
- for delta in range(-5, 5):
- n = sign * (1 << shift) + delta
- if -(1 << 63) <= n < (1 << 63):
- x: i64 = i64(n)
- m: int = int(x)
- assert m == n
- def test_explicit_conversion_to_i64() -> None:
- x = i64(5)
- assert x == 5
- y = int() - 113
- x = i64(y)
- assert x == -113
- n32: i32 = 1733
- x = i64(n32)
- assert x == 1733
- n32 = -1733
- x = i64(n32)
- assert x == -1733
- z = i64(x)
- assert z == -1733
- a: i16 = int() + 19764
- assert i64(a) == 19764
- a = int() - 1
- assert i64(a) == -1
- def test_explicit_conversion_overflow() -> None:
- max_i64 = int() + 2**63 - 1
- x = i64(max_i64)
- assert x == 2**63 - 1
- assert int(x) == max_i64
- min_i64 = int() - 2**63
- y = i64(min_i64)
- assert y == -2**63
- assert int(y) == min_i64
- too_big = int() + 2**63
- with assertRaises(OverflowError):
- x = i64(too_big)
- too_small = int() - 2**63 - 1
- with assertRaises(OverflowError):
- x = i64(too_small)
- def test_i64_from_large_small_literal() -> None:
- x = i64(2**63 - 1)
- assert x == 2**63 - 1
- x = i64(-2**63)
- assert x == -2**63
- def from_float(x: float) -> i64:
- return i64(x)
- def test_explicit_conversion_from_float() -> None:
- assert from_float(0.0) == 0
- assert from_float(1.456) == 1
- assert from_float(-1234.567) == -1234
- # Subtract 1024 due to limited precision of 64-bit floats
- assert from_float(2**63 - 1024) == 2**63 - 1024
- assert from_float(-2**63) == -2**63
- # The error message could be better, but this is acceptable
- with assertRaises(OverflowError, "int too large to convert to i64"):
- assert from_float(float(2**63))
- with assertRaises(OverflowError, "int too large to convert to i64"):
- # One ulp below the lowest valid i64 value
- from_float(float(-2**63 - 2048))
- def from_str(s: str) -> i64:
- return i64(s)
- def test_explicit_conversion_from_str() -> None:
- assert from_str("0") == 0
- assert from_str("1") == 1
- assert from_str("-1234") == -1234
- with assertRaises(ValueError):
- from_str("1.2")
- def from_str_with_base(s: str, base: int) -> i64:
- return i64(s, base)
- def test_explicit_conversion_from_str_with_base() -> None:
- assert from_str_with_base("101", 2) == 5
- assert from_str_with_base("109", 10) == 109
- assert from_str_with_base("-f0A", 16) == -3850
- assert from_str_with_base("0x1a", 16) == 26
- assert from_str_with_base("0X1A", 16) == 26
- with assertRaises(ValueError):
- from_str_with_base("1.2", 16)
- def from_bool(b: bool) -> i64:
- return i64(b)
- def test_explicit_conversion_from_bool() -> None:
- assert from_bool(True) == 1
- assert from_bool(False) == 0
- class IntConv:
- def __init__(self, x: i64) -> None:
- self.x = x
- def __int__(self) -> i64:
- return self.x + 1
- def test_explicit_conversion_from_instance() -> None:
- assert i64(IntConv(0)) == 1
- assert i64(IntConv(12345)) == 12346
- assert i64(IntConv(-23)) == -22
- def test_explicit_conversion_from_any() -> None:
- # This can't be specialized
- a: Any = "101"
- assert i64(a, base=2) == 5
- def test_tuple_i64() -> None:
- a: i64 = 1
- b: i64 = 2
- t = (a, b)
- a, b = t
- assert a == 1
- assert b == 2
- x: Any = t
- tt: Tuple[i64, i64] = x
- assert tt == (1, 2)
- def test_list_set_item() -> None:
- a: List[i64] = [0, 2, 6]
- z: i64 = int()
- a[z] = 1
- assert a == [1, 2, 6]
- a[z + 2] = 9
- assert a == [1, 2, 9]
- a[-(z + 1)] = 10
- assert a == [1, 2, 10]
- a[-(z + 3)] = 3
- assert a == [3, 2, 10]
- with assertRaises(IndexError):
- a[z + 3] = 0
- with assertRaises(IndexError):
- a[-(z + 4)] = 0
- assert a == [3, 2, 10]
- class C:
- def __init__(self, x: i64) -> None:
- self.x = x
- def test_attributes() -> None:
- i: i64
- for i in range(-1000, 1000):
- c = C(i)
- assert c.x == i
- c.x = i + 1
- assert c.x == i + 1
- def test_mixed_comparisons() -> None:
- i64_3: i64 = int() + 3
- int_5 = int() + 5
- assert i64_3 < int_5
- assert int_5 > i64_3
- b = i64_3 > int_5
- assert not b
- int_largest = int() + (1 << 63) - 1
- assert int_largest > i64_3
- int_smallest = int() - (1 << 63)
- assert i64_3 > int_smallest
- int_too_big = int() + (1 << 63)
- int_too_small = int() - (1 << 63) - 1
- with assertRaises(OverflowError):
- assert i64_3 < int_too_big
- with assertRaises(OverflowError):
- assert int_too_big < i64_3
- with assertRaises(OverflowError):
- assert i64_3 > int_too_small
- with assertRaises(OverflowError):
- assert int_too_small < i64_3
- def test_mixed_comparisons_32bit() -> None:
- # Test edge cases on 32-bit platforms
- i64_3: i64 = int() + 3
- int_5 = int() + 5
- int_largest_short = int() + (1 << 30) - 1
- int_largest_short_i64: i64 = int_largest_short
- assert int_largest_short > i64_3
- int_smallest_short = int() - (1 << 30)
- int_smallest_short_i64: i64 = int_smallest_short
- assert i64_3 > int_smallest_short
- int_big = int() + (1 << 30)
- assert int_big > i64_3
- int_small = int() - (1 << 30) - 1
- assert i64_3 > int_small
- assert int_smallest_short_i64 > int_small
- assert int_largest_short_i64 < int_big
- def test_mixed_arithmetic_and_bitwise_ops() -> None:
- i64_3: i64 = int() + 3
- int_5 = int() + 5
- assert i64_3 + int_5 == 8
- assert int_5 - i64_3 == 2
- assert i64_3 << int_5 == 96
- assert int_5 << i64_3 == 40
- assert i64_3 ^ int_5 == 6
- assert int_5 | i64_3 == 7
- int_largest = int() + (1 << 63) - 1
- assert int_largest - i64_3 == 9223372036854775804
- int_smallest = int() - (1 << 63)
- assert int_smallest + i64_3 == -9223372036854775805
- int_too_big = int() + (1 << 63)
- int_too_small = int() - (1 << 63) - 1
- with assertRaises(OverflowError):
- assert i64_3 & int_too_big
- with assertRaises(OverflowError):
- assert int_too_small & i64_3
- def test_for_loop() -> None:
- n: i64 = 0
- for i in range(i64(5 + int())):
- n += i
- assert n == 10
- n = 0
- for i in range(i64(5)):
- n += i
- assert n == 10
- n = 0
- for i in range(i64(2 + int()), 5 + int()):
- n += i
- assert n == 9
- n = 0
- for i in range(2, i64(5 + int())):
- n += i
- assert n == 9
- assert sum([x * x for x in range(i64(4 + int()))]) == 1 + 4 + 9
- def narrow1(x: Union[str, i64]) -> i64:
- if isinstance(x, i64):
- return x
- return len(x)
- def narrow2(x: Union[str, i64]) -> i64:
- if isinstance(x, int):
- return x
- return len(x)
- def test_isinstance() -> None:
- assert narrow1(123) == 123
- assert narrow1("foobar") == 6
- assert narrow2(123) == 123
- assert narrow2("foobar") == 6
- [case testI64ErrorValuesAndUndefined]
- from typing import Any, Tuple
- import sys
- from mypy_extensions import mypyc_attr, i64
- from typing_extensions import Final
- from testutil import assertRaises
- def maybe_raise(n: i64, error: bool) -> i64:
- if error:
- raise ValueError()
- return n
- def test_error_value() -> None:
- for i in range(-1000, 1000):
- assert maybe_raise(i, False) == i
- with assertRaises(ValueError):
- maybe_raise(0, True)
- class C:
- def maybe_raise(self, n: i64, error: bool) -> i64:
- if error:
- raise ValueError()
- return n
- def test_method_error_value() -> None:
- for i in range(-1000, 1000):
- assert C().maybe_raise(i, False) == i
- with assertRaises(ValueError):
- C().maybe_raise(0, True)
- def maybe_raise_tuple(n: i64, error: bool) -> Tuple[i64, i64]:
- if error:
- raise ValueError()
- return n, n+ 1
- def test_tuple_error_value() -> None:
- for i in range(-1000, 1000):
- assert maybe_raise_tuple(i, False) == (i, i + 1)
- with assertRaises(ValueError):
- maybe_raise_tuple(0, True)
- f: Any = maybe_raise_tuple
- for i in range(-1000, 1000):
- assert f(i, False) == (i, i + 1)
- with assertRaises(ValueError):
- f(0, True)
- def maybe_raise_tuple2(n: i64, error: bool) -> Tuple[i64, int]:
- if error:
- raise ValueError()
- return n, n+ 1
- def test_tuple_error_value_2() -> None:
- for i in range(-1000, 1000):
- assert maybe_raise_tuple2(i, False) == (i, i + 1)
- with assertRaises(ValueError):
- maybe_raise_tuple(0, True)
- def test_unbox_int() -> None:
- for i in list(range(-1000, 1000)) + [-(1 << 63), (1 << 63) - 1]:
- o: Any = i
- x: i64 = i
- assert x == i
- y: i64 = o
- assert y == i
- def test_unbox_int_fails() -> None:
- o: Any = 'x'
- if sys.version_info[0] == 3 and sys.version_info[1] < 10:
- msg = "an integer is required (got type str)"
- else:
- msg = "'str' object cannot be interpreted as an integer"
- with assertRaises(TypeError, msg):
- x: i64 = o
- o2: Any = 1 << 63
- with assertRaises(OverflowError, "int too large to convert to i64"):
- y: i64 = o2
- o3: Any = -(1 << 63 + 1)
- with assertRaises(OverflowError, "int too large to convert to i64"):
- z: i64 = o3
- class Uninit:
- x: i64
- y: i64 = 0
- z: i64
- class Derived(Uninit):
- a: i64 = 1
- b: i64
- c: i64 = 2
- class Derived2(Derived):
- h: i64
- def test_uninitialized_attr() -> None:
- o = Uninit()
- assert o.y == 0
- with assertRaises(AttributeError):
- o.x
- with assertRaises(AttributeError):
- o.z
- o.x = 1
- assert o.x == 1
- with assertRaises(AttributeError):
- o.z
- o.z = 2
- assert o.z == 2
- # This is the error value, but it's also a valid normal value
- MAGIC: Final = -113
- def test_magic_value() -> None:
- o = Uninit()
- o.x = MAGIC
- assert o.x == MAGIC
- with assertRaises(AttributeError):
- o.z
- o.z = MAGIC
- assert o.x == MAGIC
- assert o.z == MAGIC
- def test_magic_value_via_any() -> None:
- o: Any = Uninit()
- with assertRaises(AttributeError):
- o.x
- with assertRaises(AttributeError):
- o.z
- o.x = MAGIC
- assert o.x == MAGIC
- with assertRaises(AttributeError):
- o.z
- o.z = MAGIC
- assert o.z == MAGIC
- def test_magic_value_and_inheritance() -> None:
- o = Derived2()
- o.x = MAGIC
- assert o.x == MAGIC
- with assertRaises(AttributeError):
- o.z
- with assertRaises(AttributeError):
- o.b
- with assertRaises(AttributeError):
- o.h
- o.z = MAGIC
- assert o.z == MAGIC
- with assertRaises(AttributeError):
- o.b
- with assertRaises(AttributeError):
- o.h
- o.h = MAGIC
- assert o.h == MAGIC
- with assertRaises(AttributeError):
- o.b
- o.b = MAGIC
- assert o.b == MAGIC
- @mypyc_attr(allow_interpreted_subclasses=True)
- class MagicInit:
- x: i64 = MAGIC
- def test_magic_value_as_initializer() -> None:
- o = MagicInit()
- assert o.x == MAGIC
- class ManyUninit:
- a1: i64
- a2: i64
- a3: i64
- a4: i64
- a5: i64
- a6: i64
- a7: i64
- a8: i64
- a9: i64
- a10: i64
- a11: i64
- a12: i64
- a13: i64
- a14: i64
- a15: i64
- a16: i64
- a17: i64
- a18: i64
- a19: i64
- a20: i64
- a21: i64
- a22: i64
- a23: i64
- a24: i64
- a25: i64
- a26: i64
- a27: i64
- a28: i64
- a29: i64
- a30: i64
- a31: i64
- a32: i64
- a33: i64
- a34: i64
- a35: i64
- a36: i64
- a37: i64
- a38: i64
- a39: i64
- a40: i64
- a41: i64
- a42: i64
- a43: i64
- a44: i64
- a45: i64
- a46: i64
- a47: i64
- a48: i64
- a49: i64
- a50: i64
- a51: i64
- a52: i64
- a53: i64
- a54: i64
- a55: i64
- a56: i64
- a57: i64
- a58: i64
- a59: i64
- a60: i64
- a61: i64
- a62: i64
- a63: i64
- a64: i64
- a65: i64
- a66: i64
- a67: i64
- a68: i64
- a69: i64
- a70: i64
- a71: i64
- a72: i64
- a73: i64
- a74: i64
- a75: i64
- a76: i64
- a77: i64
- a78: i64
- a79: i64
- a80: i64
- a81: i64
- a82: i64
- a83: i64
- a84: i64
- a85: i64
- a86: i64
- a87: i64
- a88: i64
- a89: i64
- a90: i64
- a91: i64
- a92: i64
- a93: i64
- a94: i64
- a95: i64
- a96: i64
- a97: i64
- a98: i64
- a99: i64
- a100: i64
- def test_many_uninitialized_attributes() -> None:
- o = ManyUninit()
- with assertRaises(AttributeError):
- o.a1
- with assertRaises(AttributeError):
- o.a10
- with assertRaises(AttributeError):
- o.a20
- with assertRaises(AttributeError):
- o.a30
- with assertRaises(AttributeError):
- o.a31
- with assertRaises(AttributeError):
- o.a32
- with assertRaises(AttributeError):
- o.a33
- with assertRaises(AttributeError):
- o.a40
- with assertRaises(AttributeError):
- o.a50
- with assertRaises(AttributeError):
- o.a60
- with assertRaises(AttributeError):
- o.a62
- with assertRaises(AttributeError):
- o.a63
- with assertRaises(AttributeError):
- o.a64
- with assertRaises(AttributeError):
- o.a65
- with assertRaises(AttributeError):
- o.a80
- with assertRaises(AttributeError):
- o.a100
- o.a30 = MAGIC
- assert o.a30 == MAGIC
- o.a31 = MAGIC
- assert o.a31 == MAGIC
- o.a32 = MAGIC
- assert o.a32 == MAGIC
- o.a33 = MAGIC
- assert o.a33 == MAGIC
- with assertRaises(AttributeError):
- o.a34
- o.a62 = MAGIC
- assert o.a62 == MAGIC
- o.a63 = MAGIC
- assert o.a63 == MAGIC
- o.a64 = MAGIC
- assert o.a64 == MAGIC
- o.a65 = MAGIC
- assert o.a65 == MAGIC
- with assertRaises(AttributeError):
- o.a66
- class BaseNoBitmap:
- x: int = 5
- class DerivedBitmap(BaseNoBitmap):
- # Subclass needs a bitmap, but base class doesn't have it.
- y: i64
- def test_derived_adds_bitmap() -> None:
- d = DerivedBitmap()
- d.x = 643
- b: BaseNoBitmap = d
- assert b.x == 643
- class Delete:
- __deletable__ = ['x', 'y']
- x: i64
- y: i64
- def test_del() -> None:
- o = Delete()
- o.x = MAGIC
- o.y = -1
- assert o.x == MAGIC
- assert o.y == -1
- del o.x
- with assertRaises(AttributeError):
- o.x
- assert o.y == -1
- del o.y
- with assertRaises(AttributeError):
- o.y
- o.x = 5
- assert o.x == 5
- with assertRaises(AttributeError):
- o.y
- del o.x
- with assertRaises(AttributeError):
- o.x
- class UndefinedTuple:
- def __init__(self, x: i64, y: i64) -> None:
- if x != 0:
- self.t = (x, y)
- def test_undefined_native_int_tuple() -> None:
- o = UndefinedTuple(MAGIC, MAGIC)
- assert o.t[0] == MAGIC
- assert o.t[1] == MAGIC
- o = UndefinedTuple(0, 0)
- with assertRaises(AttributeError):
- o.t
- o = UndefinedTuple(-13, 45)
- assert o.t == (-13, 45)
- def test_undefined_native_int_tuple_via_any() -> None:
- cls: Any = UndefinedTuple
- o: Any = cls(MAGIC, MAGIC)
- assert o.t[0] == MAGIC
- assert o.t[1] == MAGIC
- o = cls(0, 0)
- with assertRaises(AttributeError):
- o.t
- o = UndefinedTuple(-13, 45)
- assert o.t == (-13, 45)
- [case testI64DefaultArgValues]
- from typing import Any, Iterator, Tuple
- from typing_extensions import Final
- MAGIC: Final = -113
- from mypy_extensions import i64
- def f(x: i64, y: i64 = 5) -> i64:
- return x + y
- def test_simple_default_arg() -> None:
- assert f(3) == 8
- assert f(4, 9) == 13
- assert f(5, MAGIC) == -108
- for i in range(-1000, 1000):
- assert f(1, i) == 1 + i
- f2: Any = f
- assert f2(3) == 8
- assert f2(4, 9) == 13
- assert f2(5, MAGIC) == -108
- def g(a: i64, b: i64 = 1, c: int = 2, d: i64 = 3) -> i64:
- return a + b + c + d
- def test_two_default_args() -> None:
- assert g(10) == 16
- assert g(10, 2) == 17
- assert g(10, 2, 3) == 18
- assert g(10, 2, 3, 4) == 19
- g2: Any = g
- assert g2(10) == 16
- assert g2(10, 2) == 17
- assert g2(10, 2, 3) == 18
- assert g2(10, 2, 3, 4) == 19
- class C:
- def __init__(self) -> None:
- self.i: i64 = 1
- def m(self, a: i64, b: i64 = 1, c: int = 2, d: i64 = 3) -> i64:
- return self.i + a + b + c + d
- class D(C):
- def m(self, a: i64, b: i64 = 2, c: int = 3, d: i64 = 4) -> i64:
- return self.i + a + b + c + d
- def mm(self, a: i64 = 2, b: i64 = 1) -> i64:
- return self.i + a + b
- @staticmethod
- def s(a: i64 = 2, b: i64 = 1) -> i64:
- return a + b
- @classmethod
- def c(cls, a: i64 = 2, b: i64 = 3) -> i64:
- assert cls is D
- return a + b
- def test_method_default_args() -> None:
- a = [C(), D()]
- assert a[0].m(4) == 11
- d = D()
- assert d.mm() == 4
- assert d.mm(5) == 7
- assert d.mm(MAGIC) == MAGIC + 2
- assert d.mm(b=5) == 8
- assert D.mm(d) == 4
- assert D.mm(d, 6) == 8
- assert D.mm(d, MAGIC) == MAGIC + 2
- assert D.mm(d, b=6) == 9
- dd: Any = d
- assert dd.mm() == 4
- assert dd.mm(5) == 7
- assert dd.mm(MAGIC) == MAGIC + 2
- assert dd.mm(b=5) == 8
- def test_static_method_default_args() -> None:
- d = D()
- assert d.s() == 3
- assert d.s(5) == 6
- assert d.s(MAGIC) == MAGIC + 1
- assert d.s(5, 6) == 11
- assert D.s() == 3
- assert D.s(5) == 6
- assert D.s(MAGIC) == MAGIC + 1
- assert D.s(5, 6) == 11
- dd: Any = d
- assert dd.s() == 3
- assert dd.s(5) == 6
- assert dd.s(MAGIC) == MAGIC + 1
- assert dd.s(5, 6) == 11
- def test_class_method_default_args() -> None:
- d = D()
- assert d.c() == 5
- assert d.c(5) == 8
- assert d.c(MAGIC) == MAGIC + 3
- assert d.c(b=5) == 7
- assert D.c() == 5
- assert D.c(5) == 8
- assert D.c(MAGIC) == MAGIC + 3
- assert D.c(b=5) == 7
- dd: Any = d
- assert dd.c() == 5
- assert dd.c(5) == 8
- assert dd.c(MAGIC) == MAGIC + 3
- assert dd.c(b=5) == 7
- class Init:
- def __init__(self, x: i64 = 2, y: i64 = 5) -> None:
- self.x = x
- self.y = y
- def test_init_default_args() -> None:
- o = Init()
- assert o.x == 2
- assert o.y == 5
- o = Init(7, 8)
- assert o.x == 7
- assert o.y == 8
- o = Init(4)
- assert o.x == 4
- assert o.y == 5
- o = Init(MAGIC, MAGIC)
- assert o.x == MAGIC
- assert o.y == MAGIC
- o = Init(3, MAGIC)
- assert o.x == 3
- assert o.y == MAGIC
- o = Init(MAGIC, 11)
- assert o.x == MAGIC
- assert o.y == 11
- o = Init(MAGIC)
- assert o.x == MAGIC
- assert o.y == 5
- o = Init(y=MAGIC)
- assert o.x == 2
- assert o.y == MAGIC
- def kw_only(*, a: i64 = 1, b: int = 2, c: i64 = 3) -> i64:
- return a + b + c * 2
- def test_kw_only_default_args() -> None:
- assert kw_only() == 9
- assert kw_only(a=2) == 10
- assert kw_only(b=4) == 11
- assert kw_only(c=11) == 25
- assert kw_only(a=2, c=4) == 12
- assert kw_only(c=4, a=2) == 12
- kw_only2: Any = kw_only
- assert kw_only2() == 9
- assert kw_only2(a=2) == 10
- assert kw_only2(b=4) == 11
- assert kw_only2(c=11) == 25
- assert kw_only2(a=2, c=4) == 12
- assert kw_only2(c=4, a=2) == 12
- def tuples(t: Tuple[i64, i64] = (MAGIC, MAGIC)) -> i64:
- return t[0] + t[1]
- def test_tuple_arg_defaults() -> None:
- assert tuples() == 2 * MAGIC
- assert tuples((1, 2)) == 3
- assert tuples((MAGIC, MAGIC)) == 2 * MAGIC
- tuples2: Any = tuples
- assert tuples2() == 2 * MAGIC
- assert tuples2((1, 2)) == 3
- assert tuples2((MAGIC, MAGIC)) == 2 * MAGIC
- class TupleInit:
- def __init__(self, t: Tuple[i64, i64] = (MAGIC, MAGIC)) -> None:
- self.t = t[0] + t[1]
- def test_tuple_init_arg_defaults() -> None:
- assert TupleInit().t == 2 * MAGIC
- assert TupleInit((1, 2)).t == 3
- assert TupleInit((MAGIC, MAGIC)).t == 2 * MAGIC
- o: Any = TupleInit
- assert o().t == 2 * MAGIC
- assert o((1, 2)).t == 3
- assert o((MAGIC, MAGIC)).t == 2 * MAGIC
- def many_args(
- a1: i64 = 0,
- a2: i64 = 1,
- a3: i64 = 2,
- a4: i64 = 3,
- a5: i64 = 4,
- a6: i64 = 5,
- a7: i64 = 6,
- a8: i64 = 7,
- a9: i64 = 8,
- a10: i64 = 9,
- a11: i64 = 10,
- a12: i64 = 11,
- a13: i64 = 12,
- a14: i64 = 13,
- a15: i64 = 14,
- a16: i64 = 15,
- a17: i64 = 16,
- a18: i64 = 17,
- a19: i64 = 18,
- a20: i64 = 19,
- a21: i64 = 20,
- a22: i64 = 21,
- a23: i64 = 22,
- a24: i64 = 23,
- a25: i64 = 24,
- a26: i64 = 25,
- a27: i64 = 26,
- a28: i64 = 27,
- a29: i64 = 28,
- a30: i64 = 29,
- a31: i64 = 30,
- a32: i64 = 31,
- a33: i64 = 32,
- a34: i64 = 33,
- ) -> i64:
- return a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13 + a14 + a15 + a16 + a17 + a18 + a19 + a20 + a21 + a22 + a23 + a24 + a25 + a26 + a27 + a28 + a29 + a30 + a31 + a32 + a33 + a34
- def test_many_args() -> None:
- assert many_args() == 561
- assert many_args(a1=100) == 661
- assert many_args(a2=101) == 661
- assert many_args(a15=114) == 661
- assert many_args(a31=130) == 661
- assert many_args(a32=131) == 661
- assert many_args(a33=232) == 761
- assert many_args(a34=333) == 861
- assert many_args(a1=100, a33=232) == 861
- f: Any = many_args
- assert f() == 561
- assert f(a1=100) == 661
- assert f(a2=101) == 661
- assert f(a15=114) == 661
- assert f(a31=130) == 661
- assert f(a32=131) == 661
- assert f(a33=232) == 761
- assert f(a34=333) == 861
- assert f(a1=100, a33=232) == 861
- def test_nested_function_defaults() -> None:
- a: i64 = 1
- def nested(x: i64 = 2, y: i64 = 3) -> i64:
- return a + x + y
- assert nested() == 6
- assert nested(3) == 7
- assert nested(y=5) == 8
- assert nested(MAGIC) == MAGIC + 4
- a = 11
- assert nested() == 16
- def test_nested_function_defaults_via_any() -> None:
- a: i64 = 1
- def nested_native(x: i64 = 2, y: i64 = 3) -> i64:
- return a + x + y
- nested: Any = nested_native
- assert nested() == 6
- assert nested(3) == 7
- assert nested(y=5) == 8
- assert nested(MAGIC) == MAGIC + 4
- a = 11
- assert nested() == 16
- def gen(x: i64 = 1, y: i64 = 2) -> Iterator[i64]:
- yield x + y
- def test_generator() -> None:
- g = gen()
- assert next(g) == 3
- g = gen(2)
- assert next(g) == 4
- g = gen(2, 3)
- assert next(g) == 5
- a: Any = gen
- g = a()
- assert next(g) == 3
- g = a(2)
- assert next(g) == 4
- g = a(2, 3)
- assert next(g) == 5
- def magic_default(x: i64 = MAGIC) -> i64:
- return x
- def test_magic_default() -> None:
- assert magic_default() == MAGIC
- assert magic_default(1) == 1
- assert magic_default(MAGIC) == MAGIC
- a: Any = magic_default
- assert a() == MAGIC
- assert a(1) == 1
- assert a(MAGIC) == MAGIC
- [case testI64UndefinedLocal]
- from typing_extensions import Final
- from mypy_extensions import i64, i32
- from testutil import assertRaises
- MAGIC: Final = -113
- def test_conditionally_defined_local() -> None:
- x = not int()
- if x:
- y: i64 = 5
- z: i32 = 6
- assert y == 5
- assert z == 6
- def test_conditionally_undefined_local() -> None:
- x = int()
- if x:
- y: i64 = 5
- z: i32 = 6
- else:
- ok: i64 = 7
- assert ok == 7
- try:
- print(y)
- except NameError as e:
- assert str(e) == 'local variable "y" referenced before assignment'
- else:
- assert False
- try:
- print(z)
- except NameError as e:
- assert str(e) == 'local variable "z" referenced before assignment'
- else:
- assert False
- def test_assign_error_value_conditionally() -> None:
- x = int()
- if not x:
- y: i64 = MAGIC
- z: i32 = MAGIC
- assert y == MAGIC
- assert z == MAGIC
- def tuple_case(x: i64, y: i64) -> None:
- if not int():
- t = (x, y)
- assert t == (x, y)
- if int():
- t2 = (x, y)
- try:
- print(t2)
- except NameError as e:
- assert str(e) == 'local variable "t2" referenced before assignment'
- else:
- assert False
- def test_conditionally_undefined_tuple() -> None:
- tuple_case(2, 3)
- tuple_case(-2, -3)
- tuple_case(MAGIC, MAGIC)
- def test_many_locals() -> None:
- x = int()
- if x:
- a0: i64 = 0
- a1: i64 = 1
- a2: i64 = 2
- a3: i64 = 3
- a4: i64 = 4
- a5: i64 = 5
- a6: i64 = 6
- a7: i64 = 7
- a8: i64 = 8
- a9: i64 = 9
- a10: i64 = 10
- a11: i64 = 11
- a12: i64 = 12
- a13: i64 = 13
- a14: i64 = 14
- a15: i64 = 15
- a16: i64 = 16
- a17: i64 = 17
- a18: i64 = 18
- a19: i64 = 19
- a20: i64 = 20
- a21: i64 = 21
- a22: i64 = 22
- a23: i64 = 23
- a24: i64 = 24
- a25: i64 = 25
- a26: i64 = 26
- a27: i64 = 27
- a28: i64 = 28
- a29: i64 = 29
- a30: i64 = 30
- a31: i64 = 31
- a32: i64 = 32
- a33: i64 = 33
- with assertRaises(NameError):
- print(a0)
- with assertRaises(NameError):
- print(a31)
- with assertRaises(NameError):
- print(a32)
- with assertRaises(NameError):
- print(a33)
- a0 = 5
- assert a0 == 5
- with assertRaises(NameError):
- print(a31)
- with assertRaises(NameError):
- print(a32)
- with assertRaises(NameError):
- print(a33)
- a32 = 55
- assert a0 == 5
- assert a32 == 55
- with assertRaises(NameError):
- print(a31)
- with assertRaises(NameError):
- print(a33)
- a31 = 10
- a33 = 20
- assert a0 == 5
- assert a31 == 10
- assert a32 == 55
- assert a33 == 20
- [case testI64GlueMethodsAndInheritance]
- from typing import Any
- from typing_extensions import Final
- from mypy_extensions import i64, trait
- from testutil import assertRaises
- MAGIC: Final = -113
- class Base:
- def foo(self) -> i64:
- return 5
- def bar(self, x: i64 = 2) -> i64:
- return x + 1
- def hoho(self, x: i64) -> i64:
- return x - 1
- class Derived(Base):
- def foo(self, x: i64 = 5) -> i64:
- return x + 10
- def bar(self, x: i64 = 3, y: i64 = 20) -> i64:
- return x + y + 2
- def hoho(self, x: i64 = 7) -> i64:
- return x - 2
- def test_derived_adds_bitmap() -> None:
- b: Base = Derived()
- assert b.foo() == 15
- def test_derived_adds_another_default_arg() -> None:
- b: Base = Derived()
- assert b.bar() == 25
- assert b.bar(1) == 23
- assert b.bar(MAGIC) == MAGIC + 22
- def test_derived_switches_arg_to_have_default() -> None:
- b: Base = Derived()
- assert b.hoho(5) == 3
- assert b.hoho(MAGIC) == MAGIC - 2
- @trait
- class T:
- @property
- def x(self) -> i64: ...
- @property
- def y(self) -> i64: ...
- class C(T):
- x: i64 = 1
- y: i64 = 4
- def test_read_only_property_in_trait_implemented_as_attribute() -> None:
- c = C()
- c.x = 5
- assert c.x == 5
- c.x = MAGIC
- assert c.x == MAGIC
- assert c.y == 4
- c.y = 6
- assert c.y == 6
- t: T = C()
- assert t.y == 4
- t = c
- assert t.x == MAGIC
- c.x = 55
- assert t.x == 55
- assert t.y == 6
- a: Any = c
- assert a.x == 55
- assert a.y == 6
- a.x = 7
- a.y = 8
- assert a.x == 7
- assert a.y == 8
- class D(T):
- xx: i64
- @property
- def x(self) -> i64:
- return self.xx
- @property
- def y(self) -> i64:
- raise TypeError
- def test_read_only_property_in_trait_implemented_as_property() -> None:
- d = D()
- d.xx = 5
- assert d.x == 5
- d.xx = MAGIC
- assert d.x == MAGIC
- with assertRaises(TypeError):
- d.y
- t: T = d
- assert t.x == MAGIC
- d.xx = 6
- assert t.x == 6
- with assertRaises(TypeError):
- t.y
- @trait
- class T2:
- x: i64
- y: i64
- class C2(T2):
- pass
- def test_inherit_trait_attribute() -> None:
- c = C2()
- c.x = 5
- assert c.x == 5
- c.x = MAGIC
- assert c.x == MAGIC
- with assertRaises(AttributeError):
- c.y
- c.y = 6
- assert c.y == 6
- t: T2 = C2()
- with assertRaises(AttributeError):
- t.y
- t = c
- assert t.x == MAGIC
- c.x = 55
- assert t.x == 55
- assert t.y == 6
- a: Any = c
- assert a.x == 55
- assert a.y == 6
- a.x = 7
- a.y = 8
- assert a.x == 7
- assert a.y == 8
- class D2(T2):
- x: i64
- y: i64 = 4
- def test_implement_trait_attribute() -> None:
- d = D2()
- d.x = 5
- assert d.x == 5
- d.x = MAGIC
- assert d.x == MAGIC
- assert d.y == 4
- d.y = 6
- assert d.y == 6
- t: T2 = D2()
- assert t.y == 4
- t = d
- assert t.x == MAGIC
- d.x = 55
- assert t.x == 55
- assert t.y == 6
- a: Any = d
- assert a.x == 55
- assert a.y == 6
- a.x = 7
- a.y = 8
- assert a.x == 7
- assert a.y == 8
- class DunderErr:
- def __contains__(self, i: i64) -> bool:
- raise IndexError()
- def test_dunder_arg_check() -> None:
- o: Any = DunderErr()
- with assertRaises(TypeError):
- 'x' in o
- with assertRaises(TypeError):
- 2**63 in o
- with assertRaises(IndexError):
- 1 in o
|