/* * ticket-520.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-520 - Ensure that multimeter returns correct number of time points in accumulator mode Synopsis: (ticket-520) run -> NEST exits if test fails Description: When running in accumulator mode, multimeter must pick up the times array from only one thread, so that value and times arrays have the same length. Author: Hans Ekkehard Plesser, 2011-06-17 */ /unittest (8831) require /unittest using M_ERROR setverbosity % test in non-accumulating mode, one mm { ResetKernel 0 << /total_num_virtual_procs 2 /local_num_threads 2 >> SetStatus /n1 /iaf_neuron << /I_e 100. >> Create def /n2 /iaf_neuron << /I_e 100. >> Create def /m1 /multimeter << /record_from [/V_m] /withtime true /withgid true >> Create def m1 n1 Connect m1 n2 Connect 10 Simulate (M1: ) ==only m1 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq } assert_or_die % test in accumulating mode, one mm { ResetKernel 0 << /total_num_virtual_procs 2 /local_num_threads 2 >> SetStatus /n1 /iaf_neuron Create def /n2 /iaf_neuron Create def /m1 /multimeter << /record_from [/V_m] /withtime true /withgid false /to_accumulator true >> Create def m1 n1 Connect m1 n2 Connect 10 Simulate (Acc M1: ) ==only m1 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq } assert_or_die % test in non-accumulating mode, two mm { ResetKernel 0 << /total_num_virtual_procs 2 /local_num_threads 2 >> SetStatus /n1 /iaf_neuron << /I_e 100. >> Create def /n2 /iaf_neuron << /I_e 100. >> Create def /m1 /multimeter << /record_from [/V_m] /withtime true /withgid true >> Create def /m2 /multimeter << /record_from [/V_m] /withtime true /withgid true >> Create def m1 n1 Connect m2 n2 Connect 10 Simulate (M1: ) ==only m1 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq (M2: ) ==only m2 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq and } assert_or_die % test in accumulating mode, two mm { ResetKernel 0 << /total_num_virtual_procs 2 /local_num_threads 2 >> SetStatus /n1 /iaf_neuron Create def /n2 /iaf_neuron Create def /m1 /multimeter << /record_from [/V_m] /withtime true /withgid false /to_accumulator true >> Create def /m2 /multimeter << /record_from [/V_m] /withtime true /withgid false /to_accumulator true >> Create def m1 n1 Connect m2 n2 Connect 10 Simulate (Acc M1: ) ==only m1 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq (Acc M2: ) ==only m2 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq and } assert_or_die % --- % Same all over again, but with time stamps % test in non-accumulating mode, one mm { ResetKernel 0 << /total_num_virtual_procs 2 /local_num_threads 2 >> SetStatus /n1 /iaf_neuron << /I_e 100. >> Create def /n2 /iaf_neuron << /I_e 100. >> Create def /m1 /multimeter << /record_from [/V_m] /withtime true /time_in_steps true /withgid true >> Create def m1 n1 Connect m1 n2 Connect 10 Simulate (M1: ) ==only m1 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq } assert_or_die % test in accumulating mode, one mm { ResetKernel 0 << /total_num_virtual_procs 2 /local_num_threads 2 >> SetStatus /n1 /iaf_neuron Create def /n2 /iaf_neuron Create def /m1 /multimeter << /record_from [/V_m] /withtime true /time_in_steps true /withgid false /to_accumulator true >> Create def m1 n1 Connect m1 n2 Connect 10 Simulate (Acc M1: ) ==only m1 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq } assert_or_die % test in non-accumulating mode, two mm { ResetKernel 0 << /total_num_virtual_procs 2 /local_num_threads 2 >> SetStatus /n1 /iaf_neuron << /I_e 100. >> Create def /n2 /iaf_neuron << /I_e 100. >> Create def /m1 /multimeter << /record_from [/V_m] /withtime true /time_in_steps true /withgid true >> Create def /m2 /multimeter << /record_from [/V_m] /withtime true /time_in_steps true /withgid true >> Create def m1 n1 Connect m2 n2 Connect 10 Simulate (M1: ) ==only m1 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq (M2: ) ==only m2 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq and } assert_or_die % test in accumulating mode, two mm { ResetKernel 0 << /total_num_virtual_procs 2 /local_num_threads 2 >> SetStatus /n1 /iaf_neuron Create def /n2 /iaf_neuron Create def /m1 /multimeter << /record_from [/V_m] /withtime true /time_in_steps true /withgid false /to_accumulator true >> Create def /m2 /multimeter << /record_from [/V_m] /withtime true /time_in_steps true /withgid false /to_accumulator true >> Create def m1 n1 Connect m2 n2 Connect 10 Simulate (Acc M1: ) ==only m1 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq (Acc M2: ) ==only m2 [/events [/V_m /times]] get dup == % check that V_m and times arrays have same length arrayload 2 eq assert cva length exch cva length eq and } assert_or_die endusing