Skip to content

Instantly share code, notes, and snippets.

@meepoSenpai
Created December 20, 2017 09:24
Show Gist options
  • Save meepoSenpai/9fe054de5fc2789f939f5427bf771144 to your computer and use it in GitHub Desktop.
Save meepoSenpai/9fe054de5fc2789f939f5427bf771144 to your computer and use it in GitHub Desktop.
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