Files
past-project-past_code_cc2650/python_test_code/uni/rearrange_channel.py
T

105 lines
3.4 KiB
Python

import unittest
from random import randint
from typing import List, Optional
REC_CHANNEL_COUNT = 16
def to_channel_table(*channel: int) -> List[bool]:
return [i in channel for i in range(REC_CHANNEL_COUNT)]
def rearrange_channel_mux_table(channel_table: List[bool]) -> Optional[List[int]]:
enable_channel_number = 0
last_enable_channel = 0
for i in range(REC_CHANNEL_COUNT):
if channel_table[i]:
last_enable_channel = i
enable_channel_number += 1
if enable_channel_number == 0:
return None
channel_mux = [0 for _ in range(REC_CHANNEL_COUNT)]
if enable_channel_number == 1:
channel_mux[0] = last_enable_channel
return channel_mux
next_enable_channel = last_enable_channel
channel_mux_index = last_enable_channel
channel_mux[channel_mux_index] = last_enable_channel
channel_mux_index -= 1
while channel_mux_index >= 0:
i = next_enable_channel - 1
while i >= 0:
if channel_table[i]:
next_enable_channel = i
break
i -= 1
if i < 0:
break
else:
channel_mux[channel_mux_index] = next_enable_channel
channel_mux_index -= 1
offset = last_enable_channel - channel_mux_index
while channel_mux_index >= 0:
channel_mux[channel_mux_index] = channel_mux[channel_mux_index + offset]
channel_mux_index -= 1
return channel_mux
class UniRearrangeMuxChannelTest(unittest.TestCase):
def test_empty_channel(self):
self.assertIsNone(rearrange_channel_mux_table(to_channel_table()))
def test_single_channel(self):
for _ in range(3):
c = randint(0, REC_CHANNEL_COUNT - 1)
expect = [c if i == 0 else 0 for i in range(REC_CHANNEL_COUNT)]
print(expect)
self.assertEqual(expect, rearrange_channel_mux_table(to_channel_table(c)))
def test_two_channel(self):
self.assertEqual([2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
rearrange_channel_mux_table(to_channel_table(1, 2)))
self.assertEqual([2, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
rearrange_channel_mux_table(to_channel_table(2, 1)))
self.assertEqual([3, 7, 2, 3, 7, 2, 3, 7, 0, 0, 0, 0, 0, 0, 0, 0],
rearrange_channel_mux_table(to_channel_table(7, 3, 2)))
def test_many_channel(self):
self.assertEqual([5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
rearrange_channel_mux_table(to_channel_table(5)))
self.assertEqual([2, 5, 2, 5, 2, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
rearrange_channel_mux_table(to_channel_table(2, 5)))
self.assertEqual([1, 3, 5, 1, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
rearrange_channel_mux_table(to_channel_table(1, 3, 5)))
self.assertEqual([3, 5, 0, 1, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
rearrange_channel_mux_table(to_channel_table(0, 1, 3, 5)))
self.assertEqual([5, 0, 1, 2, 3, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
rearrange_channel_mux_table(to_channel_table(0, 1, 2, 3, 5)))
self.assertEqual([0, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ],
rearrange_channel_mux_table(to_channel_table(0, 1, 2, 3, 4, 5)))
if __name__ == '__main__':
unittest.main()