defl/tests.old/test_math.py
2025-04-28 14:44:03 -04:00

122 lines
3.4 KiB
Python
Executable File

#!/usr/bin/env python
import json
import time
import defl
from defl import DotDict, cl, log, Assert
from defl.testing_ import Tester
tester = Tester(name=__file__)
@tester.add()
def rollingAverage():
print()
avg = defl.RollingAverage()
assert avg.window == None
assert avg.add(2) == 2, avg
assert avg.add(4) == 3, avg
assert avg.add(6) == 4, avg
@tester.add()
def rollingAverage1():
print()
avg = defl.RollingAverage(window=1)
assert avg.window == 1
assert avg.add(4) == 4, repr(avg)
assert avg.add(2) == 2, repr(avg)
assert avg.add(6) == 6, repr(avg)
assert avg.add(10) == 10, repr(avg)
assert avg.add(20) == 20, repr(avg)
@tester.add()
def rollingAverage2():
print()
avg = defl.RollingAverage(window=2)
assert avg.window == 2
assert avg.add(4) == 4, repr(avg)
assert avg.add(2) == 3, repr(avg)
assert avg.add(8) == 5, repr(avg)
assert avg.add(10) == 9, repr(avg)
assert avg.add(20) == 15, repr(avg)
@tester.add()
def rollingAverage4():
print()
avg = defl.RollingAverage(window=4)
assert avg.window == 4
assert avg.add(2) == 2, repr(avg)
assert avg.add(4) == 3, repr(avg)
assert avg.add(6) == 4, repr(avg)
assert avg.add(8) == 5, repr(avg)
val = 5
for i in range(10, 100, 2):
assert avg.add(i) == (val := val + 2), repr(avg)
@tester.add()
def baseMaker():
base10 = defl.BaseNumberSystemMaker(tokens='0123456789')
res = [''.join(base10.fromInt(i)) for i in range(12)]
Assert(res) == ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11']
base2 = defl.BaseNumberSystemMaker(tokens='01')
res = [''.join(base2.fromInt(i)) for i in range(12)]
Assert(res) == ['0', '1', '10', '11', '100', '101', '110', '111', '1000', '1001', '1010', '1011']
base2 = defl.BaseNumberSystemMaker(tokens='01')
res = [base2.fromInt(i) for i in range(12)]
Assert(res) == [
['0'],
['1'],
['1', '0'],
['1', '1'],
['1', '0', '0'],
['1', '0', '1'],
['1', '1', '0'],
['1', '1', '1'],
['1', '0', '0', '0'],
['1', '0', '0', '1'],
['1', '0', '1', '0'],
['1', '0', '1', '1'],
]
base2 = defl.BaseNumberSystemMaker(tokens='012')
res = [''.join(base2.fromInt(i)) for i in range(12)]
Assert(res) == ['0', '1', '2', '10', '11', '12', '20', '21', '22', '100', '101', '102']
base10 = defl.BaseNumberSystemMaker(tokens='0123456789')
for i in range(9999):
ba = base10.fromInt(i)
Assert(ba) == [x for x in str(i)]
Assert(base10.toInt(ba)) == i
@tester.add()
def humanUnits():
h = defl.ByteUnitFormat().human
Assert(h(1)) == (1, 'B')
Assert(h(1024 * 22)) == (22, 'K')
Assert(h(1024 * 1024 * 333)) == (333, 'M')
Assert(h(1024 * 1024 * 1024 * 4)) == (4, 'G')
Assert(h(1024 * 1024 * 1024 * 1024 * 5)) == (5, 'T')
Assert(h(1024 * 1024 * 1024 * 1024 * 1024 * 6)) == (6, 'P')
Assert(h(1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 6)) == (6144.0, 'P')
h = defl.ByteUnitFormat(fmt=lambda x, y: f'{x:,.0f}{y}').human
Assert(h(1)) == '1B'
Assert(h(1024 * 22)) == '22K'
Assert(h(1024 * 1024 * 333)) == '333M'
Assert(h(1024 * 1024 * 1024 * 4)) == '4G'
Assert(h(1024 * 1024 * 1024 * 1024 * 5)) == '5T'
Assert(h(1024 * 1024 * 1024 * 1024 * 1024 * 6)) == '6P'
Assert(h(1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 6)) == '6,144P'
log.info(tester.run())
tester.exitWithStatus()