Created
December 20, 2017 09:24
-
-
Save meepoSenpai/9fe054de5fc2789f939f5427bf771144 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
from hamming_code import HammingCode, HCResult | |
from stack_machine import StackMachine, SMState | |
class TestHammingDecoder(unittest.TestCase): | |
def setUp(self): | |
self.hc = HammingCode() | |
def test_decode_valid(self): | |
self.assertEqual((self.hc.decode((1, 0, 1, 0, 0, 1, 0, 1, 0, 0))), | |
((1, 0, 1, 0, 0), HCResult.VALID)) | |
self.assertEqual((self.hc.decode((0, 0, 0, 0, 1, 0, 1, 0, 1, 1))), | |
((0, 0, 0, 0, 1), HCResult.VALID)) | |
def test_decode_uncorrectable(self): | |
self.assertEqual((self.hc.decode((0, 0, 1, 0, 0, 0, 1, 1, 0, 1))), | |
(None, HCResult.UNCORRECTABLE)) | |
self.assertEqual((self.hc.decode((0, 1, 1, 1, 0, 0, 1, 1, 1, 0))), | |
(None, HCResult.UNCORRECTABLE)) | |
def test_decode_wrong_parity(self): | |
self.assertEqual((self.hc.decode((0, 1, 0, 0, 0, 0, 1, 1, 0, 0))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((0, 0, 1, 0, 0, 0, 0, 1, 1, 0))), | |
((0, 0, 1, 0, 0), HCResult.CORRECTED)) | |
def test_decode_flipped_bit(self): | |
self.assertEqual((self.hc.decode((0, 0, 0, 0, 0, 0, 1, 1, 0, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((1, 1, 0, 0, 0, 0, 1, 1, 0, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((0, 1, 1, 0, 0, 0, 1, 1, 0, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((0, 1, 0, 1, 0, 0, 1, 1, 0, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((0, 1, 0, 0, 1, 0, 1, 1, 0, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((0, 1, 0, 0, 0, 1, 1, 1, 0, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((0, 1, 0, 0, 0, 0, 0, 1, 0, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((0, 1, 0, 0, 0, 0, 1, 0, 0, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((0, 1, 0, 0, 0, 0, 1, 1, 1, 1))), | |
((0, 1, 0, 0, 0), HCResult.CORRECTED)) | |
self.assertEqual((self.hc.decode((1, 1, 0, 1, 1, 1, 0, 0, 1, 1))), | |
((1, 1, 0, 1, 1), HCResult.CORRECTED)) | |
class TestStackMachine(unittest.TestCase): | |
def setUp(self): | |
self.sm = StackMachine(callback=None) | |
self.sm.do((0, 0, 0, 1, 0)) | |
self.sm.do((0, 1, 1, 0, 0)) | |
self.sm.do((0, 0, 1, 0, 0)) | |
def test_addition(self): | |
self.assertEqual(self.sm.do((1, 0, 1, 0, 0)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 1, 0, 0, 0, 0)) | |
self.sm.do((1, 0, 1, 0, 0)) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 1, 0, 0, 1, 0)) | |
def test_substraction(self): | |
self.assertEqual(self.sm.do((1, 0, 1, 0, 1)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 1, 0, 0, 0)) | |
self.sm.do((1, 0, 1, 0, 1)) | |
self.assertEqual(self.sm.top(), (1, 1, 1, 1, 1, 0, 1, 0)) | |
def test_dup_del(self): | |
self.assertEqual(self.sm.do((1, 0, 0, 0, 1)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 0, 1, 0, 0)) | |
self.assertEqual(self.sm.do((1, 0, 0, 1, 0)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 0, 1, 0, 0)) | |
def test_swap(self): | |
self.assertEqual(self.sm.do((1, 0, 0, 1, 1)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 1, 1, 0, 0)) | |
def test_mul_div_mod(self): | |
self.assertEqual(self.sm.do((1, 0, 1, 1, 0)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 1, 1, 0, 0, 0, 0), | |
msg="Mul not working") | |
self.assertEqual(self.sm.do((1, 0, 1, 1, 1)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 0, 0, 0, 0), | |
msg="Div not working") | |
self.sm.do((0, 1, 0, 0, 1)) | |
self.sm.do((0, 0, 0, 1, 0)) | |
self.assertEqual(self.sm.do((1, 1, 0, 0, 0)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 0, 0, 0, 1), | |
msg="Mod not working") | |
def test_shift(self): | |
self.sm.do((0, 0, 0, 0, 1)) | |
self.assertEqual(self.sm.do((1, 1, 0, 0, 1)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 1, 0, 0, 0), | |
msg="Left shift not working") | |
self.sm.do((0, 0, 0, 0, 1)) | |
self.assertEqual(self.sm.do((1, 1, 0, 1, 0)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 0, 1, 0, 0), | |
msg="Right shift not working") | |
def test_lessthan_equals(self): | |
self.assertEqual(self.sm.do((1, 1, 0, 1, 1)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 0, 0, 0, 0), | |
msg="Less than not working") | |
self.sm.do((0, 0, 0, 0, 1)) | |
self.sm.do((1, 1, 0, 1, 1)) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 0, 0, 0, 1), | |
msg="Less than not working") | |
self.assertEqual(self.sm.do((1, 1, 1, 0, 0)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 0, 0, 0, 0), | |
msg="Equals not working") | |
def test_not_and(self): | |
self.assertEqual(self.sm.do((1, 1, 1, 0, 1)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (1, 1, 1, 1, 1, 0, 1, 1), | |
msg="NOT not working") | |
self.assertEqual(self.sm.do((1, 1, 1, 1, 0)), SMState.RUNNING) | |
self.assertEqual(self.sm.top(), (0, 0, 0, 0, 1, 0, 0, 0), | |
msg="AND not working") | |
def tearDown(self): | |
self.assertEqual(self.sm.do((1, 0, 0, 0, 0)), SMState.STOPPED) | |
if __name__ == "__main__": | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment