Beispiel #1
0
 def setUp(self):
     coeffs = StubCoeffs(birth_rate=BIRTH_RATE, death_rate=DEATH_RATE,
                         starting_year=2007,
                         avg_family_size=4,
                         recovery_rate0=1.0,
                         recovery_rate1=1.0,
                         recovery_rate2=1.0,
                         recovery_rate3=1.0,
                         mortality0=1.0,
                         mortality1=1.0,
                         base_infection_rate=1.0,
                         mortality2=1,
                         bednet_infection_modifier=1.0,
                         precipitation_infection_modifier=0,
                         avg_precipitation=200,
                         enable_NGO_offers=True,
                         road_subsidy_year=5,
                         other_subsidy_year=10,
                         enable_epidemic=True,
                         no_epidemics_before=10,
                         enable_free_bednets=True,
                         free_bednet_year=30,
                         fish_stock_warn_threshold=0.33,
                         wood_stock_warn_threshold=0.33,
                         available_improvements=['a', 'b'],
                         microfinance_base_interest=0.02,
                         microfinance_min_balance=100.0,
                         microfinance_repay_period=8,
                         microfinance_drought_effect=1,
                         microfinance_epidemic_effect=1,
                         max_precipitation=10,
                         drought_threshold=1,
                         enable_drought=True,
                         no_droughts_before=5,
                         )
     state = StubState(village_population=VILLAGE_POPULATION,
                       population=POPULATION,
                       clinic=False, irrigation=False, road=False,
                       sanitation=False, water_pump=False,
                       meals=False, electricity=False,
                       precipitation=PRECIPITATION,
                       health=[100],
                       year=2007,
                       season=False,
                       village_infected_pop=0,
                       owned_items=['bednet'],
                       epidemic=False,
                       tax_rate=0,
                       user_messages=[],
                       subsidy_offers=[],
                       microfinance_balance=0.0,
                       microfinance_borrow=0.0,
                       microfinance_current_interest_rate=0.0,
                       microfinance_interest_rate=0.0,
                       microfinance_amount_due=0.0,
                       microfinance_amount_paid=0.0,
                       microfinance_max_borrow=0.0,
                       )
     tc = StubTC()
     self.village = Village(state, coeffs, tc)
Beispiel #2
0
class TestVillage(unittest.TestCase):
    def setUp(self):
        coeffs = StubCoeffs(birth_rate=BIRTH_RATE, death_rate=DEATH_RATE,
                            starting_year=2007,
                            avg_family_size=4,
                            recovery_rate0=1.0,
                            recovery_rate1=1.0,
                            recovery_rate2=1.0,
                            recovery_rate3=1.0,
                            mortality0=1.0,
                            mortality1=1.0,
                            base_infection_rate=1.0,
                            mortality2=1,
                            bednet_infection_modifier=1.0,
                            precipitation_infection_modifier=0,
                            avg_precipitation=200,
                            enable_NGO_offers=True,
                            road_subsidy_year=5,
                            other_subsidy_year=10,
                            enable_epidemic=True,
                            no_epidemics_before=10,
                            enable_free_bednets=True,
                            free_bednet_year=30,
                            fish_stock_warn_threshold=0.33,
                            wood_stock_warn_threshold=0.33,
                            available_improvements=['a', 'b'],
                            microfinance_base_interest=0.02,
                            microfinance_min_balance=100.0,
                            microfinance_repay_period=8,
                            microfinance_drought_effect=1,
                            microfinance_epidemic_effect=1,
                            max_precipitation=10,
                            drought_threshold=1,
                            enable_drought=True,
                            no_droughts_before=5,
                            )
        state = StubState(village_population=VILLAGE_POPULATION,
                          population=POPULATION,
                          clinic=False, irrigation=False, road=False,
                          sanitation=False, water_pump=False,
                          meals=False, electricity=False,
                          precipitation=PRECIPITATION,
                          health=[100],
                          year=2007,
                          season=False,
                          village_infected_pop=0,
                          owned_items=['bednet'],
                          epidemic=False,
                          tax_rate=0,
                          user_messages=[],
                          subsidy_offers=[],
                          microfinance_balance=0.0,
                          microfinance_borrow=0.0,
                          microfinance_current_interest_rate=0.0,
                          microfinance_interest_rate=0.0,
                          microfinance_amount_due=0.0,
                          microfinance_amount_paid=0.0,
                          microfinance_max_borrow=0.0,
                          )
        tc = StubTC()
        self.village = Village(state, coeffs, tc)

    def tearDown(self):
        self.village = None

    def test_update_population(self):
        self.village.update_population()
        print(self.village.state.village_population)
        assert self.village.state.village_population == VILLAGE_POPULATION

    def test_check_epidemic(self):
        self.village.check_epidemic()
        assert not self.village.state.epidemic
        self.village.state.village_infected_pop = 5.0
        self.village.state.village_population = 10.0
        self.village.check_epidemic()
        assert self.village.state.epidemic

    def test_avg_family_health(self):
        assert self.village.avg_family_health() == 100

    def test_village_health(self):
        assert self.village.village_health() == 1.0

    def test_family_bednets(self):
        assert self.village.family_bednets() == 1

    def test_bednet_modifier(self):
        assert self.village.bednet_modifier() == 2
        self.village.state.population = 0
        assert self.village.bednet_modifier() == 0

    def test_mortality(self):
        print(self.village.mortality())
        assert self.village.mortality() == 2.0

    def test_recovery_rate(self):
        assert self.village.recovery_rate() == 1

    def test_susceptible_pop(self):
        assert (self.village.susceptible_pop() ==
                self.village.state.village_population)

    def test_recovered(self):
        assert self.village.recovered() == 0

    def test_sickened(self):
        assert self.village.sickened() == 0

    def test_improvements_count(self):
        assert self.village.improvements_count() == 0

    def test_family_taxes(self):
        self.village.state.tax_rate = 10
        self.village.state.fund = 0
        assert self.village.family_taxes(100.0) == 10
        self.village.state.tax_rate = 0
        assert self.village.family_taxes(100.0) == 0

    def test_check_improvement_price(self):
        self.village.coeffs.available_improvements = ['a', 'b']
        self.village.coeffs.improvement_prices = [1, 2]
        assert self.village.check_improvement_price('a') == 1
        assert self.village.check_improvement_price('b') == 2

    def test_buy_improvements(self):
        self.village.coeffs.available_improvements = ['a', 'b']
        self.village.coeffs.improvement_prices = [1, 200]
        self.village.coeffs.subsidy_price_reduction = 1
        self.village.state.fund = 100
        self.village.state.improvements = ['a']
        self.village.buy_improvements()
        assert self.village.state.fund == 99
        assert self.village.state.a

        # try to buy one we can't afford
        self.village.state.improvements = ['b']
        self.village.buy_improvements()
        assert self.village.state.fund == 99
        assert not hasattr(self.village.state, 'b')

        self.village.state.subsidy_offers = ['b']
        self.village.coeffs.subsidy_price_reduction = .05
        self.village.state.fund = 150
        self.village.buy_improvements()
        print(self.village.state.fund)
        assert self.village.state.fund == 140

    def test_update_subsidy_offers(self):
        self.village.state.year = 2013
        self.village.state.road = False
        self.village.coeffs.enable_NGO_offers = True
        self.village.coeffs.road_subsidy_year = 2
        self.village.update_subsidy_offers()
        assert 'road' in self.village.state.subsidy_offers

        self.village.state.road = True
        self.village.state.year = 2030
        self.village.coeffs.other_subsidy_year = 4
        self.village.update_subsidy_offers()

    def test_calc_fish_stock(self):
        self.village.state.amount_fish = 5.0
        self.village.state.fish_stock = 5000.0
        self.village.coeffs.fish_growth_rate = 1.2
        self.village.coeffs.fish_k = 7500.0

        self.village.state.fish_stock = 4000000
        self.village.coeffs.fish_k = 4000000
        self.village.state.amount_fish = 917
        self.village.state.village_population = 251 * 4

        stock = self.village.calc_fish_stock()
        assert stock > 3792849 and stock < 3792850

    def test_update_fish_stock(self):
        self.village.state.amount_fish = 5.0
        self.village.state.fish_stock = 5000.0
        self.village.coeffs.fish_growth_rate = 1.2
        self.village.coeffs.fish_k = 7500.0
        self.village.update_fish_stock()

    def test_calc_wood_stock(self):
        self.village.state.amount_wood = 5.0
        self.village.state.wood_stock = 5000
        self.village.coeffs.forest_growth_rate = 1.2
        self.village.coeffs.wood_k = 7500.0

    def test_update_wood_stock(self):
        self.village.state.amount_wood = 5.0
        self.village.state.wood_stock = 5000
        self.village.coeffs.forest_growth_rate = 1.2
        self.village.coeffs.wood_k = 7500.0
        self.village.update_wood_stock()

    def test_calculate_taxes(self):
        self.village.state.avg_family_size = 4
        assert self.village.calculate_taxes(10.0) == 0
        self.village.state.tax_rate = 1.0

        # make sure that a zero population doesn't give us a divide by zero
        self.village.state.population = 0
        self.village.calculate_taxes(10.0)

    def test_update_precipitation(self):
        self.village.update_precipitation()