/*
* ticket-481.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-481 - Ensure that poisson_generator_ps delivers spikes to more than one node
Synopsis: (ticket-481) run -> NEST exits if test fails
Description:
Ensure that poisson_generator_ps delivers spikes to more than one node.
Peiran Gao reported to nest_bugs that poisson_generator_ps.
First analysis indicates that spikes are lost if poisson_generator_ps is connected
to target neurons using different synapse models, even if those are just copies of
the same underlying class.
Author: Hans Ekkehard Plesser, 2010-11-03; based on original reproducer by Peiran Gao
*/
/unittest (8831) require
/unittest using
M_ERROR setverbosity
% if true, exec and show results instead of asserting
/debugging false def
% expects on stack:
% syn model 2
% syn model 1
% neuron model
%
% returns: whether voltage for either neurons exceeded Vref
/Run
{
/syn2 Set
/syn1 Set
/model Set
debugging {
model cvs ( ) join syn1 cvs join ( ) join syn2 cvs join ( : ) join =only
} if
/dt -3 dexp def % 0.125 ms
/Vref -70.0 def
0 << /tics_per_ms 1.0 dt div round /resolution dt >> SetStatus
model << /V_m Vref /E_L Vref /V_th 1e10 /I_e 0.0 >> Create /n1 Set
model << /V_m Vref /E_L Vref /V_th 1e10 /I_e 0.0 >> Create /n2 Set
/poisson_generator_ps << /rate 10000.0 /start 0.0 >> Create /pg Set
/voltmeter << /interval dt >> Create /vm1 Set
/voltmeter << /interval dt >> Create /vm2 Set
pg n1 syn1 Connect
pg n2 syn2 Connect
vm1 n1 Connect
vm2 n2 Connect
1000 Simulate
vm1 [/events /V_m] get cva Max Vref gt
vm2 [/events /V_m] get cva Max Vref gt
} def
{
ResetKernel
% this case always went well
/iaf_psc_delta_canon /static_synapse /static_synapse Run
and
} debugging { exec = } { assert_or_die } ifelse
% identical synapse models, must pass
{
ResetKernel
/static_synapse /hoo CopyModel
/iaf_psc_delta_canon /hoo /hoo Run
and
} debugging { exec = } { assert_or_die } ifelse
% mixed case, must throw execption
% must be last in test script, since exception occurs in middle of
% simulation, leaving kernel in unresettable state.
{
ResetKernel
/static_synapse /foo CopyModel
/static_synapse /goo CopyModel
/iaf_psc_delta_canon /foo /goo Run
and
} debugging { exec = } { fail_or_die } ifelse