-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.py
executable file
·178 lines (132 loc) · 5.81 KB
/
test.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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# import modulu zodpovědného za testy jednotek
import unittest
######################### - Změny
import app.ImageParser as image_png # jine importy
from app.parsers.brainfuck import BrainFuck
from app.parsers.brainloller import BrainLoller
from app.ImageParser import PngReader
######################### -/ Změny
#
# třída s dočasným „falešným“ výstupem
#
import sys
class FakeStdOut:
def write(self, *args, **kwargs):
pass
def flush(self):
pass
#
# třídy obsahující testy
#
class TestBrainfuck(unittest.TestCase):
"""testuje chování interpretru brainfucku"""
def setUp(self):
self.BF = BrainFuck
# skrytí výstupu
self.out = sys.stdout
sys.stdout = FakeStdOut()
def tearDown(self):
sys.stdout = self.out
def test_bf_01(self):
"""vynulování aktuální, ale pouze aktuální, buňky"""
program = self.BF('[-]', memory=b'\x03\x02', memory_pointer=1)
self.assertEqual(program.get_memory(), b'\x03\x00')
def test_bf_02(self):
"""vynulování všech nenulových buněk doleva"""
program = self.BF('[[-]<]', memory=b'\x03\x03\x00\x02\x02', memory_pointer=4)
self.assertEqual(program.get_memory(), b'\x03\x03\x00\x00\x00')
def test_bf_03(self):
"""přesun na první nenulovou buňku doleva"""
program = self.BF('[<]', memory=b'\x03\x03\x00\x02\x02', memory_pointer=4)
self.assertEqual(program.memory_pointer, 2)
def test_bf_04(self):
"""přesun na první nenulovou buňku doprava"""
program = self.BF('[>]', memory=b'\x03\x03\x00\x02\x02')
self.assertEqual(program.memory_pointer, 2)
def test_bf_05(self):
"""destruktivní přičtení aktuální buňky k buňce následující"""
program = self.BF('[>+<-]', memory=b'\x03\x03')
self.assertEqual(program.get_memory(), b'\x00\x06')
def test_bf_06(self):
"""nedestruktivní přičtení aktuální buňky k buňce následující"""
program = self.BF('[>+>+<<-]>>[<<+>>-]', memory=b'\x03\x03')
self.assertEqual(program.get_memory(), b'\x03\x06\x00')
def test_bf_07(self):
"""destruktivní odečtení aktuální buňky od buňky následující"""
program = self.BF('[>-<-]', memory=b'\x03\x05')
self.assertEqual(program.get_memory(), b'\x00\x02')
def test_bf_11(self):
r"""HelloWorld s \n"""
with open( 'test_data/hello1.b' ) as stream:
data = stream.read()
program = self.BF(data)
self.assertEqual(program.output, 'Hello World!\n')
def test_bf_12(self):
r"""HelloWorld bez \n"""
with open( 'test_data/hello2.b' ) as stream:
data = stream.read()
program = self.BF(data)
self.assertEqual(program.output, 'Hello World!');
class TestBrainfuckWithInput(unittest.TestCase):
"""testuje chování interpretru brainfucku pro programy se vstupem"""
def setUp(self):
self.BF = BrainFuck
# skrytí výstupu
self.out = sys.stdout
sys.stdout = FakeStdOut()
def tearDown(self):
sys.stdout = self.out
def test_bf_input_2(self):
"""numwarp.b pro vstup '123'"""
with open( 'test_data/numwarp_input.b' ) as stream:
data = stream.read()
program = self.BF(data)
self.assertEqual(program.output, ' /\\\n /\\\n /\\ /\n / \n \\ \\/\n \\\n \n')
class TestPNG(unittest.TestCase):
"""testuje korektní načítání podmnožiny PNG-obrázků"""
def setUp(self):
self.png = image_png.PngReader
# skrytí výstupu
self.out = sys.stdout
sys.stdout = FakeStdOut()
def tearDown(self):
sys.stdout = self.out
def test_png_01(self):
"""umíme jen PNG"""
self.assertRaises( image_png.PNGWrongHeaderError, self.png, 'test_data/sachovnice.jpg' )
def test_png_02(self):
"""umíme jen některá PNG"""
self.assertRaises( image_png.PNGNotImplementedError, self.png, 'test_data/sachovnice_paleta.png' )
def test_png_03(self):
"""načtení jednoduchého PNG-obrázku"""
image = self.png('test_data/sachovnice.png')
self.assertEqual( image.rgb, [[(255, 0, 0), (0, 255, 0), (0, 0, 255)], [(255, 255, 255), (127, 127, 127), (0, 0, 0)], [(255, 255, 0), (255, 0, 255), (0, 255, 255)]] )
class TestBrainloller(unittest.TestCase):
"""testuje chování interpretru brainlolleru"""
def setUp(self):
self.BF = BrainFuck
self.BL = BrainLoller
# skrytí výstupu
self.out = sys.stdout
sys.stdout = FakeStdOut()
def tearDown(self):
sys.stdout = self.out
def test_bl_1a(self):
"""načtení dat z obrázku HelloWorld.png"""
objekt = self.BL('test_data/HelloWorld.png')
self.assertEqual(objekt.data, '>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.')
def test_bl_1b(self):
"""vykonání programu z obrázku HelloWorld.png"""
objekt = self.BL('test_data/HelloWorld.png')
self.assertEqual(objekt.program.output, 'Hello World!')
# def test_bl_2(self):
# """vykonání programu z obrázku LostKindfom.png"""
# objekt = self.BL('test_data/TheLostKingdom.png')
# self.assertEqual(objekt.program.output, 'Hello World!')
#
# zajištění spuštění testů při zavolání souboru z příkazové řádky
#
if __name__ == '__main__':
unittest.main()