-
Notifications
You must be signed in to change notification settings - Fork 0
/
unit_tests.py
136 lines (121 loc) · 3.95 KB
/
unit_tests.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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
import unittest
class Example:
def __init__(self, pare_of_patters, answer):
self.ps = pare_of_patters
self.answer = answer
class EnclosureTest(unittest.TestCase):
def __init__(self, method):
super().__init__()
self.method = method
def work_tests(self, exs):
for ex in exs:
with self.subTest(i=ex):
self.assertEqual(self.method(ex.ps[0], ex.ps[1]), ex.answer, msg=ex.ps)
def without_t(self):
"""Проверка на образцах без t"""
examples = [
Example(
('e.Var',
'Iams c re en ed'), True),
Example(
('e.X A e.Y',
'e.X'), False),
]
self.work_tests(examples)
def with_repeated_t(self):
"""Проверка на образцах с кратными t-переменными"""
examples = [
Example(
('t.1 A t.2 e.1 t.1',
'e.1 AB e.2 A e.3'), False),
Example(
('t.1 A t.2 e.1 t.1',
'B A e.x t.3 A'), False),
Example(
('e.y0 t.y e.y1 t.y1 t.y C e.y2',
'C A e.x1 A B C e.x2'), False),
Example(
('t.1 A e.2 t.2 t.1',
'B A t.x e.3 B'), True),
Example(
('t.1 A t.2 e.1 t.1',
'B A e.x t.3 B A'), False),
Example(
('e.1 t.x e.2 t.2 t.x e.3',
'e.1 t.1 t.1 e.2 t.2 t.1 e.3'), True),
]
self.work_tests(examples)
def with_anchor_t(self):
"""Проверка на образцах с якорными t"""
examples = [
Example(
('t.x',
'A'), True),
]
self.work_tests(examples)
def with_float_t(self):
"""Проверка на образцах с плавающими t"""
examples = [
Example(
('t.X1 e.Y1',
'e.X2 t.Y2'), True),
Example(
('e.x t.y1 t.y2',
'A e.x B'), True)
]
self.work_tests(examples)
def with_s(self):
"""Проверка на образцах с s"""
examples = [
Example(
('s.1 s.2',
'A B'), True),
Example(
('s.1 e.x s.2',
's.6 s.5'), True),
Example(
('e.x s.y',
's.x. e.y'), False),
]
self.work_tests(examples)
def with_repeated_s(self):
"""Проверка на образцах с s"""
examples = [
Example(
('s.1 A s.1',
'B A B'), True),
Example(
('s.1 A s.1',
'B A A'), False),
Example(
('s.1 e.x s.1',
's.3 A s.3'), True),
]
self.work_tests(examples)
def not_linear(self):
"""Проверка на нелинейных образцах"""
examples = [
Example(
('e.Z e.Y e.Z',
'e.X B B A B e.X B'), True),
Example(
('e.1 e.2 e.2 e.1',
'A B A'), False),
Example(
('e.1 e.2 e.2 e.1',
'e.1 e.2 e.1'), False),
Example(
('e.1 e.2 e.2 e.1',
'ABA'), False),
]
self.work_tests(examples)
class WorkCreatingTest(unittest.TestCase):
"""Проверка правильности нахождения образцов в коде программы"""
def __init__(self, method):
super().__init__()
self.method = method
def programs_to_works(self):
examples = []
for ex in examples:
with self.subTest(i=ex):
self.assertEqual(self.method(ex.ps[0], ex.ps[1]), ex.aswer)