implement and test evilkode

This commit is contained in:
2024-12-11 10:15:18 -06:00
parent 1cdfc9b927
commit 80283a576e
7 changed files with 377 additions and 6 deletions

45
tests/test_evilkode.py Normal file
View File

@@ -0,0 +1,45 @@
import random
import pytest
from src.evilkode import Evilkode, Observation
from src.keypad import Keypad
@pytest.fixture
def observations(number_of_keys, properties_per_key, passcode_len):
k = number_of_keys
p = properties_per_key
n = passcode_len
nkode = [random.randint(0, k*p-1) for _ in range(n)]
keypad = Keypad.new_keypad(k, p)
def obs_gen():
for _ in range(100): # finite number of yields
yield Observation(
keypad=keypad.keypad.copy(),
key_selection=keypad.key_entry(target_passcode=nkode)
)
keypad.partial_shuffle()
return obs_gen()
@pytest.mark.parametrize(
"number_of_keys, properties_per_key, passcode_len",
[
(5, 3, 4), # Test case 1
(10, 5, 6), # Test case 2
(8, 4, 5), # Test case 3
]
)
def test_evilkode(number_of_keys, properties_per_key, passcode_len, observations):
evilkode = Evilkode(
observations=observations,
number_of_keys=number_of_keys,
properties_per_key=properties_per_key,
passcode_len=passcode_len,
)
evilout = evilkode.run()
assert evilout.iterations > 1

View File

@@ -12,12 +12,20 @@ def test_keypad():
assert keypad.key_entry([8, 5, 6, 11]) == [0,1,2,0]
def test_shuffle():
def test_partial_shuffle():
p = 4 # properties_per_key
k = 3 # number_of_keys
keypad = Keypad.new_keypad(k, p)
print(keypad.keypad)
keypad.partial_shuffle()
print(keypad.keypad)
keypad.partial_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)