/* * ticket-156.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/>. * */ /* Test for Ticket 156. This test verifies that: poisson_generator_ps generates identical spike trains for given start and stop for different simulation resolutions, and different trains for different targets. Protocol: 1. poisson_generator_ps projects to two spike_detectors 2. run for different resolutions, record precise spike times is ms 3. test all spikes are in (start, stop] 3. test for different results between spike_detectors 4. test for identical results across resolutions */ /unittest (6335) require /unittest using /ps_params << /origin 0.0 /start 1.0 /stop 2.0 /rate 12345.0 % expect ~ 12.3 spikes >> def /sd_params << /to_memory true /precise_times true /time_in_steps false >> def /resolutions [0.01 0.1 0.2 0.5 1.0] def % ensure all spikes arrive at detector /simtime ps_params /stop get 2.0 add def /check_limits % true if all spikes in (origin+start, origin+stop] { << >> begin /spks Set /ori ps_params /origin get def spks Min ps_params /start get ori add gt spks Max ps_params /stop get ori add leq and end } def /single_trial { << >> begin /h Set ResetKernel 0 << /resolution h >> SetStatus /poisson_generator_ps Create /pg Set pg ps_params SetStatus /spike_detector sd_params SetDefaults [ /spike_detector Create /spike_detector Create ] /sds Set sds { pg exch 1.0 1.0 Connect } forall simtime Simulate sds { [/events /times] get cva } Map end } def resolutions { single_trial } Map /res Set % first test: limits res Flatten check_limits % second test: different results between targets res { arrayload ; neq } Map % third test: equality among runs % Test for spike time equality to within 2.3e-16 ms. res Transpose { dup 0 get /ref Set Rest true exch { ref sub 0 exch { abs max } Fold 2.3e-16 lt and } Fold } Map % collect 3 arraystore Flatten true exch { and } Fold assert_or_die