init
This commit is contained in:
commit
38355d2442
9083 changed files with 1225834 additions and 0 deletions
318
.venv/lib/python3.8/site-packages/mypyc/test-data/run-attrs.test
Normal file
318
.venv/lib/python3.8/site-packages/mypyc/test-data/run-attrs.test
Normal file
|
|
@ -0,0 +1,318 @@
|
|||
-- Test cases for dataclasses based on the attrs library, where auto_attribs=True
|
||||
|
||||
[case testRunAttrsclass]
|
||||
import attr
|
||||
from typing import Set, List, Callable, Any
|
||||
|
||||
@attr.s(auto_attribs=True)
|
||||
class Person1:
|
||||
age : int
|
||||
name : str
|
||||
|
||||
def __bool__(self) -> bool:
|
||||
return self.name == 'robot'
|
||||
|
||||
def testBool(p: Person1) -> bool:
|
||||
if p:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@attr.s(auto_attribs=True)
|
||||
class Person1b(Person1):
|
||||
id: str = '000'
|
||||
|
||||
@attr.s(auto_attribs=True)
|
||||
class Person2:
|
||||
age : int
|
||||
name : str = attr.ib(default='robot')
|
||||
|
||||
@attr.s(auto_attribs=True, order=True)
|
||||
class Person3:
|
||||
age : int = attr.ib(default = 6)
|
||||
friendIDs : List[int] = attr.ib(factory = list)
|
||||
|
||||
def get_age(self) -> int:
|
||||
return (self.age)
|
||||
|
||||
def set_age(self, new_age : int) -> None:
|
||||
self.age = new_age
|
||||
|
||||
def add_friendID(self, fid : int) -> None:
|
||||
self.friendIDs.append(fid)
|
||||
|
||||
def get_friendIDs(self) -> List[int]:
|
||||
return self.friendIDs
|
||||
|
||||
def get_next_age(g: Callable[[Any], int]) -> Callable[[Any], int]:
|
||||
def f(a: Any) -> int:
|
||||
return g(a) + 1
|
||||
return f
|
||||
|
||||
@attr.s(auto_attribs=True)
|
||||
class Person4:
|
||||
age : int
|
||||
_name : str = 'Bot'
|
||||
|
||||
@get_next_age
|
||||
def get_age(self) -> int:
|
||||
return self.age
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
return self._name
|
||||
|
||||
@attr.s(auto_attribs=True)
|
||||
class Point:
|
||||
x : int = attr.ib(converter=int)
|
||||
y : int = attr.ib(init=False)
|
||||
|
||||
def __attrs_post_init__(self):
|
||||
self.y = self.x + 1
|
||||
|
||||
|
||||
[file other.py]
|
||||
from native import Person1, Person1b, Person2, Person3, Person4, testBool, Point
|
||||
i1 = Person1(age = 5, name = 'robot')
|
||||
assert i1.age == 5
|
||||
assert i1.name == 'robot'
|
||||
assert testBool(i1) == True
|
||||
assert testBool(Person1(age = 5, name = 'robo')) == False
|
||||
i1b = Person1b(age = 5, name = 'robot')
|
||||
assert i1b.age == 5
|
||||
assert i1b.name == 'robot'
|
||||
assert i1b.id == '000'
|
||||
assert testBool(i1b) == True
|
||||
assert testBool(Person1b(age = 5, name = 'robo')) == False
|
||||
i1c = Person1b(age = 20, name = 'robot', id = 'test')
|
||||
assert i1c.age == 20
|
||||
assert i1c.id == 'test'
|
||||
|
||||
i2 = Person2(age = 5)
|
||||
assert i2.age == 5
|
||||
assert i2.name == 'robot'
|
||||
i3 = Person2(age = 5, name = 'new_robot')
|
||||
assert i3.age == 5
|
||||
assert i3.name == 'new_robot'
|
||||
i4 = Person3()
|
||||
assert i4.age == 6
|
||||
assert i4.friendIDs == []
|
||||
i5 = Person3(age = 5)
|
||||
assert i5.age == 5
|
||||
assert i5.friendIDs == []
|
||||
i6 = Person3(age = 5, friendIDs = [1,2,3])
|
||||
assert i6.age == 5
|
||||
assert i6.friendIDs == [1,2,3]
|
||||
assert i6.get_age() == 5
|
||||
i6.set_age(10)
|
||||
assert i6.get_age() == 10
|
||||
i6.add_friendID(4)
|
||||
assert i6.get_friendIDs() == [1,2,3,4]
|
||||
i7 = Person4(age = 5)
|
||||
assert i7.get_age() == 6
|
||||
i7.age += 3
|
||||
assert i7.age == 8
|
||||
assert i7.name == 'Bot'
|
||||
i8 = Person3(age = 1, friendIDs = [1,2])
|
||||
i9 = Person3(age = 1, friendIDs = [1,2])
|
||||
assert i8 == i9
|
||||
i8.age = 2
|
||||
assert i8 > i9
|
||||
|
||||
assert Person1.__annotations__ == {'age': int, 'name': str}
|
||||
assert Person2.__annotations__ == {'age': int, 'name': str}
|
||||
|
||||
p1 = Point(2)
|
||||
assert p1.x == 2
|
||||
assert p1.y == 3
|
||||
p2 = Point('2')
|
||||
assert p2.x == 2
|
||||
assert p2.y == 3
|
||||
|
||||
assert Point.__annotations__ == {'x': int, 'y': int}
|
||||
|
||||
[file driver.py]
|
||||
import sys
|
||||
|
||||
# PEP 526 introduced in 3.6
|
||||
version = sys.version_info[:2]
|
||||
if version[0] < 3 or version[1] < 6:
|
||||
exit()
|
||||
|
||||
# Run the tests in both interpreted and compiled mode
|
||||
import other
|
||||
import other_interpreted
|
||||
|
||||
# Test for an exceptional cases
|
||||
from testutil import assertRaises
|
||||
from native import Person1, Person1b, Person3
|
||||
from types import BuiltinMethodType
|
||||
|
||||
with assertRaises(TypeError, "missing 1 required positional argument"):
|
||||
Person1(0)
|
||||
|
||||
with assertRaises(TypeError, "missing 2 required positional arguments"):
|
||||
Person1b()
|
||||
|
||||
with assertRaises(TypeError, "int object expected; got str"):
|
||||
Person1('nope', 'test')
|
||||
|
||||
p = Person1(0, 'test')
|
||||
with assertRaises(TypeError, "int object expected; got str"):
|
||||
p.age = 'nope'
|
||||
|
||||
assert isinstance(Person3().get_age, BuiltinMethodType)
|
||||
|
||||
|
||||
[case testRunAttrsclassNonAuto]
|
||||
import attr
|
||||
from typing import Set, List, Callable, Any
|
||||
|
||||
@attr.s
|
||||
class Person1:
|
||||
age = attr.ib(type=int)
|
||||
name = attr.ib(type=str)
|
||||
|
||||
def __bool__(self) -> bool:
|
||||
return self.name == 'robot'
|
||||
|
||||
def testBool(p: Person1) -> bool:
|
||||
if p:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
@attr.s
|
||||
class Person1b(Person1):
|
||||
id = attr.ib(type=str, default='000')
|
||||
|
||||
@attr.s
|
||||
class Person2:
|
||||
age = attr.ib(type=int)
|
||||
name = attr.ib(type=str, default='robot')
|
||||
|
||||
@attr.s(order=True)
|
||||
class Person3:
|
||||
age = attr.ib(type=int, default=6)
|
||||
friendIDs = attr.ib(factory=list, type=List[int])
|
||||
|
||||
def get_age(self) -> int:
|
||||
return (self.age)
|
||||
|
||||
def set_age(self, new_age : int) -> None:
|
||||
self.age = new_age
|
||||
|
||||
def add_friendID(self, fid : int) -> None:
|
||||
self.friendIDs.append(fid)
|
||||
|
||||
def get_friendIDs(self) -> List[int]:
|
||||
return self.friendIDs
|
||||
|
||||
def get_next_age(g: Callable[[Any], int]) -> Callable[[Any], int]:
|
||||
def f(a: Any) -> int:
|
||||
return g(a) + 1
|
||||
return f
|
||||
|
||||
@attr.s
|
||||
class Person4:
|
||||
age = attr.ib(type=int)
|
||||
_name = attr.ib(type=str, default='Bot')
|
||||
|
||||
@get_next_age
|
||||
def get_age(self) -> int:
|
||||
return self.age
|
||||
|
||||
@property
|
||||
def name(self) -> str:
|
||||
return self._name
|
||||
|
||||
@attr.s
|
||||
class Point:
|
||||
x = attr.ib(type=int, converter=int)
|
||||
y = attr.ib(type=int, init=False)
|
||||
|
||||
def __attrs_post_init__(self):
|
||||
self.y = self.x + 1
|
||||
|
||||
|
||||
[file other.py]
|
||||
from native import Person1, Person1b, Person2, Person3, Person4, testBool, Point
|
||||
i1 = Person1(age = 5, name = 'robot')
|
||||
assert i1.age == 5
|
||||
assert i1.name == 'robot'
|
||||
assert testBool(i1) == True
|
||||
assert testBool(Person1(age = 5, name = 'robo')) == False
|
||||
i1b = Person1b(age = 5, name = 'robot')
|
||||
assert i1b.age == 5
|
||||
assert i1b.name == 'robot'
|
||||
assert i1b.id == '000'
|
||||
assert testBool(i1b) == True
|
||||
assert testBool(Person1b(age = 5, name = 'robo')) == False
|
||||
i1c = Person1b(age = 20, name = 'robot', id = 'test')
|
||||
assert i1c.age == 20
|
||||
assert i1c.id == 'test'
|
||||
|
||||
i2 = Person2(age = 5)
|
||||
assert i2.age == 5
|
||||
assert i2.name == 'robot'
|
||||
i3 = Person2(age = 5, name = 'new_robot')
|
||||
assert i3.age == 5
|
||||
assert i3.name == 'new_robot'
|
||||
i4 = Person3()
|
||||
assert i4.age == 6
|
||||
assert i4.friendIDs == []
|
||||
i5 = Person3(age = 5)
|
||||
assert i5.age == 5
|
||||
assert i5.friendIDs == []
|
||||
i6 = Person3(age = 5, friendIDs = [1,2,3])
|
||||
assert i6.age == 5
|
||||
assert i6.friendIDs == [1,2,3]
|
||||
assert i6.get_age() == 5
|
||||
i6.set_age(10)
|
||||
assert i6.get_age() == 10
|
||||
i6.add_friendID(4)
|
||||
assert i6.get_friendIDs() == [1,2,3,4]
|
||||
i7 = Person4(age = 5)
|
||||
assert i7.get_age() == 6
|
||||
i7.age += 3
|
||||
assert i7.age == 8
|
||||
assert i7.name == 'Bot'
|
||||
i8 = Person3(age = 1, friendIDs = [1,2])
|
||||
i9 = Person3(age = 1, friendIDs = [1,2])
|
||||
assert i8 == i9
|
||||
i8.age = 2
|
||||
assert i8 > i9
|
||||
|
||||
p1 = Point(2)
|
||||
assert p1.x == 2
|
||||
assert p1.y == 3
|
||||
p2 = Point('2')
|
||||
assert p2.x == 2
|
||||
assert p2.y == 3
|
||||
|
||||
[file driver.py]
|
||||
import sys
|
||||
|
||||
# Run the tests in both interpreted and compiled mode
|
||||
import other
|
||||
import other_interpreted
|
||||
|
||||
# Test for an exceptional cases
|
||||
from testutil import assertRaises
|
||||
from native import Person1, Person1b, Person3
|
||||
from types import BuiltinMethodType
|
||||
|
||||
with assertRaises(TypeError, "missing 1 required positional argument"):
|
||||
Person1(0)
|
||||
|
||||
with assertRaises(TypeError, "missing 2 required positional arguments"):
|
||||
Person1b()
|
||||
|
||||
with assertRaises(TypeError, "int object expected; got str"):
|
||||
Person1('nope', 'test')
|
||||
|
||||
p = Person1(0, 'test')
|
||||
with assertRaises(TypeError, "int object expected; got str"):
|
||||
p.age = 'nope'
|
||||
|
||||
assert isinstance(Person3().get_age, BuiltinMethodType)
|
||||
Loading…
Add table
Add a link
Reference in a new issue