From ad83e1607e1cc0c117b11a0e694c2882a6a0aa01 Mon Sep 17 00:00:00 2001 From: Simon Forman Date: Sun, 24 Jun 2018 18:44:29 -0700 Subject: [PATCH] Writing tests. I'm backfilling tests to cover the functionality that I developed incrementally in the Jupyter notebook and nail it down with concrete examples. No doubt I'll uncover some bugs. --- test/test_type_inference.py | 84 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 test/test_type_inference.py diff --git a/test/test_type_inference.py b/test/test_type_inference.py new file mode 100644 index 0000000..06c1275 --- /dev/null +++ b/test/test_type_inference.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python +import unittest + +from joy.utils.polytypes import * +from joy.utils.stack import list_to_stack as __ + + +kv = lambda e: kav(__(e)) + + +globals().update(SYMBOLS) +globals().update(COMBINATORS) + + +class TestKleeneStar(unittest.TestCase): + + def test_sum(self): + expression = [ + (n1, (n2, (n3, s1))), # Three numbers in a stack. + sum, # builtin shadowed by SymbolJoyType + ] + # A function that puts a single number on the stack. + f = s0, (n0, s0) + self.assertEqual(kv(expression), [f]) + + def test_BS(self): + expression = pop, swap, rolldown, rest, rest, cons, cons + # ([a3 a4 ...0] a2 a1 a0 -- [a1 a2 ...0]) + f = (a0, (a1, (a2, ((a3, (a4, s0)), s1)))), ((a1, (a2, s0)), s1) + self.assertEqual(kv(expression), [f]) + + def test_enter(self): + expression = a1, (cons, s0), dip # a1 [cons] dip + # (a0 [...0] -- [a0 ...0] a1) + f = ((s0, (a0, s1)), (a1, ((a0, s0), s1))) + self.assertEqual(kv(expression), [f]) + + def test_2(self): + # [cons] i == cons + expression = (cons, s0), i + self.assertEqual(kv(expression), kv([cons])) + + +## +##for g in MC(dup, mul): +## print doc_from_stack_effect(*g) + + +## print doc_from_stack_effect(*f) +## print +## for sec in kav(e): +## print sec, doc_from_stack_effect(*sec) +## self.assertRaises(KeyError, lambda: {}[23]) +## def test_leave(self): +## def setUp(self): +## def tearDown(self): + + + +##DIP = CombinatorJoyType('dip', [dip], 44) +##DIPD = CombinatorJoyType('dipd', [dipd], 45) + +##l = [(s0, ((CONS, s2), (A[1], s0)))] +## +##e = (DIP, ()) +## +##h = kav(e, l[0]) +## +##for z in h: +## print doc_from_stack_effect(*z) + +## +## +## +## +## +##expression = (a1, (a3, ((CONS, s0), (DIPD, ())))) +## +##for sec in kav(expression): +## print doc_from_stack_effect(*sec) +## + +if __name__ == '__main__': + unittest.main() -- 2.11.0