import pytest from src.pseudo_nkode_api import UserDBModel from src.utils import generate_random_index_interface, disperse_interface from src.models import EncipheredNKode from src.user_cipher_keys import UserCipherKeys def attribute_adjacency_graph(interface: list[list[int]]) -> dict[int, set[int]]: graph = {} for attr_set in interface: for attr in attr_set: graph[attr] = set(attr_set) graph[attr].remove(attr) return graph @pytest.mark.parametrize("user", [ ( UserDBModel( username="test", nkode=EncipheredNKode( code="", mask="" ), user_keys=UserCipherKeys.new_user_encipher_keys( numb_of_keys=10, attrs_per_key=7, set_values=list(range(7)) ), user_interface=generate_random_index_interface(10, 7), ) ) ]) def test_dispersion(user): pre_dispersion_interface = user.user_interface post_dispersion_interface = disperse_interface(user.user_interface) pre_dispresion_graph = attribute_adjacency_graph(pre_dispersion_interface) post_dispersion_graph = attribute_adjacency_graph(post_dispersion_interface) for _ in range(10000): for attr, adj_graph in pre_dispresion_graph.items(): assert (adj_graph.isdisjoint(post_dispersion_graph[attr]))