Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix conversion from heterogeneous to homogeneous connector when deleting last synapse of a type #566

Merged
merged 1 commit into from
Dec 12, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions nestkernel/connector_model_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -581,9 +581,12 @@ GenericConnectorModel< ConnectionT >::delete_connection( Node& tgt,
// case.
if ( hc->size() == 1 )
{
conn =
static_cast< vector_like< ConnectionT >* >( ( *hc )[ 0 ] );
conn = pack_pointer( conn, b_has_primary, b_has_secondary );
conn = ( *hc )[ 0 ];
const bool is_primary =
kernel()
.model_manager.get_synapse_prototype( conn->get_syn_id() )
.is_primary();
conn = pack_pointer( conn, is_primary, not is_primary );
}
else
{
Expand Down
83 changes: 83 additions & 0 deletions testsuite/unittests/issue-565.sli
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* issue-565.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::issue-565

Synopsis: (issue-565) run -> NEST exits if test fails

Description:
This test provokes a switch from a heterogeneous connector to a
homogeneous connector using the structural plasticity framework and
asserts that the resulting homogeneous connector is correctly used.

Author: Jakob Jordan
FirstVersion: November 2016
SeeAlso:
*/

(unittest) run
/unittest using

/BuildNetwork
{
ResetKernel

M_ERROR setverbosity

% Create neurons and spike detector
/iaf_psc_alpha 2 << /I_e 400. >> Create /neurons Set
/spike_detector Create

% Create first connection with static_synapse, instantiating a
% homogeneous connector
[2] [1] << /rule /all_to_all >>
<< /model /static_synapse /weight 0. >> Connect

% Create second connection with new synapse type, causing the
% homogeneous connector to be turned into a heterogeneous connector
/static_synapse /dev_syn CopyModel
[2] [3] << /rule /all_to_all >> << /model /dev_syn >> Connect
} def

% Measure event count without deleting connection (ground truth)
BuildNetwork

100 Simulate

3 GetStatus /n_events get /n_events_target Set

% Measure event count with deleting connection
BuildNetwork

% Delete the first connection causing the heterogeneous
% connector to be turned into a homogeneous connector
[2] cvgidcollection [1] cvgidcollection << /rule /all_to_all >>
<< /model /static_synapse >> Disconnect_g_g_D_D

100 Simulate

% Compare result to ground truth
{
3 GetStatus /n_events get n_events_target eq
} assert_or_die
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see from your example in the issue #565 how this ensures that everything works properly, but wouldn't it be much more fail-safe to add another simulation to this unit test where one neuron with the same parameters is just connected to the spike detector (without disconnecting a temporary connection) and then (after both simulations) to compare the actual spike times recorded by the spike detector?