import pytest from src.user_keypad import UserKeypad from src.models import KeypadSize @pytest.fixture() def user_keypad(): return UserKeypad.create(keypad_size=KeypadSize(props_per_key=5, numb_of_keys=5)) def test_dispersion(user_keypad): for _ in range(10000): pre_dispersion_graph = user_keypad.property_adjacency_graph() user_keypad.disperse_keypad() post_dispersion_graph = user_keypad.property_adjacency_graph() for prop, adj_graph in pre_dispersion_graph.items(): assert (adj_graph.isdisjoint(post_dispersion_graph[prop])) def test_shuffle_props(user_keypad): """there's no easy way to test this. At some point we'll have to run this code thousands of time to see if we get expected statistical outcomes like: - every property gets to every key with a uniform distribution - every property is adjacent to every other property with uniform distribution - the order in which the cipher move from key to key is random (i.e. the distance traveled is uniform) """ pre_shuffle_keypad = user_keypad.keypad.copy() print("") print(user_keypad.keypad_matrix()) user_keypad.split_shuffle() post_shuffle_keypad = user_keypad.keypad.copy() print(user_keypad.keypad_matrix()) assert (not all( post_shuffle_keypad[idx] == pre_shuffle_keypad[idx] for idx in range(len(post_shuffle_keypad)) )) assert (not all( post_shuffle_keypad[idx] != pre_shuffle_keypad[idx] for idx in range(len(post_shuffle_keypad)) ))