/* * test_multiple_random_source_stepping.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_multiple_random_source_stepping - test NEST's behavior when using multiple random sources and different stepping schemes Synopsis: (test_multiple_random_source_stepping.sli) run -> dies if assertion fails Description: The script checks whether simulations of a network with more than one node consuming random numbers creates identical output under different stepping regimes, e.g., 1x10.0ms vs 100x0.1ms. Per r9131, this tests works well only if the stepping interval is a multiple of the minimal delay. Otherwise, random numbers will be fed to consumers in different orders, as nodes are updated for parts of minimal delay periods only. Author: Plesser FirstVersion: 2011-01-20 */ /unittest (8831) require /unittest using M_ERROR setverbosity /clear_error { counttomark npop % pop all but mark errordict begin /newerror false def end } def % single simulation run % arg: steppings % arg: interval /run_sim { /interval Set /steppings Set ResetKernel /pg1 /poisson_generator_ps << /rate 1000. >> Create def /pg2 /poisson_generator_ps << /rate 1000. >> Create def /sd1 /spike_detector << /precise_times true >> Create def /sd2 /spike_detector << /precise_times true >> Create def pg1 sd1 Connect pg2 sd2 Connect steppings { interval Simulate } repeat sd1 /events get /times get cva sd2 /events get /times get cva 2 arraystore } def { 1 10.0 run_sim /ref Set 5 2.0 run_sim 10 1.0 run_sim 2 arraystore true exch { ref eq and } Fold % the following two will lead to different results and are thus excluded % 20 0.5 run_sim % 100 0.1 run_sim %4 arraystore %true exch { ref eq and } Fold } assert_or_die