implement keypad ABC

This commit is contained in:
2025-09-08 12:11:29 -05:00
parent 6c07d62cbe
commit aa2e949938
117 changed files with 509 additions and 8230 deletions

View File

@@ -1,41 +1,34 @@
import pytest
import numpy as np
from src.keypad import Keypad
from src.tower_shuffle import TowerShuffle
from src.keypad.keypad import (
RandomSplitShuffleKeypad,
RandomShuffleKeypad,
SlidingSplitShuffleKeypad,
SlidingTowerShuffleKeypad,
)
def test_keypad():
keypad = Keypad(
def test_key_entry():
keypad = RandomShuffleKeypad(
keypad=np.array([
[8, 9, 10, 11],
[0, 5, 2, 3],
[4, 1, 6,7]
]), k= 3, p=4, keypad_cache=[], tower_shuffler=TowerShuffle.new(3*4))
[4, 1, 6, 7]
]), k=3, p=4)
assert keypad.key_entry([8, 5, 6, 11]) == [0, 1, 2, 0]
assert keypad.key_entry([8, 5, 6, 11]) == [0,1,2,0]
def test_split_shuffle():
p = 4 # properties_per_key
k = 3 # number_of_keys
keypad = Keypad.new_keypad(k, p)
@pytest.mark.parametrize(
"keypad_type, number_of_keys, properties_per_key",
[
(RandomShuffleKeypad, 3, 4),
(RandomSplitShuffleKeypad, 3, 4),
(SlidingTowerShuffleKeypad, 3, 4),
(SlidingSplitShuffleKeypad, 3, 4),
]
)
def test_keypad_shuffle(keypad_type, number_of_keys, properties_per_key):
keypad = keypad_type.new_keypad(number_of_keys, properties_per_key)
print(keypad.keypad)
keypad.split_shuffle()
keypad.shuffle()
print(keypad.keypad)
def test_full_shuffle():
p = 4 # properties_per_key
k = 3 # number_of_keys
keypad = Keypad.new_keypad(k, p)
print(keypad.keypad)
keypad.full_shuffle()
print(keypad.keypad)
def test_tower_shuffle():
p = 4 # properties_per_key
k = 3 # number_of_keys
keypad = Keypad.new_keypad(k, p)
print()
for _ in range(10):
print(keypad.keypad)
keypad.tower_shuffle()