36 lines
1.2 KiB
Python
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()
|