#!/usr/bin/env python

import unittest
import src.main as m


class EfunTest(unittest.TestCase):
    def setUp(self):
        self.e = m.Efun()
        self.test_data = [
            (-4096, 0x2000, (0x20, 0x00)),
            (-8192, 0x0000, (0x00, 0x00)),
            (0, 0x4000, (0x40, 0x00)),
            (2048, 0x5000, (0x50, 0x00)),
            (8191, 0x7F7F, (0x7F, 0x7F)),
            (6111, 0x6F5F, (0x6F, 0x5F)),
            (340, 0x4254, (0x42, 0x54)),
            (-2628, 0x2B3C, (0x2B, 0x3C)),
            (-255, 0x3E01, (0x3E, 0x01)),
            (-6902, 0x0A0A, (0x0A, 0x0A)),
            (-8151, 0x0029, (0x00, 0x29)),
            (-113, 0x3F0F, (0x3F, 0x0F)),
            (512, 0x4400, (0x44, 0x00)),
            (3967, 0x5E7F, (0x5E, 0x7F)),
        ]

    def test_extract(self):
        for item in self.test_data:
            self.assertEqual(self.e._extract_two_bytes(item[1]), item[2])

    def test_decode(self):
        for item in self.test_data:
            by1, by2 = self.e._extract_two_bytes(item[1])
            self.e._decode(by1, by2)
            self.assertEqual(self.e.dec_byte, item[0])

    def test_encode(self):
        for item in self.test_data:
            self.e._encode(item[0])
            self.assertEqual(self.e.enc_byte, hex(item[1]))