/*
* test_binary.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_binary - sli script for overall test of binary neuron models
Synopsis: (test_binary) run -> test basic communication patterns employed by binary neurons
Description:
Test, whether the communication mechanism for binary neurons
works. Two spikes indicate an up-transition, a single spike
indicate a down transition.
Author: March 2013, Helias
*/
(unittest) run
/unittest using
% assumes model name on stack
[/ginzburg_neuron /mcculloch_pitts_neuron]
{
0.1 /h Set
ResetKernel
0 <<
/local_num_threads 1
/resolution h
>> SetStatus
/model Set
cout (testing model ) <- model <- ;
% 1st Test:
% check, if double spikes are correctly interpreted as up transition
% and single spikes are interpreted as down transition
% expected read out at target neuron
/expected [ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 0. 0. 0. 0. ] def
/nrn model Create def
/sg /spike_generator Create def
sg << /spike_times [10. 10. 15.] >> SetStatus
sg nrn 1. 1. Connect
/multi /multimeter Create def
multi << /record_from [/h] >> SetStatus
multi nrn Connect
20. Simulate
multi /events get /h get cva
6 ToUnitTestPrecision
expected {cvi} Map
eq assert_or_die
% 2nd Test:
% check, if binary_neuron correctly transmits its state change
ResetKernel
0 <<
/local_num_threads 1
/resolution h
>> SetStatus
/nrn1 model Create def
/sp /spike_detector Create def
% set threshold so that neuron makes transition to 1
nrn1 << /theta -10. /tau_m 1. >> SetStatus
nrn1 sp Connect
100. Simulate
% should have two events
sp GetStatus /events get /senders get length 2 eq
assert_or_die
% both events should be at same time point
sp GetStatus /events get /times get dup 0 get exch 0 get eq
assert_or_die
sp GetStatus /events get /senders get length 2 eq
assert_or_die
% set threshold so that neuron makes transition to 0
nrn1 << /theta 10. /tau_m 1. >> SetStatus
100. Simulate
% should have one more event now
sp GetStatus /events get /senders get length 3 eq
assert_or_die
}
forall