def test_finalize_updated(self, tmp_path): p = utilities.yaml_from_dict(tmp_path, 'input.yaml') _delta = DeltaModel(input_file=p) # mock the top-level _delta.log_info = mock.MagicMock() _delta.output_data = mock.MagicMock() _delta.output_checkpoint = mock.MagicMock() # modify the save interval _t = 5 _delta._save_dt = _t * _delta._dt _delta._checkpoint_dt = _t * _delta._dt # run a mock update / save _delta._time = _t * _delta._dt _delta._save_iter += int(1) _delta._save_time_since_data = 0 _delta._save_time_since_checkpoint = 0 # run finalize _delta.finalize() # assert calls # should only hit top-levels assert _delta.log_info.call_count == 2 assert _delta.output_data.call_count == 0 assert _delta.output_checkpoint.call_count == 0 assert _delta._is_finalized is True
def test_update_make_record(self, tmp_path): # create a delta with default settings p = utilities.yaml_from_dict(tmp_path, 'input.yaml', {'save_checkpoint': True}) _delta = DeltaModel(input_file=p) # modify the save interval to be twice dt _delta._save_dt = 2 * _delta._dt _delta._checkpoint_dt = 2 * _delta._dt # mock top-level methods, verify call was made to each _delta.solve_water_and_sediment_timestep = mock.MagicMock() _delta.apply_subsidence = mock.MagicMock() _delta.finalize_timestep = mock.MagicMock() _delta.log_info = mock.MagicMock() _delta.log_model_time = mock.MagicMock() _delta.save_the_checkpoint = mock.MagicMock() # DO NOT mock output_data our output_checkpoint # mock the calls inside output_data _delta.save_stratigraphy = mock.MagicMock() _delta.save_grids_and_figs = mock.MagicMock() # run the timestep: t=0 # * should call core, but nothing else after init _delta.update() # assert calls assert _delta.solve_water_and_sediment_timestep.call_count == 1 assert _delta.apply_subsidence.call_count == 1 assert _delta.finalize_timestep.call_count == 1 assert _delta.log_model_time.call_count == 1 # assert times / counters assert _delta.time_iter == int(1) assert _delta.time == _delta.dt assert _delta.save_time_since_data == _delta._dt assert _delta.save_iter == int(1) assert _delta._save_time_since_checkpoint == _delta._dt # run another step # * should call core steps and outputs _delta.update() # assert calls assert _delta.solve_water_and_sediment_timestep.call_count == 2 assert _delta.apply_subsidence.call_count == 2 assert _delta.finalize_timestep.call_count == 2 assert _delta.log_model_time.call_count == 2 # assert times / counters assert _delta.time_iter == int(2) assert _delta.time == 2 * _delta.dt assert _delta.save_time_since_data == 0 assert _delta.save_iter == int(2) assert _delta._save_time_since_checkpoint == 0 # run another step # should call core, but nothing else _delta.update() # assert calls assert _delta.solve_water_and_sediment_timestep.call_count == 3 assert _delta.apply_subsidence.call_count == 3 assert _delta.finalize_timestep.call_count == 3 assert _delta.log_model_time.call_count == 3 # assert times / counters assert _delta.time_iter == int(3) assert _delta.time == 3 * _delta.dt assert _delta.save_time_since_data == _delta._dt assert _delta.save_iter == int(2) assert _delta._save_time_since_checkpoint == _delta._dt