/*
* test_pulsepacket_generator.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::test_pulsepacket_generator - minimal test of pulsepacket_generator
Synopsis: (test_pulsepacket_generator) run -> dies if assertion fails
Description:
Tests parameter setting and statistical correctness for one application.
Author: July 2008, Plesser
SeeAlso: noise_generator, testsuite::test_poisson_ps_min_interval
*/
/unittest (7471) require
/unittest using
% flatten arrays that may contain vectors and numbers
/allflat {
{ { cva } stopped { ; errordict begin /newerror false def end } if } Map
Flatten
} def
% First test: parameter setting on model and instance
{
ResetKernel
/tdict << /pulse_times [ 1.0 2.5 4.6 ]
/activity 150
/sdev 0.1234 >> def
/ng1 /pulsepacket_generator Create def
ng1 tdict SetStatus
/pulsepacket_generator tdict SetDefaults
/ng2 /pulsepacket_generator Create def
ng1 [tdict keys] get allflat
ng2 [tdict keys] get allflat
eq
} assert_or_die
clear
ResetKernel
% Second test: error if sdev negative
{
ResetKernel
/pulsepacket_generator << /sdev -0.5 >> SetDefaults
} fail_or_die
% Third test: error if activity negative
{
ResetKernel
/pulsepacket_generator << /activity -5 >> SetDefaults
} fail_or_die
% Fourth test: assure empty pulse times and zero otherwise is ok
{
ResetKernel
/pulsepacket_generator Create
<< /pulse_times [] /activity 0 /sdev 0.0 >> SetStatus
1 Simulate
} pass_or_die
% Fifth test: feed spike detector
{
ResetKernel
0 << /resolution 0.1 >> SetStatus
/ppg /pulsepacket_generator Create def
/sd /spike_detector Create def
/tstart 75.0 def
/tstop 225.0 def
/nspk 10 def
/pulset [ 10.0 125.0 175.0 275.0 ] def
/stddev 5.0 def
% find number of pulse centers in start..stop
/npulseff
0 pulset { dup tstart gt exch tstop lt and { 1 } { 0 } ifelse add } Fold
def
% since start, stop are far from pulse times, it is highly likely that
% only spikes belonging to the pulses with centers in start..stop are
% fired and then we get for the total spike number
/nspktot nspk npulseff mul def
ppg << /start tstart
/stop tstop
/pulse_times pulset
/activity nspk
/sdev stddev
>> SetStatus
sd << /record_to [/memory] /time_in_steps false >> SetStatus
ppg sd Connect
300 Simulate
sd [ /events /times ] get cva /spks Set
% check min and max are inside start .. stop
tstart spks Min leq
spks Max tstop leq and
% check number of spikes
spks length nspktot eq
and
} assert_or_die
endusing