"""Tests of illustrative, non-consensus simulation only.""" import sys import unittest from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parents[1] / 'scripts')) from simulate_pop_v02 import fee_example, progressive_example, qualify, simulate import random class FeeAndSimulationTests(unittest.TestCase): def test_example_fees_monotonic(self): for reward in (0, 1, 10, 100, 1000): self.assertEqual(fee_example(1, reward), 0) self.assertGreater(fee_example(3, reward), fee_example(2, reward)) self.assertLess(progressive_example(0), progressive_example(100)) def test_no_ticket_when_probability_zero(self): self.assertEqual(qualify(random.Random(1), 3, 0, 100), (False, fee_example(2, 100) + fee_example(3, 100))) def test_free_win_ends_without_fee(self): self.assertEqual(qualify(random.Random(1), 3, 1, 100), (True, 0)) def test_reproducible(self): a = simulate(5, 100, 123, .7, 2, 50) b = simulate(5, 100, 123, .7, 2, 50) self.assertEqual(a, b) def test_invalid_windows(self): with self.assertRaises(ValueError): fee_example(4, 1) if __name__ == '__main__': unittest.main()