-
Notifications
You must be signed in to change notification settings - Fork 1
/
TipoTest.py
71 lines (50 loc) · 1.68 KB
/
TipoTest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from tipos.Bool import Bool
from tipos.Fun import Fun
from tipos.Int import Int
from tipos.Paren import Paren
from tipos.Var import Var
from utils.Sustitucion import Sustitucion
from utils.UnifyException import UnifyException
import unittest
class TipoTest(unittest.TestCase):
def setUp(self):
pass
def test_unify_var(self):
a = Var('a')
b = Fun(Int(), Bool())
s = Sustitucion()
s.push(Var('a'), Fun(Int(), Bool()))
self.assertEqual(a.unify(b), s)
def test_unify_fun_fun(self):
a = Fun(Fun(Var('a'), Int()), Var('a'))
b = Fun(Var('b'), Fun(Var('c'), Int()))
s = Sustitucion()
s.push(Var('a'), Fun(Var('c'), Int()))
s.push(Var('b'), Fun(Fun(Var('c'), Int()), Int()))
self.assertEqual(a.unify(b), s)
def test_unify_fun_var(self):
a = Fun(Fun(Var('a'), Int()), Var('a'))
b = Var('b')
s = Sustitucion()
s.push(Var('b'), Fun(Fun(Var('a'), Int()), Var('a')))
self.assertEqual(a.unify(b), s)
def test_unify_bool_int(self):
a = Bool()
b = Int()
self.assertRaises(UnifyException, a.unify, b)
def test_unify_paren(self):
a = Fun(Paren(Paren(Fun(Var('a'), Int()))), Var('a'))
b = Fun(Paren(Var('b')), Paren(Fun(Var('c'), Paren(Int()))))
s = Sustitucion()
s.push(Var('b'), Fun(Fun(Var('c'), Int()), Int()))
s.push(Var('a'), Fun(Var('c'), Int()))
self.assertEqual(a.unify(b), s)
def test_unify_simple(self):
a = Fun(Var('a'), Var('b'))
b = Fun(Bool(), Int())
s = Sustitucion()
s.push(Var('a'), Bool())
s.push(Var('b'), Int())
self.assertEqual(a.unify(b), s)
suite = unittest.TestLoader().loadTestsFromTestCase(TipoTest)
unittest.TextTestRunner(verbosity=2).run(suite)