defl/tests/test_basic.py

190 lines
4.2 KiB
Python
Raw Normal View History

2024-09-11 11:14:03 -04:00
#!/usr/bin/env python
import enum
import itertools
import json
import os
import re
import sys
from dataclasses import KW_ONLY, dataclass, field
from functools import partial, partialmethod
from operator import itemgetter
from time import sleep
import defl
from defl import CLIError, DotDict, Null, Path, Undefined, cl, log
from defl._assert_ import Assert
from defl._typing_ import *
from defl.testing_ import Tester
tester = Tester(name=__file__)
@tester.add()
def dotDictTest():
print()
DotDict()
a = DotDict({"b": {"c": {"d": "e"}}})
assert isinstance(a, DotDict), type(a)
assert isinstance(a["b"], DotDict), type(a["b"])
assert isinstance(a["b"]['c'], DotDict), type(a["b"]['c'])
assert a.get('z') is None, a.get('z')
assert isinstance(a.get('b'), DotDict), a.get('b')
assert isinstance(a.b, DotDict), type(a.b)
assert isinstance(a.b.c, DotDict), type(a.b.c)
assert isinstance(a.b.c.d, str), type(a.b.c.d)
a.b['c'] = 1
assert a.b.c == 1
assert a.b['c'] == 1
a.b.d = 2
assert a.b.d == 2
assert a.b['d'] == 2
del a.b.d
assert a.b.get('d', -9) == -9
a.g = {'k': {'v': 'q'}}
assert isinstance(a.g, DotDict), type(a.g)
d = json.dumps(a, sort_keys=True)
assert d == '{"b": {"c": 1}, "g": {"k": {"v": "q"}}}', d
a = DotDict({"b": [{'a': 'b'}, {'a': 'b'}, 2]})
assert isinstance(a.b[0], DotDict)
assert isinstance(a.b[1], DotDict)
assert isinstance(a.b[2], int)
assert isinstance(a, DotDict)
assert isinstance(a.b, list)
@tester.add()
def chunk():
assert defl.chunkRange(0, 5, chunks=1) == [(0, 4)]
assert defl.chunkRange(0, 5, chunkSize=1) == [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
assert defl.chunkRange(0, 5, chunks=2) == [(0, 2), (3, 4)]
assert defl.chunkRange(0, 5, chunkSize=2) == [(0, 1), (2, 3), (4, 4)]
@tester.add()
def rniy():
d = {1: 1}
a = [[1], [2, [3, [4], (5, set([6]), '7')]], d]
a = [x for x in defl.recursiveNonIterableYield(a)]
b = [1, 2, 3, 4, 5, 6, '7', d]
assert a == b, (a, b)
a = a[:-1]
a = [x for x in defl.recursiveNonIterableYield(a, oper=int)]
b = [1, 2, 3, 4, 5, 6, 7]
assert a == b, (a, b)
@tester.add()
def listFromArgsStar():
Assert(defl.listFromArgsStar(1, 2, 3, 4)).eq([1, 2, 3, 4])
Assert(defl.listFromArgsStar([1, 2, 3, 4])).eq([1, 2, 3, 4])
Assert(defl.listFromArgsStar([1])).eq([1])
Assert(defl.listFromArgsStar(1)).eq([1])
Assert(defl.listFromArgsStar()).eq(list())
@tester.add()
def listFromArgsStar():
assert (1 == 2 == False) == False
assert ((1 == 2) == False) == True
# @tester.add()
def retainProperyReference():
import weakref
@dataclass(slots=T, kw_only=T, frozen=F)
class A:
i: ClassVar[int] = 0
@property
def b(_) -> int:
_.i = _.i + 1
return _.i
class B():
__call__ = None
a = A()
b = B()
b.__call__ = lambda: 1
print(b)
# <__main__.retainProperyReference.<locals>.B object at 0x7517276fa300>
assert b == 1, b
@tester.add()
def listFromArgsStar():
a = [[1]]
b = defl.listFromArgsStar(a)
if len(a) == 1 and inst(a, list | tuple):
c = a[0]
assert a == b
Assert(defl.listFromArgsStar('python - import -p a')).eq(['python - import -p a'])
@tester.add()
def listFromArgsStar():
from ctypes import c_bool
c_bool('test')
@tester.add()
def testStackLocalValue():
def a():
dog = T
return b()
def b():
return c()
def c():
return d()
def d():
return defl.stackLocalValue(leaf='dog')
Assert(a()) == T
@tester.add()
def testStackLocalValue():
def a():
dog = T
return b()
def b():
return c()
def c():
return d()
def d():
return defl.stackLocalValue(leaf='dog', stem='cat')
Assert(a()) == N
@tester.add()
def testStackLocalValue():
def a():
dog = T
return b()
def b():
cat = T
return c()
def c():
cat = T
return d()
def d():
return defl.stackLocalValue(leaf='dog', stem='cat')
Assert(a()) == T
log.info(tester.run())
tester.exitWithStatus()
# for i in ch:
# print(defl.printTable([[y for y in x] for x in ch], squareFill=True))