56 lines
1.9 KiB
Python
56 lines
1.9 KiB
Python
|
import fractions
|
||
|
import unittest
|
||
|
|
||
|
from elite_engineering import trade
|
||
|
|
||
|
|
||
|
class TradeCalculationTests(unittest.TestCase):
|
||
|
def format_ratio(self, ratio: fractions.Fraction) -> str:
|
||
|
return "{} → {}".format(ratio.numerator, ratio.denominator)
|
||
|
|
||
|
def test_same_category_exchange(self):
|
||
|
expected = [
|
||
|
["1 → 1", "1 → 3", "1 → 9", "1 → 27", "1 → 81"],
|
||
|
["6 → 1", "1 → 1", "1 → 3", "1 → 9", "1 → 27"],
|
||
|
["36 → 1", "6 → 1", "1 → 1", "1 → 3", "1 → 9"],
|
||
|
["216 → 1", "36 → 1", "6 → 1", "1 → 1", "1 → 3"],
|
||
|
["1296 → 1", "216 → 1", "36 → 1", "6 → 1", "1 → 1"],
|
||
|
]
|
||
|
|
||
|
actual = [
|
||
|
[
|
||
|
self.format_ratio(
|
||
|
trade.Material("name", "category", grade_in).trade_ratio(
|
||
|
trade.Material("name", "category", grade_out)
|
||
|
)
|
||
|
)
|
||
|
for grade_out in [1, 2, 3, 4, 5]
|
||
|
]
|
||
|
for grade_in in [1, 2, 3, 4, 5]
|
||
|
]
|
||
|
|
||
|
self.assertEqual(expected, actual)
|
||
|
|
||
|
def test_different_category_exchange(self):
|
||
|
expected = [
|
||
|
["6 → 1", "2 → 1", "2 → 3", "2 → 9", "2 → 27"],
|
||
|
["36 → 1", "6 → 1", "2 → 1", "2 → 3", "2 → 9"],
|
||
|
["216 → 1", "36 → 1", "6 → 1", "2 → 1", "2 → 3"],
|
||
|
["1296 → 1", "216 → 1", "36 → 1", "6 → 1", "2 → 1"],
|
||
|
["7776 → 1", "1296 → 1", "216 → 1", "36 → 1", "6 → 1"],
|
||
|
]
|
||
|
|
||
|
actual = [
|
||
|
[
|
||
|
self.format_ratio(
|
||
|
trade.Material("name", "category", grade_in).trade_ratio(
|
||
|
trade.Material("name", "other", grade_out)
|
||
|
)
|
||
|
)
|
||
|
for grade_out in [1, 2, 3, 4, 5]
|
||
|
]
|
||
|
for grade_in in [1, 2, 3, 4, 5]
|
||
|
]
|
||
|
|
||
|
self.assertEqual(expected, actual)
|