forked from sass/tipibot
Added tests, fix README.
This commit is contained in:
86
tests/test_economy_pure.py
Normal file
86
tests/test_economy_pure.py
Normal file
@@ -0,0 +1,86 @@
|
||||
"""Tests for the pure (no-database) economy math."""
|
||||
|
||||
import random
|
||||
from datetime import timedelta
|
||||
|
||||
from core import economy
|
||||
|
||||
|
||||
class TestLevels:
|
||||
def test_milestones(self):
|
||||
assert economy.get_level(0) == 1
|
||||
assert economy.get_level(249) == 4
|
||||
assert economy.get_level(250) == 5
|
||||
assert economy.get_level(1000) == 10
|
||||
assert economy.get_level(4000) == 20
|
||||
assert economy.get_level(9000) == 30
|
||||
|
||||
def test_exp_for_level_is_inverse(self):
|
||||
for level in range(1, 41):
|
||||
exp = economy.exp_for_level(level)
|
||||
assert economy.get_level(exp) == level
|
||||
if level > 1:
|
||||
assert economy.get_level(exp - 1) == level - 1
|
||||
|
||||
def test_negative_exp_clamps_to_level_1(self):
|
||||
assert economy.get_level(-500) == 1
|
||||
|
||||
def test_role_names(self):
|
||||
assert economy.level_role_name(1) == "TipiNOOB"
|
||||
assert economy.level_role_name(4) == "TipiNOOB"
|
||||
assert economy.level_role_name(5) == "TipiGRINDER"
|
||||
assert economy.level_role_name(10) == "TipiHUSTLER"
|
||||
assert economy.level_role_name(20) == "TipiCHAD"
|
||||
assert economy.level_role_name(30) == "TipiLEGEND"
|
||||
assert economy.level_role_name(99) == "TipiLEGEND"
|
||||
|
||||
|
||||
class TestGambleExp:
|
||||
def test_tiers(self):
|
||||
assert economy.gamble_exp(0) == 0
|
||||
assert economy.gamble_exp(9) == 0
|
||||
assert economy.gamble_exp(10) == 5
|
||||
assert economy.gamble_exp(99) == 5
|
||||
assert economy.gamble_exp(100) == 10
|
||||
assert economy.gamble_exp(999) == 10
|
||||
assert economy.gamble_exp(1_000) == 15
|
||||
assert economy.gamble_exp(9_999) == 15
|
||||
assert economy.gamble_exp(10_000) == 20
|
||||
assert economy.gamble_exp(99_999) == 20
|
||||
assert economy.gamble_exp(100_000) == 25
|
||||
|
||||
def test_cap(self):
|
||||
assert economy.gamble_exp(10_000_000) == 25
|
||||
|
||||
|
||||
class TestFormatTd:
|
||||
def test_hours(self):
|
||||
assert economy.format_td(timedelta(hours=1, minutes=23, seconds=45)) == "1t 23m"
|
||||
|
||||
def test_minutes(self):
|
||||
assert economy.format_td(timedelta(minutes=45, seconds=12)) == "45m 12s"
|
||||
|
||||
def test_seconds(self):
|
||||
assert economy.format_td(timedelta(seconds=8)) == "8s"
|
||||
|
||||
|
||||
class TestRollFish:
|
||||
def test_rolls_are_valid(self):
|
||||
random.seed(42)
|
||||
for _ in range(500):
|
||||
fish_id, weight = economy.roll_fish()
|
||||
if fish_id == "junk":
|
||||
assert weight == 0
|
||||
else:
|
||||
fish = economy.FISH_CATALOGUE[fish_id]
|
||||
assert fish["weight"][0] <= weight <= fish["weight"][1]
|
||||
|
||||
def test_rarity_bump_shifts_every_catch_up_a_tier(self):
|
||||
random.seed(7)
|
||||
rarities = {
|
||||
economy.FISH_CATALOGUE[fid]["rarity"]
|
||||
for fid, _ in (economy.roll_fish(rarity_bump=True) for _ in range(1000))
|
||||
if fid != "junk"
|
||||
}
|
||||
assert "common" not in rarities
|
||||
assert "legendary" in rarities
|
||||
Reference in New Issue
Block a user