Skip to content

Commit

Permalink
Merge pull request #2078 from Gochim/master
Browse files Browse the repository at this point in the history
Added central place to get damage types and ehp sources. Added tests
  • Loading branch information
DarkFenX authored Nov 11, 2019
2 parents f48483d + 185d6d0 commit 65e7bf6
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 11 deletions.
46 changes: 35 additions & 11 deletions eos/utils/stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,11 @@ def __eq__(self, other):
# Round for comparison's sake because often damage profiles are
# generated from data which includes float errors
return (
floatUnerr(self.em) == floatUnerr(other.em) and
floatUnerr(self.thermal) == floatUnerr(other.thermal) and
floatUnerr(self.kinetic) == floatUnerr(other.kinetic) and
floatUnerr(self.explosive) == floatUnerr(other.explosive) and
floatUnerr(self.total) == floatUnerr(other.total))
floatUnerr(self.em) == floatUnerr(other.em) and
floatUnerr(self.thermal) == floatUnerr(other.thermal) and
floatUnerr(self.kinetic) == floatUnerr(other.kinetic) and
floatUnerr(self.explosive) == floatUnerr(other.explosive) and
floatUnerr(self.total) == floatUnerr(other.total))

def __bool__(self):
return any((
Expand Down Expand Up @@ -110,9 +110,20 @@ def __itruediv__(self, div):
return self

def __repr__(self):
spec = ['em', 'thermal', 'kinetic', 'explosive', 'total']
spec = DmgTypes.Names()
spec.append('total')
return makeReprStr(self, spec)

@staticmethod
def Names(short=None, postProcessor=None):
value = ['em', 'th', 'kin', 'exp'] if short else ['em', 'thermal', 'kinetic', 'explosive']

if postProcessor:
value = [postProcessor(x) for x in value]
print(value)

return value


class RRTypes:
"""Container for tank data stats."""
Expand All @@ -136,10 +147,10 @@ def __eq__(self, other):
# Round for comparison's sake because often tanking numbers are
# generated from data which includes float errors
return (
floatUnerr(self.shield) == floatUnerr(other.shield) and
floatUnerr(self.armor) == floatUnerr(other.armor) and
floatUnerr(self.hull) == floatUnerr(other.hull) and
floatUnerr(self.capacitor) == floatUnerr(other.capacitor))
floatUnerr(self.shield) == floatUnerr(other.shield) and
floatUnerr(self.armor) == floatUnerr(other.armor) and
floatUnerr(self.hull) == floatUnerr(other.hull) and
floatUnerr(self.capacitor) == floatUnerr(other.capacitor))

def __bool__(self):
return any((self.shield, self.armor, self.hull, self.capacitor))
Expand Down Expand Up @@ -191,5 +202,18 @@ def __itruediv__(self, div):
return self

def __repr__(self):
spec = ['shield', 'armor', 'hull', 'capacitor']
spec = RRTypes.Names(False)
return makeReprStr(self, spec)

@staticmethod
def Names(ehpOnly=True, postProcessor=None):
value = ['shield', 'armor', 'hull']

if not ehpOnly:
value.append('capacitor')

if postProcessor:
value = [postProcessor(x) for x in value]
print(value)

return value
53 changes: 53 additions & 0 deletions tests/test_modules/test_eos/test_utils/test_stats.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Add root folder to python paths
# This must be done on every test in order to pass in Travis
import os
import sys

script_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(os.path.realpath(os.path.join(script_dir, '..', '..', '..', '..')))

import pytest
from eos.utils.stats import DmgTypes, RRTypes


@pytest.fixture()
def setup_damage_types():
return DmgTypes(10, 20, 30, 40)


def test_dmgtypes_names():
assert DmgTypes.Names() == ['em', 'thermal', 'kinetic', 'explosive']
assert DmgTypes.Names(True) == ['em', 'th', 'kin', 'exp']
assert DmgTypes.Names(short=True) == ['em', 'th', 'kin', 'exp']


def test_dmgtypes__repr(setup_damage_types):
assert setup_damage_types.__repr__() == '<DmgTypes(em=10, thermal=20, kinetic=30, explosive=40, total=100)>'


def test_dmgtypes_names_lambda():
assert DmgTypes.Names(False, lambda v: v.capitalize()) == ['Em', 'Thermal', 'Kinetic', 'Explosive']
assert DmgTypes.Names(True, lambda v: v.upper()) == ['EM', 'TH', 'KIN', 'EXP']


@pytest.fixture()
def setup_rr_types():
return RRTypes(10, 20, 30, 40)


def test_rrtypes_names():
assert RRTypes.Names() == ['shield', 'armor', 'hull']
assert RRTypes.Names(True) == ['shield', 'armor', 'hull']
assert RRTypes.Names(ehpOnly=True) == ['shield', 'armor', 'hull']
assert RRTypes.Names(False) == ['shield', 'armor', 'hull', 'capacitor']


def test_rrtypes__repr(setup_rr_types):
assert setup_rr_types.__repr__() == '<RRTypes(shield=10, armor=20, hull=30, capacitor=40)>'


def test_rrtypes_names_lambda():
assert RRTypes.Names(True, lambda v: v.capitalize()) == ['Shield', 'Armor', 'Hull']
assert RRTypes.Names(postProcessor=lambda v: v.upper(), ehpOnly=False) == ['SHIELD', 'ARMOR', 'HULL', 'CAPACITOR']


0 comments on commit 65e7bf6

Please sign in to comment.