def test_mod(self): def mod( oper1, oper2 ): # Since pythons int division uses floor its mod operator differs from most hardware. return oper1 - oper2 * int(oper1 / float(oper2)) for oper1, oper2 in self.values: self.assertEqual( Word(oper1) % Word(oper2), Word(mod(oper1, oper2)), '{oper1} % {oper2} = {r} != {a}'.format( oper1=oper1, oper2=oper2, r=int(Word(oper1) % Word(oper2)), a=oper1 % oper2, ))
def evaluate(self, oper1, oper2, func): result = getattr(self.word_type, func)(self.word_type(oper1), self.word_type(oper2)) exp_result = Word(getattr(type(oper1), func)(oper1, oper2)) self.assertEqual( result, exp_result, '{res} {exp_result}'.format(res=int(result), exp_result=int(exp_result)))
def test_shift_right(self): for oper1, oper2 in self.values: self.assertEqual( Word(oper1) >> Word(oper2), Word(oper1 >> (oper2 & (Word.bit_size - 1))))
def test_shift_left(self): for oper1, oper2 in self.values: self.assertEqual( Word(oper1) << Word(oper2), Word(oper1 << (oper2 & (Word.bit_size - 1))))
def test_inverter(self): for oper1, oper2 in self.values: self.assertEqual(~Word(oper1), Word(~oper1)) self.assertEqual(~Word(oper2), Word(~oper2))
def test_division(self): for oper1, oper2 in self.values: result = Word(oper1) / Word(oper2) self.assertEqual(result, Word(int(oper1 / float(oper2))))
def test_division(self): for oper1, oper2 in self.values: self.assertEqual(Float(oper1) / Float(oper2), Word(oper1 / oper2))
def test_multiplication(self): for oper1, oper2 in self.values: self.assertEqual(Float(oper1) * Float(oper2), Word(oper1 * oper2))
def test_subtraction(self): for oper1, oper2 in self.values: self.assertEqual(Float(oper1) - Float(oper2), Word(oper1 - oper2))
def test_addition(self): for oper1, oper2 in self.values: self.assertEqual(Float(oper1) + Float(oper2), Word(oper1 + oper2))