Exemple #1
0
 def test_join_dataclasses(self):
     C1 = make_dataclass('C1', 'a b')
     C2 = make_dataclass('C2', 'c d')
     C = join_dataclasses('C', [C1, C2])
     CC = make_dataclass('CC', 'a b c d')
     cc = CC(1, 2, 3, 4)
     c = C(1, 2, 3, 4)
     self.assertNotEqual(c, cc)
Exemple #2
0
 def test_enable_gc(self):
     A = make_dataclass("A", ('x', 'y', 'z'))
     B = make_dataclass("B", ('x', 'y', 'z'), gc=True)
     a = A(1, 2, 3)
     b = B(1, 2, 3)
     self.assertEqual(a.x, b.x)
     self.assertEqual(a.y, b.y)
     self.assertEqual(a.z, b.z)
     self.assertEqual(sys.getsizeof(b) - sys.getsizeof(a), headgc_size)
Exemple #3
0
    def test_subclass2(self):
        A = make_dataclass("A", ('x', 'y'))

        class B(A):
            __fields__ = ('z', )

        class C(B):
            pass

        self.assertEqual(type(A), type(B))
        self.assertEqual(type(C), type(B))
        self.assertEqual(C.__dictoffset__, 0)
        self.assertEqual(C.__weakrefoffset__, 0)
        c = C(1, 2, 3)
        self.assertEqual(gc.is_tracked(c), False)
        self.assertEqual(repr(c), "C(x=1, y=2, z=3)")
        self.assertEqual(c.x, 1)
        self.assertEqual(c.y, 2)
        self.assertEqual(c.z, 3)
        self.assertEqual(asdict(c), {'x': 1, 'y': 2, 'z': 3})
        self.assertEqual(sys.getsizeof(c), pyobject_size + 3 * ref_size)
        with self.assertRaises(TypeError):
            weakref.ref(c)
        with self.assertRaises(AttributeError):
            c.__dict__
        c = None
Exemple #4
0
 def test_datatype_copy1(self):
     A = make_dataclass("A", ('x', 'y'), varsize=True)
     a = A(1, 2, 3, 4, 5)
     self.assertEqual(gc.is_tracked(a), False)
     b = a.__copy__()
     self.assertEqual(gc.is_tracked(b), False)
     self.assertEqual(a, b)
Exemple #5
0
 def test_datatype_dict2(self):
     A = make_dataclass("A", ('x', 'y'), use_dict=True)
     a = A(1, 2, v=3, z=4)
     self.assertEqual(a.__dict__, {'v': 3, 'z': 4})
     b = A(1, 2, z=3)
     self.assertEqual(b.__dict__, {'z': 3})
     self.assertEqual(repr(b), "A(x=1, y=2, **{'z': 3})")
Exemple #6
0
 def test_datatype_subscript(self):
     A = make_dataclass("A", ('x', 'y'), mapping=True)
     a = A(1, 2)
     self.assertEqual(a['x'], 1)
     self.assertEqual(a['y'], 2)
     a['x'] = 100
     self.assertEqual(a['x'], 100)
     a = None
Exemple #7
0
 def test_datatype_nosq_nomp(self):
     A = make_dataclass("A", ('x', 'y'))
     a = A(1, 2)
     self.assertEqual(gc.is_tracked(a), False)
     with self.assertRaises(TypeError):
         a[0]
     with self.assertRaises(TypeError):
         a['x']
Exemple #8
0
    def test_datatype_copy_dict(self):
        A = make_dataclass("A", ('x', 'y'), use_dict=True)

        a = A(1, 2, z=3, w=4)
        self.assertEqual(gc.is_tracked(a), False)
        b = a.__copy__()
        self.assertEqual(gc.is_tracked(b), False)
        self.assertEqual(a, b)
Exemple #9
0
 def test_refleak_on_assignemnt_dt(self):
     Test = make_dataclass("Test", "x", varsize=True)
     a = {}
     c = sys.getrefcount(a)
     b = Test(a)
     self.assertEqual(sys.getrefcount(a), c + 1)
     b.x = None
     self.assertEqual(sys.getrefcount(a), c)
Exemple #10
0
    def test_datatype_sq_nomp(self):
        A = make_dataclass("A", ('x', 'y'), sequence=True)

        a = A(1, 2)
        self.assertEqual(gc.is_tracked(a), False)
        self.assertEqual(a[0], 1)
        self.assertEqual(a[1], 2)
        with self.assertRaises(TypeError):
            a['x']
Exemple #11
0
    def test_datatype_nosq_mp(self):
        A = make_dataclass("A", ('x', 'y'), mapping=True)

        a = A(1, 2)
        self.assertEqual(gc.is_tracked(a), False)
        self.assertEqual(a['x'], 1)
        self.assertEqual(a['y'], 2)
        with self.assertRaises(TypeError):
            a[0]
Exemple #12
0
    def test_datatype_sq_mp(self):
        A = make_dataclass("A", ('x', 'y'), sequence=True, mapping=True)

        a = A(1, 2)
        self.assertEqual(gc.is_tracked(a), False)
        self.assertEqual(a['x'], 1)
        self.assertEqual(a['y'], 2)
        self.assertEqual(a[0], 1)
        self.assertEqual(a[1], 2)
Exemple #13
0
    def test_datatype_dict(self):
        A = make_dataclass("A", ('x', 'y'), use_dict=True, use_weakref=True)

        a = A(1, 2)
        self.assertEqual(gc.is_tracked(a), False)
        self.assertEqual(repr(a), "A(x=1, y=2)")
        self.assertEqual(a.x, 1)
        self.assertEqual(a.y, 2)
        self.assertEqual(asdict(a), {'x': 1, 'y': 2})
        weakref.ref(a)
        self.assertEqual(a.__dict__, {})

        a.z = 3
        self.assertEqual(a.z, a.__dict__['z'])
        a = None
Exemple #14
0
 def test_datatype(self):
     A = make_dataclass("A", ('x', 'y'))
     a = A(1, 2)
     self.assertEqual(repr(a), "A(x=1, y=2)")
     self.assertEqual(a.x, 1)
     self.assertEqual(a.y, 2)
     self.assertEqual(asdict(a), {'x': 1, 'y': 2})
     #         self.assertEqual(sys.getsizeof(a), 32)
     with self.assertRaises(TypeError):
         weakref.ref(a)
     with self.assertRaises(AttributeError):
         a.__dict__
     with self.assertRaises(AttributeError):
         a.z = 3
     with self.assertRaises(AttributeError):
         a.z
     a = None
Exemple #15
0
    def test_keyword_args_defaults(self):
        A = make_dataclass("A", ('x', 'y', 'z'), defaults=(100, 200, 300))

        a1 = A(x=1)
        self.assertEqual(repr(a1), "A(x=1, y=200, z=300)")
        self.assertEqual(a1.x, 1)
        self.assertEqual(a1.y, 200)
        self.assertEqual(a1.z, 300)
        a2 = A(x=1, y=2)
        self.assertEqual(repr(a2), "A(x=1, y=2, z=300)")
        self.assertEqual(a2.x, 1)
        self.assertEqual(a2.y, 2)
        self.assertEqual(a2.z, 300)
        a3 = A(x=1, y=2, z=3)
        self.assertEqual(repr(a3), "A(x=1, y=2, z=3)")
        self.assertEqual(a3.x, 1)
        self.assertEqual(a3.y, 2)
        self.assertEqual(a3.z, 3)
Exemple #16
0
    def test_keyword_args(self):
        A = make_dataclass("A", ('x', 'y', 'z'), defaults=3 * (None, ))

        a1 = A(x=1)
        self.assertEqual(repr(a1), "A(x=1, y=None, z=None)")
        self.assertEqual(a1.x, 1)
        self.assertEqual(a1.y, None)
        self.assertEqual(a1.z, None)
        a2 = A(x=1, y=2)
        self.assertEqual(repr(a2), "A(x=1, y=2, z=None)")
        self.assertEqual(a2.x, 1)
        self.assertEqual(a2.y, 2)
        self.assertEqual(a2.z, None)
        a3 = A(x=1, y=2, z=3)
        self.assertEqual(repr(a3), "A(x=1, y=2, z=3)")
        self.assertEqual(a3.x, 1)
        self.assertEqual(a3.y, 2)
        self.assertEqual(a3.z, 3)
Exemple #17
0
    def test_subclass(self):
        A = make_dataclass("A", ('x', 'y'))

        class B(A):
            pass

        self.assertEqual(type(A), type(B))
        self.assertEqual(B.__dictoffset__, 0)
        self.assertEqual(B.__weakrefoffset__, 0)
        b = B(1, 2)
        self.assertEqual(gc.is_tracked(b), False)
        self.assertEqual(repr(b), "B(x=1, y=2)")
        self.assertEqual(b.x, 1)
        self.assertEqual(b.y, 2)
        self.assertEqual(asdict(b), {'x': 1, 'y': 2})
        self.assertEqual(sys.getsizeof(b), pyobject_size + 2 * ref_size)
        self.assertEqual(A.__basicsize__, B.__basicsize__)
        with self.assertRaises(TypeError):
            weakref.ref(b)
        with self.assertRaises(AttributeError):
            b.__dict__
Exemple #18
0
    def test_defaults(self):
        A = make_dataclass("A", ('x', 'y', 'z'), defaults=(100, 200, 300))

        a1 = A()
        self.assertEqual(repr(a1), "A(x=100, y=200, z=300)")
        self.assertEqual(a1.x, 100)
        self.assertEqual(a1.y, 200)
        self.assertEqual(a1.z, 300)
        self.assertEqual(asdict(a1), {'x': 100, 'y': 200, 'z': 300})
        a2 = A(1, z=400)
        self.assertEqual(repr(a2), "A(x=1, y=200, z=400)")
        self.assertEqual(a2.x, 1)
        self.assertEqual(a2.y, 200)
        self.assertEqual(a2.z, 400)
        self.assertEqual(asdict(a2), {'x': 1, 'y': 200, 'z': 400})
        a3 = A(1, 2, z=400)
        self.assertEqual(repr(a3), "A(x=1, y=2, z=400)")
        self.assertEqual(a3.x, 1)
        self.assertEqual(a3.y, 2)
        self.assertEqual(a3.z, 400)
        self.assertEqual(asdict(a3), {'x': 1, 'y': 2, 'z': 400})
Exemple #19
0
import unittest
import pickle, copy
import keyword
import re
import sys
import gc
import weakref

from recordclass import make_dataclass, make_arrayclass, datatype, asdict
from recordclass.utils import headgc_size, ref_size, pyobject_size, pyvarobject_size, pyssize
from recordclass import DataclassStorage

TPickleV5 = make_dataclass("TPickleV5", ('x', 'y', 'z'), varsize=True)
TPickleV6 = make_dataclass("TPickleV6", ('x', 'y', 'z'),
                           varsize=True,
                           use_dict=True)
TPickleV7 = make_dataclass("TPickleV7", ('x', 'y', 'z'), varsize=True)
TPickleV8 = make_dataclass("TPickleV8", ('x', 'y', 'z'),
                           varsize=True,
                           use_dict=True)


class datatupleTest(unittest.TestCase):
    def test_datatype_copy1(self):
        A = make_dataclass("A", ('x', 'y'), varsize=True)
        a = A(1, 2, 3, 4, 5)
        self.assertEqual(gc.is_tracked(a), False)
        b = a.__copy__()
        self.assertEqual(gc.is_tracked(b), False)
        self.assertEqual(a, b)
Exemple #20
0
 def test_datatype_copy(self):
     A = make_dataclass("A", ('x', 'y'))
     a = A(1, 2)
     b = a.__copy__()
     self.assertEqual(a, b)
Exemple #21
0
 def test_missing_args2(self):
     A = make_dataclass("A", ('x', 'y', 'z'))
     a = A(1)
     self.assertEqual(a[0], 1)
     self.assertEqual(a[1], None)
     self.assertEqual(a[2], None)
Exemple #22
0
 def test_tuple2(self):
     A = make_dataclass("A", ('x', 'y', 'z'), iterable=True)
     a = A(1, 2.0, "a")
     self.assertEqual(tuple(a), (1, 2.0, "a"))
Exemple #23
0
 def test_missing_args2(self):
     A = make_dataclass("A", ('a', 'b', 'c'), argsonly=True)
     a = A(1)
     self.assertEqual(a.a, 1)
     self.assertEqual(a.b, None)
     self.assertEqual(a.c, None)
Exemple #24
0
 def test_hash(self):
     A = make_dataclass("A", ("a", "b", "c"), hashable=True)
     a = A(1, 2.0, "a")
     hash(a)
Exemple #25
0
 def test_dataobject_local_dict(self):
     A = make_dataclass("A", ('x', 'y'), use_dict=True)
     a = A(1, 2)
     a.a = 1
     self.assertEqual(a.a, 1)
     self.assertEqual(a.__dict__, {'a': 1})
Exemple #26
0
 def test_reduce(self):
     A = make_dataclass("A", ("x", "y", "z"))
     a = A(1, 2, 3)
     o, t = a.__reduce__()
     self.assertEqual(o, A)
     self.assertEqual(t, (1, 2, 3))
Exemple #27
0
 def test_iter2(self):
     A = make_dataclass("A", ('x', 'y', 'z'), iterable=True)
     a = A(1, 2.0, "a")
     self.assertEqual(list(iter(a)), [1, 2.0, "a"])
Exemple #28
0
 def test_fields_dict(self):
     A = make_dataclass("A", {'x': int, 'y': int})
     a = A(x=1, y=2)
     self.assertEqual(a.x, 1)
     self.assertEqual(a.y, 2)
Exemple #29
0
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z


ex_dict = {'x': 1, 'y': 2, 'z': 3}
print('dict: {} byte'.format(sys.getsizeof(ex_dict)))

ex = Shape(1, 2, 3)
print('ex  : {} byte'.format(sys.getsizeof(ex) + sys.getsizeof(ex.__dict__)))

ex_slot = ShapeSlot(1, 2, 3)
print('ex_slot: {} byte'.format(sys.getsizeof(ex_slot)))

from collections import namedtuple

ShapeNamedTuple = namedtuple('ShapeNamedTuple', ['x', 'y', 'z'])
ex_namedtuple = ShapeNamedTuple(1, 2, 3)
print('ex_namedtuple: {} byte'.format(sys.getsizeof(ex_namedtuple)))

from recordclass import recordclass
ShapeRecord = recordclass('ShapeRecord', ('x', 'y', 'z'))
ex_record = ShapeRecord(1, 2, 3)
print('ex_record: {} byte'.format(sys.getsizeof(ex_record)))

from recordclass import make_dataclass
ShapeMake = make_dataclass('ShapeMake', ('x', 'y', 'z'))
ex_make = ShapeMake(1, 2, 3)
print('ex_make: {} byte'.format(sys.getsizeof(ex_make)))
Exemple #30
0
 def test_join_dataclasses_intersection(self):
     C1 = make_dataclass('C1', 'a b')
     C2 = make_dataclass('C2', 'b c')
     with self.assertRaises(AttributeError):
         C = join_dataclasses('C', [C1, C2])