/*
* ticket-421.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-421 - Minimal test against missing variable initializations
Synopsis: (ticket-421) run -> NEST exits if test fails
Description:
This test simulates all nodes providing V_m for a short while and
checks that V_m remains constant. This is a minimal test against
missing variable initializations, cf ticket #421.
Note:
- Passing this test does not mean that all variables are properly initialized. It may just catch some cases bad cases.
- Simulator response to initialization errors is stochastic, so if variables are not initialized properly, this test may
fail in some runs and not in others.
- Neuron models that do not initialize V_m to steady state, must be added to the exclude_models list below!
- If this test fails, please see installcheck.log for which model the test failed.
The check if that model really initializes the membrane potential V_m to the steady-state value in absence of any input. If not, add the model to the exclude_models list below.
Author: Hans Ekkehard Plesser, 2010-05-05
*/
/unittest (8045) require
/unittest using
% models that should not be tested because they do not initialize V_m to
% steady state
/exclude_models [/aeif_cond_exp /aeif_cond_alpha /a2eif_cond_exp /a2eif_cond_exp_HW
/hh_cond_exp_traub
/hh_psc_alpha /ht_neuron /ht_neuron_fs /iaf_cond_exp_sfa_rr /izhikevich] def
% use power-of-two resolution to avoid roundof problems
/res -3 dexp def
M_WARNING setverbosity
{
modeldict keys
{
/model Set
ResetKernel
0 << /resolution res >> SetStatus
% check if model has V_m, if none or excluded return true
false exclude_models { model eq or } Fold not
model GetDefaults /V_m known and
{
% store initial membrane potential
model GetDefaults /V_m get /Vm0 Set
% create and simulate single time step:
% if bad initial values has no effect now, it won't later
/n model Create def
res Simulate
% check membrane potential for exact equality
n /V_m get Vm0 eq
dup
{ (*** OK: ) model cvs join ( *** ) join == }
{ (###### FAIL : ) model cvs join
( Vm0 = ) join Vm0 cvs join ( Vm = ) join n /V_m get cvs join ==
} ifelse
}
{ true }
ifelse
}
Map
% see if all entries are true
true exch { and } Fold
}
assert_or_die
endusing