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=7, numb_of_keys=10)) def test_dispersion(user_keypad): for _ in range(10000): pre_dispersion_graph = user_keypad.attribute_adjacency_graph() user_keypad.disperse_keypad() post_dispersion_graph = user_keypad.attribute_adjacency_graph() for attr, adj_graph in pre_dispersion_graph.items(): assert (adj_graph.isdisjoint(post_dispersion_graph[attr])) def test_shuffle_attrs(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 attribute gets to every key with a uniform distribution - every attribute is adjacent to every other attribute with uniform distribution - the order in which the customer_cipher move from key to key is random (i.e. the distance traveled is uniform) """ pre_shuffle_keypad = user_keypad.keypad user_keypad.partial_keypad_shuffle() post_shuffle_keypad = user_keypad.keypad 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)) ))