Source code for util.number_interval_generator_test

import statistics

import pytest

from util.number_interval_generator import (NumberInterval, NumberIntervalGenerator, POSITIVE_INFINITY)

NUMBER_OF_RANDOM_INTERVALS = 1_000


[docs] def test_equal_method(): number_interval_1 = NumberInterval(10, 20) number_interval_2 = NumberInterval(10, 20) assert number_interval_1 == number_interval_2 number_interval_3 = NumberInterval(10, 20) number_interval_4 = NumberInterval(10, 21) assert number_interval_3 != number_interval_4
[docs] def get_random_intervals( mean: int, standard_deviation: int, _lower_number_min_value: int = 0 ) -> list[NumberInterval]: lower_number_bounds: NumberInterval = NumberInterval( lower_bound=_lower_number_min_value, upper_bound=POSITIVE_INFINITY ) number_interval_generator = NumberIntervalGenerator( mean=mean, standard_deviation=standard_deviation, lower_number_bounds=lower_number_bounds, ) return [ number_interval_generator.generate_interval() for _ in range(NUMBER_OF_RANDOM_INTERVALS) ]
[docs] def get_random_numbers( mean: int, standard_deviation: int, _lower_number_min_value: int = 0 ) -> list[int]: return [ text_length.lower_bound for text_length in get_random_intervals( mean=mean, standard_deviation=standard_deviation, _lower_number_min_value=_lower_number_min_value, ) ]
[docs] @pytest.mark.parametrize( "text_length_mean,text_length_standard_deviation", [ (1_000, 100), (100, 50), (200, 10), ], ) def test_random_interval_distribution(text_length_mean, text_length_standard_deviation): random_numbers = get_random_numbers( mean=text_length_mean, standard_deviation=text_length_standard_deviation ) actual_mean = statistics.mean(random_numbers) actual_standard_deviation = statistics.stdev(random_numbers) assert abs(text_length_mean - actual_mean) < text_length_mean / 2 assert ( abs(text_length_standard_deviation - actual_standard_deviation) < text_length_standard_deviation / 2 )
[docs] @pytest.mark.parametrize("lower_number_min_value", [10, 100]) def test_random_numbers_intervals_are_in_bound(lower_number_min_value): mean = 200 stddev = 1_000 random_numbers = get_random_numbers( mean, stddev, _lower_number_min_value=lower_number_min_value ) assert min(random_numbers) >= lower_number_min_value
[docs] def test_text_length_upper_bound(): mean = 100 standard_deviation = 100 random_text_lengths = get_random_intervals(mean, standard_deviation) for random_text_length in random_text_lengths: if random_text_length.lower_bound >= 40: assert random_text_length.upper_bound - random_text_length.lower_bound >= 10 if random_text_length.lower_bound >= 200: assert random_text_length.upper_bound - random_text_length.lower_bound >= 20 assert ( random_text_length.upper_bound - random_text_length.lower_bound <= 200 )