Files
potatium/tests/test_pop_simulation.py

36 lines
1.2 KiB
Python

"""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()