prop_agent_ageing :: SugAgentState -> DTime -> Bool
prop_agent_ageing as0 dt = as' == asExp && aoEmpty
  where
    (_, as', ao) = runAgentMonadDefaultConst (agentAgeing dt) as0 Nothing Nothing Nothing
    -- maybe not very useful to repeat the implementation in the test but 
    -- for completeness we test it
    asExp = as0 { sugAgAge = sugAgAge as0 + dt } 
    -- agentout must not have changed
    aoEmpty = ao == mkAgentOut

-- NOTE: this property-test needs an adjusted agent state => runs in Gen
-- NOTE: dieOfAge is not AgentLocalMonad but just MonadState => can be ran conveniently with runState
prop_agent_ageing :: SugAgentState -> DTime -> Bool
prop_agent_ageing as0 dt = as' == asExp && aoEmpty
  where
    (_, as', ao) = runAgentMonadDefaultConst (agentAgeing dt) as0 Nothing Nothing Nothing
    -- maybe not very useful to repeat the implementation in the test but 
    -- for completeness we test it
    asExp = as0 { sugAgAge = sugAgAge as0 + dt } 
    -- agentout must not have changed
    aoEmpty = ao == mkAgentOut

-- NOTE: this property-test needs an adjusted agent state => runs in Gen
-- NOTE: dieOfAge is not AgentLocalMonad but just MonadState => can be ran conveniently with runState
prop_agent_ageing as0 dt = as' == asExp && aoEmpty
  where
    (_, as', ao) = runAgentMonadDefaultConst (agentAgeing dt) as0 Nothing Nothing Nothing
    -- maybe not very useful to repeat the implementation in the test but 
    -- for completeness we test it
    asExp = as0 { sugAgAge = sugAgAge as0 + dt } 
    -- agentout must not have changed
    aoEmpty = ao == mkAgentOut

-- NOTE: this property-test needs an adjusted agent state => runs in Gen
-- NOTE: dieOfAge is not AgentLocalMonad but just MonadState => can be ran conveniently with runState