Пример #1
0
 def test_label_symbols(self):
     actual_code = hackasm.assemble('''(LABEL1)
     @LABEL2
     (LABEL2)
     @LABEL1''')
     code_lines = actual_code.splitlines()
     self.assertEqual(len(code_lines), 2)
     self.assertEqual(int(code_lines[0], 2), 1)
     self.assertEqual(int(code_lines[1], 2), 0)
Пример #2
0
 def test_invalid_destination(self):
     with self.assertRaises(ValueError) as err:
         hackasm.assemble('X=0')
     self.assertEqual(str(err.exception), '"X" is wrong destination.')
Пример #3
0
 def test_a_command_gets_assembled(self):
     code = hackasm.assemble('@5')
     self.assertEqual(code, '0000000000000101')
Пример #4
0
 def test_r_predefined_symbol(self):
     for i in range(1, 15):
         actual_code = hackasm.assemble('@R' + str(i))
         self.assertEqual(int(actual_code, 2), i)
Пример #5
0
 def test_variable_symbols_memory_alocation(self):
     actual_code = hackasm.assemble('@a\n@b')
     code_lines = actual_code.splitlines()
     self.assertEqual(len(code_lines), 2)
     self.assertEqual(int(code_lines[0], 2), 16)
     self.assertEqual(int(code_lines[1], 2), 17)
Пример #6
0
 def test_this_predefined_symbol(self):
     actual_code = hackasm.assemble('@THIS')
     self.assertEqual(actual_code, '0' * 14 + '11')
Пример #7
0
 def test_screen_predefined_symbol(self):
     actual_code = hackasm.assemble('@SCREEN')
     self.assertEqual(int(actual_code, 2), 16384)
Пример #8
0
 def test_jle_jump(self):
     actual_code = hackasm.assemble('0;JLE')
     self.assertEqual(actual_code[13:], '110')
Пример #9
0
 def test_jmp_jump(self):
     actual_code = hackasm.assemble('0;JMP')
     self.assertEqual(actual_code[13:], '111')
Пример #10
0
 def test_jge_jump(self):
     actual_code = hackasm.assemble('0;JGE')
     self.assertEqual(actual_code[13:], '011')
Пример #11
0
 def test_jne_jump(self):
     actual_code = hackasm.assemble('0;JNE')
     self.assertEqual(actual_code[13:], '101')
Пример #12
0
 def test_jeq_jump(self):
     actual_code = hackasm.assemble('0;JEQ')
     self.assertEqual(actual_code[13:], '010')
Пример #13
0
 def test_a_max_val_gets_assembled(self):
     code = hackasm.assemble('@' + str(2**16 - 1))
     self.assertEqual(code, '1' * 16)
Пример #14
0
 def test_repeated_destination(self):
     with self.assertRaises(ValueError) as err:
         hackasm.assemble('AMA=0')
     self.assertEqual(str(err.exception),
                      '"A" destination appears multiple times.')
Пример #15
0
 def test_lcl_predefined_symbol(self):
     actual_code = hackasm.assemble('@LCL')
     self.assertEqual(actual_code, '0' * 15 + '1')
Пример #16
0
 def test_invalid_jump(self):
     with self.assertRaises(ValueError) as err:
         hackasm.assemble('0;JJJ')
     self.assertEqual(str(err.exception), '"JJJ" jump is not supported.')
Пример #17
0
 def test_arg_predefined_symbol(self):
     actual_code = hackasm.assemble('@ARG')
     self.assertEqual(actual_code, '0' * 14 + '10')
Пример #18
0
 def test_multiline_commands(self):
     actual_code = hackasm.assemble('AMD=1;JMP\nAMD=1;JMP')
     self.assertEqual(actual_code, '1110111111111111\n1110111111111111')
Пример #19
0
 def test_that_predefined_symbol(self):
     actual_code = hackasm.assemble('@THAT')
     self.assertEqual(actual_code, '0' * 13 + '100')
Пример #20
0
 def test_blank_lines(self):
     actual_code = hackasm.assemble('\n \n@0\n\n@0\n\t\n')
     self.assertEqual(actual_code, '0' * 16 + '\n' + '0' * 16)
Пример #21
0
 def test_kbd_predefined_symbol(self):
     actual_code = hackasm.assemble('@KBD')
     self.assertEqual(int(actual_code, 2), 24576)
Пример #22
0
 def test_spaces_in_command(self):
     actual_code = hackasm.assemble('\t@1\n\tAMD = 1; JMP')
     self.assertEqual(actual_code, '0000000000000001\n1110111111111111')
Пример #23
0
 def test_r_above_15_is_regular_variable(self):
     actual_code = hackasm.assemble('@R17')
     self.assertEqual(int(actual_code, 2), 16)
Пример #24
0
 def test_comments_in_command(self):
     actual_code = hackasm.assemble('@1//Comment')
     self.assertEqual(actual_code, '0000000000000001')
Пример #25
0
 def test_variable_symbols_usage(self):
     actual_code = hackasm.assemble('@a\n@a')
     code_lines = actual_code.splitlines()
     self.assertEqual(len(code_lines), 2)
     self.assertEqual(int(code_lines[0], 2), 16)
     self.assertEqual(int(code_lines[1], 2), 16)
Пример #26
0
 def test_whole_line_comment(self):
     actual_code = hackasm.assemble('//Comment\n@1')
     self.assertEqual(actual_code, '0000000000000001')
Пример #27
0
 def test_forbidden_label_names(self):
     with self.assertRaises(ValueError) as err:
         hackasm.assemble('(SCREEN)')
     self.assertEqual(
         str(err.exception),
         '"SCREEN" is predefined symbol. Hence cannot be label name.')
Пример #28
0
 def test_sp_predefined_symbol(self):
     actual_code = hackasm.assemble('@SP')
     self.assertEqual(actual_code, '0' * 16)
Пример #29
0
 def test_a_min_val_gets_assembled(self):
     code = hackasm.assemble('@0')
     self.assertEqual(code, '0' * 16)
Пример #30
0
 def test_d_destination(self):
     actual_code = hackasm.assemble('D=0')
     self.assertEqual(actual_code[10:13], '010')