Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions changelog_entry.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
- bump: minor
changes:
added:
- Unit test for GeneralEconomyTask.calculate_cliffs() and fixture for the test
- Test for calculate_single_economy with cliff impacts
23 changes: 23 additions & 0 deletions tests/country/test_us.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,26 @@ def test_us_macro_comparison():
)

sim.calculate_economy_comparison()


def test_us_macro_cliff_impacts():
from policyengine import Simulation

sim = Simulation(
scope="macro",
country="us",
reform={
"gov.usda.snap.income.deductions.earned_income": {"2025": 0.05}
},
include_cliffs=True,
)

result = sim.calculate_economy_comparison()
cliff_impact = result.model_dump().get("cliff_impact")

assert (
cliff_impact is not None
), "Expected 'cliff_impact' to be present in the output."

assert cliff_impact["baseline"]["cliff_gap"] > 0
assert cliff_impact["reform"]["cliff_share"] > 0
12 changes: 12 additions & 0 deletions tests/fixtures/simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,15 @@ def mock_dataset():
mock_instance.file_path = SAMPLE_DATASET_FILENAME
mock_dataset_class.from_file.return_value = mock_instance
yield mock_instance


@pytest.fixture
def mock_simulation_with_cliff_vars():

mock_sim = Mock()
mock_sim.calculate.side_effect = lambda var: {
"cliff_gap": Mock(sum=Mock(return_value=100.0)),
"is_on_cliff": Mock(sum=Mock(return_value=40.0)),
"is_adult": Mock(sum=Mock(return_value=80.0)),
}[var]
return mock_sim
17 changes: 17 additions & 0 deletions tests/test_simulation.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,15 @@
mock_get_default_dataset,
mock_dataset,
SAMPLE_DATASET_FILENAME,
mock_simulation_with_cliff_vars,
)
import sys
from copy import deepcopy

from policyengine import Simulation
from policyengine.outputs.macro.single.calculate_single_economy import (
GeneralEconomyTask,
)


class TestSimulation:
Expand Down Expand Up @@ -70,3 +74,16 @@ def test__given_dataset_without_time_period__does_not_set_time_period(
sim._set_data_time_period(uk_sim_options_pe_dataset.data)
== None
)

class TestCalculateCliffs:
def test__calculates_correct_cliff_metrics(
self, mock_simulation_with_cliff_vars
):

task = object.__new__(GeneralEconomyTask)
task.simulation = mock_simulation_with_cliff_vars

cliff_result = task.calculate_cliffs()

assert cliff_result.cliff_gap == 100.0
assert cliff_result.cliff_share == 0.5
Loading