138 lines
4.9 KiB
Python
138 lines
4.9 KiB
Python
|
from hisscl import interp
|
||
|
import unittest
|
||
|
import io
|
||
|
|
||
|
class TestBasic(unittest.TestCase):
|
||
|
def test_assignment(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 26.04"), "TestBasic.test_assignment").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 26.04)
|
||
|
|
||
|
def test_block(self):
|
||
|
cfg = interp.Interp(io.StringIO("x { y = 26.04 }"), "TestBasic.test_block").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], [{'y': 26.04}])
|
||
|
|
||
|
def test_block_labels(self):
|
||
|
cfg = interp.Interp(io.StringIO("x y { z = 26.04 }"), "TestBasic.test_block_labels").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], [{'z': 26.04}])
|
||
|
self.assertEqual(cfg['x'][0].labels, ['y'])
|
||
|
|
||
|
class TestExpressions(unittest.TestCase):
|
||
|
def test_add(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 123 + 333"), "TestExpressions.test_add").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 456)
|
||
|
|
||
|
def test_sub(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 456 - 333"), "TestExpressions.test_sub").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 123)
|
||
|
|
||
|
def test_mul(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 128 * 2"), "TestExpressions.test_mul").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 256)
|
||
|
|
||
|
def test_div(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 256 / 2"), "TestExpressions.test_div").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 128)
|
||
|
|
||
|
def test_mod(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 256 % 3"), "TestExpressions.test_mod").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 1)
|
||
|
|
||
|
def test_eq(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 123 == 456"), "TestExpressions.test_eq").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], False)
|
||
|
|
||
|
def test_ne(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 123 != 456"), "TestExpressions.test_ne").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], True)
|
||
|
|
||
|
def test_lt(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 123 < 456"), "TestExpressions.test_lt").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], True)
|
||
|
|
||
|
def test_gt(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 123 > 456"), "TestExpressions.test_gt").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], False)
|
||
|
|
||
|
def test_le(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 123 <= 123"), "TestExpressions.test_le").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], True)
|
||
|
|
||
|
def test_ge(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = 1234 >= 123"), "TestExpressions.test_ge").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], True)
|
||
|
|
||
|
def test_or(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = true || false"), "TestExpressions.test_or").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], True)
|
||
|
|
||
|
def test_and(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = true && false"), "TestExpressions.test_and").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], False)
|
||
|
|
||
|
def test_not(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = !true"), "TestExpressions.test_not").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], False)
|
||
|
|
||
|
def test_neg(self):
|
||
|
cfg = interp.Interp(io.StringIO("x = -1"), "TestExpressions.test_neg").run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], -1)
|
||
|
|
||
|
class TestRefs(unittest.TestCase):
|
||
|
def test_var(self):
|
||
|
i = interp.Interp(io.StringIO("x = 123 + y"), "TestRefs.test_var")
|
||
|
i['y'] = 333
|
||
|
cfg = i.run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 456)
|
||
|
|
||
|
def test_index(self):
|
||
|
i = interp.Interp(io.StringIO("x = y[1]"), "TestRefs.test_index")
|
||
|
i['y'] = [123, 456, 789]
|
||
|
cfg = i.run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 456)
|
||
|
|
||
|
def test_func(self):
|
||
|
def y(a, b):
|
||
|
return a + b
|
||
|
i = interp.Interp(io.StringIO("x = y(123, 333)"), "TestRefs.test_func")
|
||
|
i['y'] = y
|
||
|
cfg = i.run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 456)
|
||
|
|
||
|
def test_func_expansion(self):
|
||
|
def y(a, b):
|
||
|
return a + b
|
||
|
i = interp.Interp(io.StringIO("x = y(z...)"), "TestRefs.test_func_expansion")
|
||
|
i['y'] = y
|
||
|
i['z'] = (123, 333)
|
||
|
cfg = i.run()
|
||
|
self.assertIn('x', cfg)
|
||
|
self.assertEqual(cfg['x'], 456)
|
||
|
|
||
|
def test_call_uncallable(self):
|
||
|
i = interp.Interp(io.StringIO("x = y(123, 333)"), "TestRefs.test_call_uncallable")
|
||
|
i['y'] = 0
|
||
|
with self.assertRaises(ValueError) as ctx:
|
||
|
cfg = i.run()
|
||
|
self.assertIn('cannot call non-callable object', str(ctx.exception))
|