17 #include "../msg/OneToOneMsg.h"
18 #include "../msg/SparseMsg.h"
19 #include "../msg/SingleMsg.h"
21 #include "../synapse/Synapse.h"
22 #include "../synapse/SynEvent.h"
23 #include "../synapse/SynHandlerBase.h"
24 #include "../synapse/SimpleSynHandler.h"
26 #include "../shell/Shell.h"
27 #include "../shell/Neutral.h"
29 #include "../mpi/PostMaster.h"
30 #include "../scheduling/Clock.h"
31 #include "../builtins/Arith.h"
32 #include "../biophysics/IntFire.h"
33 #include "../randnum/RNG.h"
54 unsigned int size = 100;
74 vector< vector< Eref > > ver;
76 assert( ver.size() == size );
77 assert( ver[0].size() == 1 );
78 assert( ver[0][0].element() == e2.
element() );
80 assert( ver[55].size() == 1 );
81 assert( ver[55][0].element() == e2.
element() );
89 assert( md.size() == 1 );
90 assert( md[0].targets.size() == 1 );
91 assert( md[0].targets[0].element() == e2.
element() );
94 for (
unsigned int i = 0; i < size; ++i ) {
99 for (
unsigned int i = 0; i < size; ++i ) {
100 double temp = i + i * i;
101 double val =
reinterpret_cast< Arith*
>(e2.
element()->
data( i ) )->getOutput();
104 cout <<
"." << flush;
115 unsigned int size = 100;
138 for (
unsigned int i = 0; i < size; ++i ) {
142 double val =
reinterpret_cast< Arith*
>(e2.
element()->
data( i ) )->getArg1();
151 cout <<
"." << flush;
159 unsigned int size = 100;
167 for (
unsigned int i = 0; i < size; ++i ) {
172 double val =
reinterpret_cast< Arith*
>(oid.
data())->getOutput();
176 for (
unsigned int i = 0; i < size; ++i ) {
184 cout <<
"." << flush;
191 unsigned int size = 100;
201 assert( ret->
getName() ==
"test2" );
204 assert( ret->
getName() ==
"NewImprovedTest" );
206 for (
unsigned int i = 0; i < size; ++i ) {
207 double x = sqrt((
double) i );
211 ss << setw( 10 ) << x;
217 for (
unsigned int i = 0; i < size; ++i ) {
218 double temp = sqrt((
double) i );
219 double val =
reinterpret_cast< Arith*
>(
221 assert( fabs( val - temp ) < 1e-5 );
225 cout <<
"." << flush;
233 unsigned int size = 100;
244 assert( val ==
"test2" );
247 assert( val ==
"HupTwoThree" );
249 for (
unsigned int i = 0; i < size; ++i ) {
254 for (
unsigned int i = 0; i < size; ++i ) {
263 cout <<
"." << flush;
270 unsigned int size = 100;
283 assert( val ==
"test2" );
287 assert( val ==
"HupTwoThree" );
289 for (
unsigned int i = 0; i < size; ++i ) {
291 reinterpret_cast< Arith*
>(
ObjId( i2, i ).
data() )->setOutput( temp );
294 for (
unsigned int i = 0; i < size; ++i ) {
299 double conv = atof( val.c_str() );
301 assert( fabs( conv - temp ) < 1e-5 );
305 cout <<
"." << flush;
313 unsigned int size = 100;
322 for (
unsigned int i = 0; i < size; ++i ) {
329 doubleEq ( reinterpret_cast< IntFire* >(oid.
data())->getVm() , temp ) );
332 for (
unsigned int i = 0; i < size; ++i ) {
339 cout <<
"." << flush;
347 unsigned int size = 100;
353 vector< unsigned int > ns( size );
354 vector< vector< double > > delay( size );
355 for (
unsigned int i = 0; i < size; ++i ) {
357 for (
unsigned int j = 0; j < i; ++j ) {
358 double temp = i * 1000 + j;
359 delay[i].push_back( temp );
365 assert( temp->
numData() == size );
366 Id syns( handler.
value() + 1 );
367 for (
unsigned int i = 0; i < size; ++i ) {
374 for (
unsigned int i = 0; i < size; ++i ) {
375 assert( syns.element()->numField( i ) == i );
378 assert( s->getNumSynapses() == i );
379 for (
unsigned int j = 0; j < i; ++j ) {
381 ObjId oid( syns, i, j );
382 double x = i * 1000 + j ;
384 double d2 = s->getSynapse( j )->getDelay();
389 delete syns.element();
391 cout <<
"." << flush;
397 unsigned int size = 100;
404 vector< unsigned int > numSyn( size, 0 );
405 for (
unsigned int i = 0; i < size; ++i )
413 for (
unsigned int i = 0; i < size; ++i ) {
418 vector< unsigned int > getSyn;
421 assert (getSyn.size() == size );
422 for (
unsigned int i = 0; i < size; ++i )
423 assert( getSyn[i] == i );
428 cout <<
"." << flush;
433 static const double WEIGHT = -1.0;
434 static const double TAU = 1.0;
435 static const double DT = 0.1;
438 unsigned int size = 100;
448 for (
unsigned int i = 0; i < size; ++i ) {
455 ObjId target( synId , 1 );
457 reinterpret_cast< Synapse*
>(target.data())->setWeight( WEIGHT );
458 reinterpret_cast< Synapse*
>(target.data())->setDelay( 0.01 );
465 reinterpret_cast< IntFire*
>(e2.
data())->setVm( 1.0 );
469 reinterpret_cast< IntFire*
>(e2.
data())->process( e2, &p );
471 double Vm =
reinterpret_cast< IntFire*
>(e2.
data())->getVm();
473 ObjId targetCell( i2, 1 );
474 reinterpret_cast< IntFire*
>(targetCell.
data())->setTau( TAU );
476 reinterpret_cast< IntFire*
>(targetCell.
data())->process( targetCell.
eref(), &p );
478 assert(
doubleEq( Vm , WEIGHT * ( 1.0 - DT / TAU ) ) );
481 delete synId.element();
482 cout <<
"." << flush;
487 unsigned int nRows = m.
nRows();
490 for (
unsigned int i = 0; i < nRows; ++i ) {
492 for (
unsigned int j = 0; j < nCols; ++j ) {
493 cout << m.
get( i, j ) <<
" ";
497 const unsigned int *n;
498 const unsigned int *c;
499 for (
unsigned int i = 0; i < nRows; ++i ) {
500 unsigned int num = m.
getRow( i, &n, &c );
501 for (
unsigned int j = 0; j < num; ++j )
506 for (
unsigned int i = 0; i < nRows; ++i ) {
507 unsigned int num = m.
getRow( i, &n, &c );
508 for (
unsigned int j = 0; j < num; ++j )
517 static unsigned int preN[] = { 1, 2, 3, 4, 5, 6, 7 };
518 static unsigned int postN[] = { 1, 3, 4, 5, 6, 2, 7 };
519 static unsigned int preColIndex[] = { 0, 4, 0, 1, 2, 3, 4 };
520 static unsigned int postColIndex[] = { 0, 1, 1, 1, 2, 0, 2 };
522 static unsigned int dropN[] = { 1, 6, 2, 7 };
523 static unsigned int dropColIndex[] = { 0, 1, 0, 1 };
526 unsigned int nRows = m.
nRows();
537 const unsigned int *n;
538 const unsigned int *c;
540 for (
unsigned int i = 0; i < nRows; ++i ) {
541 unsigned int num = m.
getRow( i, &n, &c );
542 for (
unsigned int j = 0; j < num; ++j ) {
543 assert( n[j] == preN[ k ] );
544 assert( c[j] == preColIndex[ k ] );
553 assert( m.
nRows() == nCols );
557 for (
unsigned int i = 0; i < nCols; ++i ) {
558 unsigned int num = m.
getRow( i, &n, &c );
559 for (
unsigned int j = 0; j < num; ++j ) {
560 assert( n[j] == postN[ k ] );
561 assert( c[j] == postColIndex[ k ] );
568 vector< unsigned int > keepCols( 2 );
574 assert( m.
nRows() == nCols );
578 for (
unsigned int i = 0; i < nCols; ++i ) {
579 unsigned int num = m.
getRow( i, &n, &c );
580 for (
unsigned int j = 0; j < num; ++j ) {
581 assert( n[j] == dropN[ k ] );
582 assert( c[j] == dropColIndex[ k ] );
588 cout <<
"." << flush;
595 static unsigned int row5[] = { 1, 0, 2, 0, 0, 0, 0, 0, 0, 0 };
596 static unsigned int row6[] = { 0, 0, 3, 4, 0, 0, 0, 0, 0, 0 };
597 static unsigned int row7[] = { 0, 0, 0, 0, 5, 0, 0, 0, 0, 6 };
598 static unsigned int row8[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
599 static unsigned int row9[] = { 0, 0, 7, 0, 0, 0, 0, 8, 0, 0 };
601 vector< vector < unsigned int > > m( 10 );
602 for (
unsigned int i = 0; i < 10; ++i )
605 for (
unsigned int i = 0; i < 10; ++i ) m[5][i] = row5[i];
606 for (
unsigned int i = 0; i < 10; ++i ) m[6][i] = row6[i];
607 for (
unsigned int i = 0; i < 10; ++i ) m[7][i] = row7[i];
608 for (
unsigned int i = 0; i < 10; ++i ) m[8][i] = row8[i];
609 for (
unsigned int i = 0; i < 10; ++i ) m[9][i] = row9[i];
612 for (
unsigned int i = 0; i < 10; ++i )
613 for (
unsigned int j = 0; j < 10; ++j )
615 n.
set( i, j, m[i][j] );
618 for (
unsigned int i = 0; i < 10; ++i )
619 for (
unsigned int j = 0; j < 10; ++j )
620 assert (n.
get( j, i ) == m[i][j] );
622 for (
unsigned int i = 0; i < 10; ++i )
623 for (
unsigned int j = 0; j < 10; ++j )
624 assert (n.
get( i, j ) == m[i][j] );
629 static unsigned int init[] = {0, 1, 3, 4, 5, 6, 8, 9};
630 vector< unsigned int > keepCols(
631 init, init +
sizeof( init ) /
sizeof(
unsigned int ) );
633 for (
unsigned int i = 0; i < 10; ++i ) {
634 for (
unsigned int j = 0; j < 8; ++j ) {
635 unsigned int k = keepCols[j];
636 assert (n.
get( i, j ) == m[i][k] );
641 for (
unsigned int i = 0; i < 100; ++i )
642 n.
set( 0, i, 10 * i );
644 for (
unsigned int i = 0; i < 100; ++i )
645 assert( n.
get( i, 0 ) == 10 * i );
647 for (
unsigned int i = 0; i < 100; ++i )
648 assert( n.
get( 0, i ) == 10 * i );
662 cout <<
"." << flush;
670 vector< unsigned int > colOrder( 1, 0 );
672 assert( n.
get( 0, 0 ) == -1 );
673 assert( n.
get( 1, 0 ) == 1 );
675 unsigned int nrows = 4;
676 unsigned int ncolumns = 5;
682 for (
unsigned int i = 0; i < nrows; ++i ) {
683 for (
unsigned int j = 0; j < ncolumns; ++j ) {
688 colOrder.resize( ncolumns );
695 assert( n.
nRows() == nrows );
697 for (
unsigned int i = 0; i < nrows; ++i ) {
698 for (
unsigned int j = 0; j < ncolumns; ++j ) {
699 int x = i * 10 + colOrder[j];
700 assert( n.
get( i, j ) == x );
708 for (
unsigned int i = 0; i < nrows; ++i ) {
709 for (
unsigned int j = 0; j < ncolumns; ++j ) {
710 unsigned int x = i * 10 + j;
714 colOrder.resize( 2 );
718 assert( n.
nRows() == nrows );
720 for (
unsigned int i = 0; i < nrows; ++i ) {
721 assert( n.
get( i, 0 ) ==
static_cast< int >( i * 10 + 3 ) );
722 assert( n.
get( i, 1 ) ==
static_cast< int >( i * 10 + 2 ) );
724 cout <<
"." << flush;
730 unsigned int nrow = 5;
731 unsigned int ncol = 7;
732 vector< unsigned int > row;
733 vector< unsigned int > col;
735 unsigned int num = 0;
736 for (
unsigned int i = 0; i < nrow; ++i ) {
737 for (
unsigned int j = 0; j < ncol; ++j ) {
738 if ( j == 0 || i + j == 6 || ( j - i) == 2 ) {
741 val.push_back( 100 + i * 10 + j );
748 assert( n.
nRows() == nrow );
751 for (
unsigned int i = 0; i < nrow; ++i ) {
752 for (
unsigned int j = 0; j < ncol; ++j ) {
753 int val = n.
get( i, j );
754 if ( j == 0 || i + j == 6 || ( j - i) == 2 )
755 assert( static_cast< unsigned int >( val ) == 100 + i * 10 + j );
760 cout <<
"." << flush;
765 static string icon =
" .oO@";
766 unsigned int yside = sqrt(
double ( e->
numData() ) );
767 unsigned int xside = e->
numData() / yside;
768 if ( e->
numData() % yside > 0 )
771 for (
unsigned int i = 0; i < e->
numData(); ++i ) {
772 if ( ( i % xside ) == 0 )
777 int shape = 5.0 * ( Vm - min ) / ( max - min );
782 cout << icon[ shape ];
790 static const double thresh = 0.2;
791 static const double Vmax = 1.0;
792 static const double refractoryPeriod = 0.4;
793 static const double weightMax = 0.02;
794 static const double delayMax = 4;
795 static const double timestep = 0.2;
796 static const double connectionProbability = 0.1;
797 static const unsigned int runsteps = 5;
806 unsigned int size = 1024;
829 vector< double > temp( size, 0.0 );
830 for (
unsigned int i = 0; i < size; ++i )
836 temp.resize( size, thresh );
840 temp.resize( size, refractoryPeriod );
844 unsigned int fieldSize = 5000;
845 vector< double > weight( size * fieldSize, 0.0 );
846 vector< double > delay( size * fieldSize, 0.0 );
847 for (
unsigned int i = 0; i < size; ++i ) {
849 unsigned int numSyn =
851 unsigned int k = i * fieldSize;
852 for (
unsigned int j = 0; j < numSyn; ++j ) {
866 for (
unsigned int i = 0; i < runsteps; ++i ) {
875 cout <<
"." << flush;
881 unsigned int size = 100;
888 vector< double > arg1( size );
889 vector< double > arg2( size );
890 for (
unsigned int i = 0; i < size; ++i ) {
892 arg2[i] = 100 * ( 100 - i );
897 for (
unsigned int i = 0; i < size; ++i ) {
899 double x = i * 100 * ( 100 - i );
900 double val =
reinterpret_cast< Arith*
>(oid.
data())->getOutput();
903 cout <<
"." << flush;
930 static Finfo* testIdFinfos[] = {&
id};
931 static Cinfo testIdCinfo(
932 "TestIdRepeatAssignment",
935 sizeof( testIdFinfos )/
sizeof(
Finfo* ),
944 unsigned int size = 100;
950 vector< unsigned int > numSyn( size, 0 );
951 for (
unsigned int i = 0; i < size; ++i )
958 Id synapse( cell.
value() + 1 );
960 for (
unsigned int i = 0; i < size; ++i ) {
965 for (
unsigned int i = 0; i < size; ++i ) {
966 vector< double > delay;
968 assert( delay.size() == i );
969 for (
unsigned int j = 0; j < i; ++j ) {
970 assert(
doubleEq( delay[j], 123.0 ) );
974 delete synapse.element();
976 cout <<
"." << flush;
1018 static Finfo * testFinfos[] = {
1023 static Cinfo testCinfo(
1027 sizeof( testFinfos ) /
sizeof(
Finfo* ),
1053 Test::sharedVec[0] = &
s0;
1054 Test::sharedVec[1] = &d0;
1055 Test::sharedVec[2] = &s1;
1056 Test::sharedVec[3] = &d1;
1057 Test::sharedVec[4] = &s2;
1058 Test::sharedVec[5] = &d2;
1072 tdata1->
s_ =
"tdata1";
1077 tdata2->
s_ =
"TDATA2";
1085 assert( shareFinfo != 0 );
1099 string arg1 =
" hello ";
1103 string arg2 =
" goodbye ";
1117 assert( tdata1->
s_ ==
" goodbye tdata1" );
1118 assert( tdata2->
s_ ==
" hello TDATA2" );
1119 assert( tdata1->
i1_ == 5001 );
1120 assert( tdata1->
i2_ == 6002 );
1121 assert( tdata2->
i1_ == 1005 );
1122 assert( tdata2->
i2_ == 2006 );
1129 cout <<
"." << flush;
1134 vector< unsigned int > intVec;
1135 for (
unsigned int i = 0; i < 5; ++i )
1136 intVec.push_back( i * i );
1139 double* tempBuf = buf;
1142 assert( intConv.
size( intVec ) == 1 + intVec.size() );
1143 intConv.
val2buf( intVec, &tempBuf );
1144 assert( tempBuf == buf + 6 );
1145 assert( buf[0] == intVec.size() );
1146 assert( static_cast< unsigned int >( buf[1] ) == intVec[0] );
1147 assert( static_cast< unsigned int >( buf[2] ) == intVec[1] );
1148 assert( static_cast< unsigned int >( buf[3] ) == intVec[2] );
1149 assert( static_cast< unsigned int >( buf[4] ) == intVec[3] );
1150 assert( static_cast< unsigned int >( buf[5] ) == intVec[4] );
1153 const vector< unsigned int >& testIntVec = intConv.
buf2val( &tempBuf );
1155 assert( intVec.size() == testIntVec.size() );
1156 for (
unsigned int i = 0; i < intVec.size(); ++i ) {
1157 assert( intVec[ i ] == testIntVec[i] );
1160 vector< string > strVec;
1161 strVec.push_back(
"one" );
1162 strVec.push_back(
"two" );
1163 strVec.push_back(
"three and more and more and more" );
1164 strVec.push_back(
"four and yet more" );
1169 assert( sz == 1 + 2 + ( strVec[2].length() + 8) /8 + ( strVec[3].length() + 8 )/8 );
1170 assert( buf[0] == 4 );
1171 assert( strcmp( reinterpret_cast< char* >( buf + 1 ),
"one" ) == 0 );
1174 const vector< string >& tgtStr =
1176 assert( tgtStr.size() == 4 );
1177 for (
unsigned int i = 0; i < 4; ++i )
1178 assert( tgtStr[i] == strVec[i] );
1180 cout <<
"." << flush;
1186 short row1[] = { 1 };
1187 short row2[] = { 2, 3 };
1188 short row3[] = { 4, 5, 6 };
1189 short row4[] = { 7, 8, 9, 10 };
1190 short row5[] = { 11, 12, 13, 14, 15 };
1192 vector< vector < short > > vec( 6 );
1193 vec[0].insert( vec[0].end(), row0, row0 + 0 );
1194 vec[1].insert( vec[1].end(), row1, row1 + 1 );
1195 vec[2].insert( vec[2].end(), row2, row2 + 2 );
1196 vec[3].insert( vec[3].end(), row3, row3 + 3 );
1197 vec[4].insert( vec[4].end(), row4, row4 + 4 );
1198 vec[5].insert( vec[5].end(), row5, row5 + 5 );
1200 double expected[] = {
1210 double origBuf[500];
1211 double* buf = origBuf;
1215 assert( conv.
size( vec ) == 1 + 6 + 0 + 1 + 2 + 3 + 4 + 5 );
1217 assert( buf == 22 + origBuf );
1218 for (
unsigned int i = 0; i < 22; ++i )
1219 assert(
doubleEq( origBuf[i], expected[i] ) );
1221 double* buf2 = origBuf;
1222 const vector< vector< short > >& rc = conv.
buf2val( &buf2 );
1224 assert( rc.size() == 6 );
1225 for (
unsigned int i = 0; i < 6; ++i ) {
1226 assert( rc[i].size() == i );
1227 for (
unsigned int j = 0; j < i; ++j )
1228 assert( rc[i][j] == vec[i][j] );
1231 cout <<
"." << flush;
1237 unsigned int size = 10;
1261 assert( sm->getI1() == 5 );
1262 assert( sm->getI2() == 3 );
1265 s.setBindIndex( 0 );
1268 for (
unsigned int i = 0; i < size; ++i ) {
1276 double val =
reinterpret_cast< Arith*
>( tgt3.data() )->getOutput();
1278 val =
reinterpret_cast< Arith*
>( tgt8.data() )->getOutput();
1284 for (
unsigned int i = 0; i < size; ++i ) {
1285 double x = i * 1000;
1288 val =
reinterpret_cast< Arith*
>( tgt3.data() )->getOutput();
1290 val =
reinterpret_cast< Arith*
>( tgt8.data() )->getOutput();
1293 cout <<
"." << flush;
1303 unsigned int size = 100;
1308 Id i3( i2.value() + 1 );
1309 Id i4( i3.value() + 1 );
1324 vector< double > vec;
1325 for (
unsigned int i = 0; i < size; ++i ) {
1327 ObjId b( i1, size - i - 1);
1333 double temp2 = temp * temp;
1336 vec.push_back( temp2 - temp );
1342 for (
unsigned int i = 0; i < size; ++i ) {
1349 ObjId b( i3, size - i - 1 );
1352 double temp2 = temp * temp;
1354 double v =
reinterpret_cast< Arith*
>(a.
data() )->getOutput();
1357 v =
reinterpret_cast< Arith*
>(b.
data() )->getOutput();
1360 v =
reinterpret_cast< Arith*
>( c.
data() )->getOutput();
1361 assert(
doubleEq( v, temp2 - temp ) );
1364 for (
unsigned int i = 0; i < size; ++i ) {
1368 ObjId b( i1, size - i - 1 );
1371 double temp2 = temp * temp;
1379 assert(
doubleEq( temp2 - temp, ret ) );
1383 cout <<
"." << flush;
1400 unsigned int size = 100;
1409 for (
unsigned int i = 0; i < 4; ++i )
1411 for (
unsigned int i = 0; i < 4; ++i )
1424 for (
unsigned int i = 0; i < 4; ++i )
1428 obj,
"anyValue", 0 );
1440 cout <<
"." << flush;
1448 assert( a->
isA(
"Arith" ) );
1449 assert( a->
isA(
"Neutral" ) );
1450 assert( !a->
isA(
"Fish" ) );
1451 assert( !a->
isA(
"Synapse" ) );
1452 assert( !n->
isA(
"Arith" ) );
1453 assert( n->
isA(
"Neutral" ) );
1454 cout <<
"." << flush;
1467 assert( vmFinfo.
getName() ==
"Vm" );
1468 assert( vmFinfo.
docs() ==
"Membrane potential" );
1469 assert( vmFinfo.
src().size() == 0 );
1470 assert( vmFinfo.
dest().size() == 2 );
1471 assert( vmFinfo.
dest()[0] ==
"setVm" );
1472 assert( vmFinfo.
dest()[1] ==
"getVm" );
1473 assert( vmFinfo.
type() ==
"double" );
1475 assert( synFinfo.
getName() ==
"synapse" );
1476 assert( synFinfo.
docs() ==
"Sets up field Elements for synapse" );
1477 assert( synFinfo.
src().size() == 0 );
1478 assert( synFinfo.
dest().size() == 0 );
1482 assert( procFinfo.
getName() ==
"proc" );
1483 assert( procFinfo.
docs() ==
"Shared message for process and reinit" );
1484 assert( procFinfo.
src().size() == 0 );
1485 assert( procFinfo.
dest().size() == 2 );
1486 assert( procFinfo.
dest()[0] ==
"process" );
1487 assert( procFinfo.
dest()[1] ==
"reinit" );
1489 assert( procFinfo.
type() ==
"void" );
1491 assert( processFinfo.
getName() ==
"process" );
1492 assert( processFinfo.
docs() ==
"Handles process call" );
1493 assert( processFinfo.
src().size() == 0 );
1494 assert( processFinfo.
dest().size() == 0 );
1496 assert( processFinfo.
type() ==
"const ProcInfo*" );
1498 assert( reinitFinfo.
getName() ==
"reinit" );
1499 assert( reinitFinfo.
docs() ==
"Handles reinit call" );
1500 assert( reinitFinfo.
src().size() == 0 );
1501 assert( reinitFinfo.
dest().size() == 0 );
1503 assert( reinitFinfo.
type() ==
"const ProcInfo*" );
1505 assert( spikeFinfo.
getName() ==
"spikeOut" );
1506 assert( spikeFinfo.
docs() ==
"Sends out spike events. The argument is the timestamp of the spike. " );
1507 assert( spikeFinfo.
src().size() == 0 );
1508 assert( spikeFinfo.
dest().size() == 0 );
1510 assert( spikeFinfo.
type() ==
"double" );
1512 assert( classNameFinfo.
getName() ==
"className" );
1513 assert( classNameFinfo.
type() ==
"string" );
1515 cout <<
"." << flush;
1532 assert( cinfo->getNumSrcFinfo() == 1 + nsf );
1533 assert( cinfo->getSrcFinfo( 0 + nsf ) == cinfo->findFinfo(
"spikeOut" ) );
1536 assert( ndf == 29 );
1538 assert( sdf == 40 );
1547 assert( cinfo->getDestFinfo( 0+ndf ) == cinfo->findFinfo(
"setVm" ) );
1548 assert( cinfo->getDestFinfo( 1+ndf ) == cinfo->findFinfo(
"getVm" ) );
1549 assert( cinfo->getDestFinfo( 2+ndf ) == cinfo->findFinfo(
"setTau" ) );
1550 assert( cinfo->getDestFinfo( 3+ndf ) == cinfo->findFinfo(
"getTau" ) );
1552 assert( cinfo->getDestFinfo( 4+ndf ) == cinfo->findFinfo(
"setThresh" ) );
1553 assert( cinfo->getDestFinfo( 5+ndf ) == cinfo->findFinfo(
"getThresh" ) );
1554 assert( cinfo->getDestFinfo( 6+ndf ) == cinfo->findFinfo(
"setRefractoryPeriod" ) );
1555 assert( cinfo->getDestFinfo( 7+ndf ) == cinfo->findFinfo(
"getRefractoryPeriod" ) );
1556 assert( cinfo->getDestFinfo( 8+ndf ) == cinfo->findFinfo(
"activation" ) );
1557 assert( cinfo->getDestFinfo( 9+ndf ) == cinfo->findFinfo(
"process" ) );
1558 assert( cinfo->getDestFinfo( 10+ndf ) == cinfo->findFinfo(
"reinit" ) );
1562 assert( nvf == 19 );
1563 assert( cinfo->getNumValueFinfo() == 4 + nvf );
1564 assert( cinfo->getValueFinfo( 0 + nvf ) == cinfo->findFinfo(
"Vm" ) );
1565 assert( cinfo->getValueFinfo( 1 + nvf ) == cinfo->findFinfo(
"tau" ) );
1566 assert( cinfo->getValueFinfo( 2 + nvf ) == cinfo->findFinfo(
"thresh" ) );
1567 assert( cinfo->getValueFinfo( 3 + nvf ) == cinfo->findFinfo(
"refractoryPeriod" ) );
1571 assert( cinfo->getNumLookupFinfo() == 0 + nlf );
1572 assert( cinfo->getLookupFinfo( 0 + nlf )->name() ==
"dummy");
1575 assert( nshf == 0 );
1576 assert( cinfo->getNumSharedFinfo() == 1 + nshf );
1577 assert( cinfo->getSharedFinfo( 0 + nshf ) == cinfo->findFinfo(
"proc" ) );
1579 cout <<
"." << flush;
1584 Id intFireCinfoId(
"/classes/IntFire" );
1591 assert( intFireCinfoId !=
Id() );
1595 Id intFireValueFinfoId(
"/classes/IntFire/valueFinfo" );
1597 intFireValueFinfoId,
"numData" );
1599 Id intFireSrcFinfoId(
"/classes/IntFire/srcFinfo" );
1600 assert( intFireSrcFinfoId !=
Id() );
1603 Id intFireDestFinfoId(
"/classes/IntFire/destFinfo" );
1604 assert( intFireDestFinfoId !=
Id() );
1608 ObjId temp( intFireSrcFinfoId, 0 );
1610 assert( foo ==
"spikeOut" );
1613 assert( foo ==
"double" );
1618 temp =
ObjId( intFireDestFinfoId, 7 );
1620 assert( str ==
"getRefractoryPeriod");
1621 temp =
ObjId( intFireDestFinfoId, 10 );
1623 assert( str ==
"reinit" );
1624 cout <<
"." << flush;
1664 assert( shareFinfo != 0 );
1667 bool ret = shareFinfo->addMsg( shareFinfo, m->
mid(), t1.
element() );
1673 vector< pair< BindIndex, FuncId > > pairs;
1675 assert( pairs.size() == 3 );
1676 assert( pairs[0].first == dynamic_cast< SrcFinfo* >(Test::sharedVec[0])->getBindIndex() );
1677 assert( pairs[0].second == dynamic_cast< DestFinfo* >(Test::sharedVec[1])->getFid() );
1679 assert( pairs[1].first == dynamic_cast< SrcFinfo* >(Test::sharedVec[2])->getBindIndex() );
1680 assert( pairs[1].second == dynamic_cast< DestFinfo* >(Test::sharedVec[3])->getFid() );
1682 assert( pairs[2].first == dynamic_cast< SrcFinfo* >(Test::sharedVec[4])->getBindIndex() );
1683 assert( pairs[2].second == dynamic_cast< DestFinfo* >(Test::sharedVec[5])->getFid() );
1685 e2->getFieldsOfOutgoingMsg( m->
mid(), pairs );
1686 assert( pairs.size() == 3 );
1698 assert(
Test::initCinfo()->destFinfoName( pairs[0].second ) ==
"d0" );
1699 assert(
Test::initCinfo()->destFinfoName( pairs[1].second ) ==
"d1" );
1700 assert(
Test::initCinfo()->destFinfoName( pairs[2].second ) ==
"d2" );
1704 vector< string > fieldNames;
1706 assert( fieldNames.size() == 3 );
1707 assert( fieldNames[0] ==
"s0" );
1708 assert( fieldNames[1] ==
"s1" );
1709 assert( fieldNames[2] ==
"s2" );
1712 assert( fieldNames.size() == 3 );
1713 assert( fieldNames[0] ==
"d0" );
1714 assert( fieldNames[1] ==
"d1" );
1715 assert( fieldNames[2] ==
"d2" );
1718 assert( fieldNames.size() == 3 );
1719 assert( fieldNames[0] ==
"s0" );
1720 assert( fieldNames[1] ==
"s1" );
1721 assert( fieldNames[2] ==
"s2" );
1724 assert( fieldNames.size() == 3 );
1725 assert( fieldNames[0] ==
"d0" );
1726 assert( fieldNames[1] ==
"d1" );
1727 assert( fieldNames[2] ==
"d2" );
1732 vector< ObjId > tgt;
1733 vector< string > func;
1735 dynamic_cast< SrcFinfo* >(Test::sharedVec[0] ),
1737 assert( numTgt == tgt.size() );
1738 assert( tgt.size() == 1 );
1739 assert( tgt[0] ==
ObjId( t2, 0 ) );
1740 assert( func[0] ==
"d0" );
1743 numTgt = e2->getMsgTargetAndFunctions( 0,
1744 dynamic_cast< SrcFinfo* >(Test::sharedVec[4] ),
1746 assert( numTgt == tgt.size() );
1747 assert( tgt.size() == 1 );
1748 assert( tgt[0] ==
ObjId( t1, 0 ) );
1749 assert( func[0] ==
"d2" );
1754 vector< ObjId > source;
1755 vector< string > sender;
1757 static_cast< const DestFinfo*
>( Test::sharedVec[5] )->getFid();
1759 fid, source, sender );
1760 assert( numSrc == 1 );
1761 assert( source.size() == 1 );
1762 assert( source[0] == tgt[0] );
1763 assert( sender[0] == Test::sharedVec[4]->
name() );
1764 cout <<
"." << flush;
1771 cout <<
"." << flush;
1781 two.
op(
Id(3).eref(),
"two", 2468.0 );
1786 const char* c =
reinterpret_cast< const char*
>(
1788 assert( strcmp( c,
"two" ) == 0 );
1793 vector< double > temp( 3 );
1796 temp[2] = 234232342;
1797 three.
op(
Id(3).eref(),
"three", 3333, temp );
1802 assert( strcmp( c,
"three" ) == 0 );
1804 assert(
doubleEq( buf[i++], 3333.0 ) );
1805 assert(
doubleEq( buf[i++], 3.0 ) );
1806 assert(
doubleEq( buf[i++], temp[0] ) );
1807 assert(
doubleEq( buf[i++], temp[1] ) );
1808 assert(
doubleEq( buf[i++], temp[2] ) );
1810 cout <<
"." << flush;
1816 #ifdef DO_UNIT_TESTS
static const Cinfo * initCinfo()
void handleS1(const Eref &e, string s)
unsigned int nEntries() const
Id init(int argc, char **argv, bool &doUnitTests, bool &doRegressionTests, unsigned int &benchmark)
unsigned int randomConnect(double probability)
static void val2buf(const T &val, double **buf)
void tripletFill(const vector< unsigned int > &row, const vector< unsigned int > &col, const vector< T > &z, bool retainSize=false)
double getIdentifiedArg(unsigned int i) const
void process(const Eref &e, ProcPtr p)
unsigned int getNumSrcFinfo() const
static bool set(const ObjId &dest, const string &field, L index, A arg)
void setName(const string &val)
static bool setVec(Id destId, const string &field, const vector< A1 > &arg1, const vector< A2 > &arg2)
unsigned int nColumns() const
T get(unsigned int row, unsigned int column) const
static A get(const ObjId &dest, const string &field, L index)
void printSparseMatrix(const SparseMatrix< unsigned int > &m)
Element * element() const
Synonym for Id::operator()()
unsigned int bindIndex() const
unsigned int getNumDestFinfo() const
BindIndex getBindIndex() const
static DestFinfo processFinfo("process","handles process call", new EpFunc1< TestSched, ProcPtr >(&TestSched::process))
unsigned int value() const
void set(unsigned int row, unsigned int column, T value)
static Finfo * sharedVec[6]
static bool setRepeat(ObjId destId, const string &field, A arg)
unsigned int getRow(unsigned int row, const T **entry, const unsigned int **colIndex) const
void op(const Eref &e, A1 arg1, A2 arg2) const
unsigned int dataIndex() const
unsigned int dataSize() const
vector< string > getDestFieldsOnE2() const
unsigned int getMsgTargetAndFunctions(DataId srcDataId, const SrcFinfo *finfo, vector< ObjId > &tgt, vector< string > &func) const
unsigned int getNumValueFinfo() const
unsigned int getNumSynapses() const
static const unsigned int headerSize
void testSparseMatrixReorder()
unsigned int nRows() const
void addMsgAndFunc(ObjId mid, FuncId fid, BindIndex bindIndex)
static const Cinfo * neutralCinfo
Element * element() const
unsigned int getMsgSourceAndSender(FuncId fid, vector< ObjId > &src, vector< string > &sender) const
static bool set(const ObjId &dest, const string &field, A arg)
vector< string > dest() const
static const Cinfo * initCinfo()
virtual void targets(vector< vector< Eref > > &v) const =0
void send(const Eref &er, T arg) const
void op(const Eref &e, A1 arg1, A2 arg2, A3 arg3) const
vector< string > src() const
unsigned int getFieldsOfOutgoingMsg(ObjId mid, vector< pair< BindIndex, FuncId > > &ret) const
static bool strSet(const ObjId &dest, const string &field, const string &val)
void testSetGetExtField()
void setGlobalSeed(int seed)
bool doubleEq(double x, double y)
static const Cinfo * initCinfo()
void send(const Eref &e, const T1 &arg1, const T2 &arg2) const
void setBindIndex(BindIndex b)
const vector< MsgDigest > & msgDigest(unsigned int index)
static SrcFinfo0 s0("s0","")
void testSparseMatrixFill()
static unsigned int size(const T &val)
virtual bool addMsg(const Finfo *target, ObjId mid, Element *src) const
static bool strGet(const ObjId &tgt, const string &field, string &ret)
void setIdentifiedArg(unsigned int i, double val)
bool isA(const string &ancestor) const
unsigned int getNumSharedFinfo() const
void setSize(unsigned int nrows, unsigned int ncolumns)
virtual unsigned int numData() const =0
Returns number of data entries across all nodes.
static bool setVec(ObjId destId, const string &field, const vector< A > &arg)
void testConvVectorOfVectors()
const double * checkHopFuncTestBuffer()
static const Cinfo * initCinfo()
Element * element() const
vector< vector< T > > resize(vector< vector< T > >table, unsigned int n, T init)
virtual char * data(unsigned int rawIndex, unsigned int fieldIndex=0) const =0
static const T & buf2val(double **buf)
void send(const Eref &e) const
vector< string > getSrcFieldsOnE1() const
static bool adopt(ObjId parent, Id child, unsigned int msgIndex)
vector< string > getSrcFieldsOnE2() const
double mtrand(void)
Generate a random double between 0 and 1.
static const Cinfo * initCinfo()
PyTypeObject * getBaseClass(PyObject *self)
static const Cinfo * initCinfo()
void reorderColumns(const vector< unsigned int > &colMap)
static A get(const ObjId &dest, const string &field)
static const Cinfo * initCinfo()
unsigned int getNumLookupFinfo() const
static void getVec(ObjId dest, const string &field, vector< A > &vec)
vector< string > getDestFieldsOnE1() const
void printGrid(Element *e, const string &field, double min, double max)
const string & getName() const
const unsigned char MooseTestHop
void testMsgSrcDestFields()
static bool setRepeat(ObjId destId, const string &field, const A &arg)
void handleS2(const Eref &e, int i1, int i2)
const Finfo * findFinfo(const string &name) const