/*
 *  model_node_init.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/>.
 *
 */

/* model_node_init.sli
 
   Makeshift test to see if setting model params and then creating a neuron
   and creating a neuron and then setting node params lead to the same 
   results.

   Works by connecting device to iaf_neuron, measuring voltage trace over 1s
   and comparing traces.

   todo: - generalize for more models
         - find way to compare property dictionaries
*/

/unittest (6688) require
/unittest using

%/model  /step_current_generator def
%/params << /amplitude_times  [ 100.0 200.0 300.0 500.0 ] 
%           /amplitude_values [ 100.0 -200.0 50.0 100.0 ] 
%        >> def

/model /mip_generator def
/params << /rate 100.0 /p_copy 0.5 /mother_seed 123456 >> def

/run_model {
   
   ResetKernel
   0 << /overwrite_files true >> SetStatus

   % expect boolean flag, if true init model, else init node
   % leave voltmeter potential trace and node status dict on stack
  /param_model Set
 
  param_model { 
   model params SetDefaults
  } if

  model Create /m Set
  
  param_model not {
   m params SetStatus
  } if

  /iaf_neuron Create /n Set
  /voltmeter Create /vm Set
  m  n Connect
  vm n Connect
  vm << /to_file true /to_memory true >> SetStatus

  1000 Simulate

  vm [ /events /V_m ] get cva
  m GetStatus
  2 arraystore
} def

% run once with model, once with node initialization 
% and compare results
[true false] { run_model } Map
Transpose arrayload pop
/sdicts Set
/volts Set

% don't know how to compare dictionaries, so test only voltage traces now
volts arrayload pop eq

assert_or_die