mirror of
https://github.com/logos-blockchain/logos-blockchain-simulations.git
synced 2026-01-16 03:53:12 +00:00
90 lines
3.1 KiB
Python
90 lines
3.1 KiB
Python
import random
|
|
from copy import deepcopy
|
|
from unittest import TestCase
|
|
|
|
from protocol.nomssip import NomssipConfig
|
|
from protocol.temporalmix import TemporalMixConfig, TemporalMixType
|
|
from queuesim.config import Config
|
|
from queuesim.paramset import (
|
|
ExperimentID,
|
|
ParameterSet,
|
|
SessionID,
|
|
build_parameter_sets,
|
|
)
|
|
from sim.config import LatencyConfig, TopologyConfig
|
|
|
|
|
|
class TestParameterSet(TestCase):
|
|
def test_apply_to_config(self):
|
|
paramset = ParameterSet(
|
|
num_nodes=10000,
|
|
peering_degree=20000,
|
|
min_queue_size=30000,
|
|
transmission_rate=40000,
|
|
num_sent_msgs=50000,
|
|
num_senders=60000,
|
|
queue_type=TemporalMixType.NOISY_COIN_FLIPPING,
|
|
num_iterations=70000,
|
|
)
|
|
config = deepcopy(SAMPLE_CONFIG)
|
|
paramset.apply_to(config)
|
|
self.assertEqual(paramset.num_nodes, config.num_nodes)
|
|
self.assertEqual(paramset.peering_degree, config.nomssip.peering_degree)
|
|
self.assertEqual(
|
|
paramset.min_queue_size, config.nomssip.temporal_mix.min_queue_size
|
|
)
|
|
self.assertEqual(
|
|
paramset.transmission_rate, config.nomssip.transmission_rate_per_sec
|
|
)
|
|
self.assertEqual(paramset.num_sent_msgs, config.num_sent_msgs)
|
|
self.assertEqual(paramset.num_senders, config.num_senders)
|
|
self.assertEqual(paramset.queue_type, config.nomssip.temporal_mix.mix_type)
|
|
|
|
def test_build_parameter_sets(self):
|
|
cases = {
|
|
(ExperimentID.EXPERIMENT_1, SessionID.SESSION_1): pow(3, 4),
|
|
(ExperimentID.EXPERIMENT_2, SessionID.SESSION_1): pow(3, 5),
|
|
(ExperimentID.EXPERIMENT_3, SessionID.SESSION_1): pow(3, 5),
|
|
(ExperimentID.EXPERIMENT_4, SessionID.SESSION_1): pow(3, 6),
|
|
(ExperimentID.EXPERIMENT_1, SessionID.SESSION_2): pow(3, 4),
|
|
(ExperimentID.EXPERIMENT_4, SessionID.SESSION_2): pow(3, 6),
|
|
}
|
|
for queue_type in TemporalMixType:
|
|
for (exp_id, session_id), expected_cnt in cases.items():
|
|
sets = build_parameter_sets(exp_id, session_id, queue_type)
|
|
self.assertEqual(expected_cnt, len(sets), f"{exp_id}: {session_id}")
|
|
# Check if all parameter sets are unique
|
|
self.assertEqual(
|
|
len(sets),
|
|
len(set(list(map(str, sets)))),
|
|
f"{exp_id}: {session_id}",
|
|
)
|
|
|
|
|
|
SAMPLE_CONFIG = Config(
|
|
num_nodes=10,
|
|
nomssip=NomssipConfig(
|
|
peering_degree=3,
|
|
transmission_rate_per_sec=10,
|
|
msg_size=8,
|
|
temporal_mix=TemporalMixConfig(
|
|
mix_type=TemporalMixType.NONE,
|
|
min_queue_size=10,
|
|
seed_generator=random.Random(0),
|
|
),
|
|
skip_sending_noise=True,
|
|
),
|
|
topology=TopologyConfig(
|
|
seed=random.Random(0),
|
|
),
|
|
latency=LatencyConfig(
|
|
min_latency_sec=0,
|
|
max_latency_sec=0,
|
|
seed=random.Random(0),
|
|
),
|
|
num_sent_msgs=1,
|
|
msg_interval_sec=0.1,
|
|
num_senders=1,
|
|
sender_generator=random.Random(0),
|
|
)
|