/* * ticket-543.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::ticket-543 - Regression test showing too many connections being created on iteration over nested subnets Synopsis: (ticket-543) run -> NEST exits if test fails Description: This test detects the creation of a too large number of connections when Convergent/DivergentConnect iterate over target/source subnets which contain nested subnets Author: Hans Ekkehard Plesser & Susanne Kunkel, 2012-02-08 */ /unittest (8831) require /unittest using M_ERROR setverbosity % provide number of nesting levels as argument % should return a list with a single element /div_conn_test { ResetKernel { /subnet Create ChangeSubnet } repeat /source_neuron /iaf_neuron Create def 0 ChangeSubnet /target_neuron /iaf_neuron Create def source_neuron [target_neuron] DivergentConnect << /source source_neuron >> FindConnections { /target get } Map } def /conv_conn_test { ResetKernel { /subnet Create ChangeSubnet } repeat /target_neuron /iaf_neuron Create def 0 ChangeSubnet /source_neuron /iaf_neuron Create def [source_neuron] target_neuron ConvergentConnect << /source source_neuron >> FindConnections { /target get } Map } def /random_div_conn_test { /num_conns Set ResetKernel { /subnet Create ChangeSubnet } repeat /source_neuron /iaf_neuron Create def 0 ChangeSubnet /target_neuron /iaf_neuron Create def source_neuron num_conns [target_neuron] RandomDivergentConnect << /source source_neuron >> FindConnections { /target get } Map } def /random_conv_conn_test { /num_conns Set ResetKernel { /subnet Create ChangeSubnet } repeat /target_neuron /iaf_neuron Create def 0 ChangeSubnet /source_neuron /iaf_neuron Create def [source_neuron] target_neuron num_conns RandomConvergentConnect << /source source_neuron >> FindConnections { /target get } Map } def % first test: divergent { [5] Range { div_conn_test length 1 eq } Map true exch { and } Fold } assert_or_die % second test: convergent { ResetKernel [5] Range { conv_conn_test length 1 eq } Map true exch { and } Fold } assert_or_die % third test: random divergent { ResetKernel [5] Range { 1 random_div_conn_test length 1 eq } Map true exch { and } Fold } assert_or_die % fourth test: random convergent { ResetKernel [5] Range { 1 random_conv_conn_test length 1 eq } Map true exch { and } Fold } assert_or_die endusing