100 lines
3.7 KiB
Python
Executable file
100 lines
3.7 KiB
Python
Executable file
#!/usr/bin/python3
|
|
# copyright 2023 weber yann
|
|
#
|
|
# this file is part of rpnifs.
|
|
#
|
|
# geneifs is free software: you can redistribute it and/or modify
|
|
# it under the terms of the gnu general public license as published by
|
|
# the free software foundation, either version 3 of the license, or
|
|
# (at your option) any later version.
|
|
#
|
|
# geneifs is distributed in the hope that it will be useful,
|
|
# but without any warranty; without even the implied warranty of
|
|
# merchantability or fitness for a particular purpose. see the
|
|
# gnu general public license for more details.
|
|
#
|
|
# you should have received a copy of the gnu general public license
|
|
# along with geneifs. if not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
|
|
import copy
|
|
import pickle
|
|
import random
|
|
import sys
|
|
|
|
import unittest
|
|
|
|
try:
|
|
import pyrpn
|
|
except (ImportError, NameError) as e:
|
|
print("error importing pyrpn. try to run make.",
|
|
file=sys.stderr)
|
|
raise e
|
|
|
|
|
|
class TestRpnIterSequence(unittest.TestCase):
|
|
""" Testing RPNIterExpr sequence methods """
|
|
|
|
def test_len(self):
|
|
""" Testing RPNIterExpr.__len__ with various values/constants """
|
|
tests = [([pyrpn.const.POS_XY, pyrpn.const.RESULT_RGB, (1024,1024)],
|
|
5),
|
|
([pyrpn.const.POS_LINEAR, pyrpn.const.RESULT_CONST_RGBA, (1024,), (255,0,0,255)],
|
|
1),
|
|
([pyrpn.const.POS_XY, pyrpn.const.RESULT_CONST_RGBA, (640,480), (255,0,0,255)],
|
|
2),
|
|
([pyrpn.const.POS_LINEAR, pyrpn.const.RESULT_RGBA, (1024,)],
|
|
5),
|
|
([pyrpn.const.POS_XDIM, pyrpn.const.RESULT_RGB, (4, 2, 2, 640, 480)],
|
|
7),
|
|
]
|
|
for args, expt_len in tests:
|
|
rif=pyrpn.RPNIterExpr(*args)
|
|
with self.subTest(rif=rif, expt_len=expt_len, args=args):
|
|
self.assertEqual(expt_len, len(rif))
|
|
|
|
|
|
|
|
class TestRPNIterMapping(unittest.TestCase):
|
|
""" Testing RPNIterExpr mapping methods """
|
|
|
|
|
|
def test_keys(self):
|
|
""" Testing RPNIterExpr.__getitem__ with various values/constants """
|
|
tests = [([pyrpn.const.POS_XY, pyrpn.const.RESULT_RGB, (1024,1024)],
|
|
['X', 'Y', 'R', 'G', 'B']),
|
|
([pyrpn.const.POS_LINEAR, pyrpn.const.RESULT_CONST_RGBA, (1024,), (255,0,0,255)],
|
|
['X']),
|
|
([pyrpn.const.POS_XY, pyrpn.const.RESULT_CONST_RGBA, (640,480), (255,0,0,255)],
|
|
['X', 'Y']),
|
|
([pyrpn.const.POS_LINEAR, pyrpn.const.RESULT_RGBA, (1024,)],
|
|
['X', 'R', 'G', 'B', 'A']),
|
|
([pyrpn.const.POS_XDIM, pyrpn.const.RESULT_RGB, (4, 2, 2, 640, 480)],
|
|
['D0', 'D1', 'D2', 'D3', 'R', 'G', 'B']),
|
|
]
|
|
for args, keys in tests:
|
|
rif=pyrpn.RPNIterExpr(*args)
|
|
for curkey in keys:
|
|
with self.subTest(rif=rif, key=curkey):
|
|
expr = rif[curkey]
|
|
expt = set(keys)
|
|
self.assertEqual(set(rif.keys()), expt)
|
|
for key, value in rif.items():
|
|
with self.subTest(item=(key, value), id1=id(rif[key]),
|
|
id2=id(value), rif=rif):
|
|
self.assertEqual(rif[key], value)
|
|
|
|
def test_assignement(self):
|
|
""" Testing RPNIterExpr.__setitem__ """
|
|
rif = pyrpn.RPNIterExpr(pyrpn.const.POS_XY, pyrpn.const.RESULT_RGB, (1024,1024))
|
|
rif['X'] = 'A0 A1 +'
|
|
for _ in range(1000):
|
|
a, b = [random.randint(0,0xFFFF) for _ in range(2)]
|
|
args = (a,b, 0,0,0)
|
|
self.assertEqual(a+b, rif['X'].eval(*args))
|
|
self.assertEqual(0, rif['Y'].eval(*args))
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|
|
|