/* * ticket-618.sli * * This file is part of NEST. * * Copyright (C) 2004 The NEST Initiative * * NEST is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2 of the License, or * (at your option) any later version. * * NEST is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with NEST. If not, see <http://www.gnu.org/licenses/>. * */ /* BeginDocumentation Name: testsuite::ticket-618 - catch nodes which require tau_mem != tau_syn Synopsis: (ticket-618) run -> NEST exits if test fails Description: All neuron models using exact integration require that tau_mem != tau_syn. This test ensures that all pertaining models raise an exception if tau_mem == tau_syn. The test does so by ensuring that any model that has tau_* properties and V_m, either throws an exception when all tau_ properties are set to the same value, or has a non-nan V_m after 10ms simulation. This test should be updated when alternative implementations of exact integration for the degenerate case are in place. Author: Hans Ekkehard Plesser, 2012-12-11 */ /unittest (9726) require /unittest using M_ERROR setverbosity { modeldict keys { ResetKernel /model Set /modelprops model GetDefaults def /result true def % pass by default % skip models without V_m modelprops /V_m known { % build dict setting all tau_* props to 10. /propdict << >> def modelprops keys { /key Set key cvs 0 4 getinterval (tau_) eq { propdict key 10.0 put_d } if } forall % skip models without tau_* propdict empty not exch ; { % the next line shall provoke an error for some % models mark { /n model propdict Create def } stopped { % we got an error, need to clean up % remove error code errordict /message undef errordict /command undef errordict begin /newerror false def end % clear stack counttomark npop pop % need to pop mark separately } { pop % mark % no error, simulate and check membrane potential is not nan 10. Simulate /result n /V_m get cvs (nan) neq def } ifelse % stopped } if % propdict empty not } if % /V_m known result % leave result on stack dup not { model == } if } Map % modeldict keys true exch { and } Fold } assert_or_die endusing