class RegisterTest(unittest.TestCase): def setUp(self): self.registers = Registers() def test_init_creates_registers(self): self.assertNotIn('registers', Registers.__dict__) registers = Registers() self.assertIsInstance(registers.registers, dict) def test_parse_instruction(self): code, comparison = self.registers.parse_instruction('b inc 5 if a > 1') self.assertEqual(code, ('b', 'inc', 5)) self.assertEqual(comparison, ('a', '>', 1)) def test_is_true(self): self.registers.registers = {'a': 10} self.assertTrue(self.registers.is_true(('a', '>', 1))) self.assertFalse(self.registers.is_true(('a', '>', 10))) self.assertTrue(self.registers.is_true(('foo', '>', -1))) self.assertFalse(self.registers.is_true(('bar', '>', 0))) self.assertTrue(self.registers.is_true(('a', '<', 11))) self.assertFalse(self.registers.is_true(('a', '<', 9))) self.assertTrue(self.registers.is_true(('a', '==', 10))) self.assertFalse(self.registers.is_true(('a', '==', 1))) self.assertTrue(self.registers.is_true(('a', '!=', 1))) self.assertFalse(self.registers.is_true(('a', '!=', 10))) self.assertTrue(self.registers.is_true(('a', '>=', 9))) self.assertTrue(self.registers.is_true(('a', '>=', 10))) self.assertFalse(self.registers.is_true(('a', '>=', 11))) self.assertTrue(self.registers.is_true(('a', '<=', 11))) self.assertTrue(self.registers.is_true(('a', '<=', 10))) self.assertFalse(self.registers.is_true(('a', '<=', 9))) with self.assertRaises(RuntimeError): self.registers.is_true(('a', '===', 1)) def test_exececute_instruction(self): self.registers.registers = {} self.registers.execute_instruction(('a', 'inc', 1)) self.assertEqual(self.registers.registers['a'], 1) self.registers.execute_instruction(('a', 'inc', 2)) self.assertEqual(self.registers.registers['a'], 3) self.registers.execute_instruction(('b', 'dec', 1)) self.assertEqual(self.registers.registers['b'], -1) self.registers.execute_instruction(('b', 'dec', 2)) self.assertEqual(self.registers.registers['b'], -3) self.registers.execute_instruction(('b', 'inc', 10)) self.assertEqual(self.registers.registers['b'], 7) with self.assertRaises(RuntimeError): self.registers.execute_instruction(('a', 'mul', 2)) def test_exececute_instruction_stores_highest_value_ever(self): self.registers.registers = {} self.registers.execute_instruction(('a', 'inc', 10)) self.assertEqual(self.registers.highest_value_ever, 10) self.registers.execute_instruction(('a', 'dec', 10)) self.assertEqual(self.registers.highest_value_ever, 10) @patch.object(Registers, 'process_and_execute_instruction') def test_parse_file(self, mock_process): m = mock_open(read_data='foo\nbar\n') with patch('registers.open', m): self.registers.parse_file(sentinel.filename) m.assert_called_once_with(sentinel.filename) mock_process.assert_has_calls([call('foo\n'), call('bar\n')]) def test_get_largest_value(self): self.registers.registers = {'a': 1, 'b': -10, 'c': 5} self.assertEqual(self.registers.get_largest_value(), 5)