/* * ticket-281.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/>. * */ /* * Regression test for Ticket #281 * * Nodes without proxies were not properly reset by ResetNetwork. * * This test checks for resetting by creating one instance of each * model in modeldict, simulating for 1 second, testing that bit 6 (==32) * is set in state (buffers_initialized), then calling ResetNetwork * and rechecking that the bit is unset. Tests are performed for nodes * in the root net, a subnet, and a subnet inside a subnet. * * The test is performed for two threads. Using extended addresses, it * is verified that all replicas are reset. * * Note: This test does NOT test whether the state vector of the neuron * is properly reset. * * Hans E Plesser, 2008-08-13 * */ /unittest (7488) require /unittest using << >> begin % check if buffers_initialized has given value for all instances % inst_array val check_flag -> bool /check_flag { << >> begin /val Set % get value of buffers_initialized flag /flagval elementstates /buffers_initialized get def % map over instances { GetStatus /state get % divide state by flag value; if flag is set, result is odd flagval div dup 2 div 2 mul eq % true if even -> flag not set not % true if flag is set val eq % check if we have right value } Map dup First exch Rest { and } Fold % see if all results are equal end } def % perform test once, leave bool on stack /runtest { << >> begin % create one instance of each model, except "special" models % the list of excluded models should be reviewed regularly % /ac_poisson_generator should be removed from exclusion list % once it supports parallel simulation modeldict clonedict /models Set ; [ /subnet /proxynode /environment /volume_transmitter /layer /layer_unrestricted /layer_3d /ac_poisson_generator /music_event_in_proxy /music_event_out_proxy /music_cont_in_proxy /music_message_in_proxy ] { models exch undef } forall /instances models keys { Create } Map def % simulate 1 Simulate % check if buffers_initialized is set on all /set_after_sim instances true check_flag def ResetNetwork % check if buffers_initialized is unset on all /unset_after_reset instances false check_flag def % result set_after_sim unset_after_reset and end } def { % run in top level ResetKernel 0 << /local_num_threads 2 /overwrite_files true >> SetStatus runtest % run inside subnet ResetKernel 0 << /local_num_threads 2 /overwrite_files true >> SetStatus /subnet Create ChangeSubnet runtest % run inside subnet inside subnet ResetKernel 0 << /local_num_threads 2 /overwrite_files true >> SetStatus /subnet Create ChangeSubnet /subnet Create ChangeSubnet runtest % combine results and and } assert_or_die end endusing