私はC++をかなり新しくしています。これはgoogletestを初めて使用したときです。私は、抑制ニューロンと興奮ニューロンのネットワークをシミュレートするコードを実装しようとしています。すべてのニューロンは、人口の10%からインプットを受け取ります。スパイクは遅れて受信され、バッファに保存されるため、ターゲットニューロンが膜電位を更新すると、入力を容易に読み取ることができます。さて、私は、あるニューロンが急上昇したとき、その入力が正しい値で正しいインデックスに書き込まれることをテストしたいと思います。だから最初に私は人口のすべてのニューロンをループしたいと思います。そして、すべてのニューロンについて、それぞれのターゲットをループして、すべてのバッファをチェックしたいと思います。私の2番目のループの終わりに、私は自分のEXPECT & ASSERTステートメントを持っています。すべてのターゲットとニューロンだけでなく、最後のニューロンとその最後のターゲット(?)だけをテストしているということを除いて、すべてうまくいくようです。実際、私が端末でテストを実行すると、BufferTestから1テスト、OKを実行します。はるかに多くのテストをする必要がありますか?ここforループ内のC++ EXPECT_EQ&ASSERT
は、その試験のための私のコードである:
TEST(BufferTest、write_read_resetBuffer) {
Network* net = new Network({0, 20}, 0.1, 1.5, 0.1, 20, 80, 2, 5, "BufferTest.txt");
Neuron* source = new Neuron(0, 0.1,1.5, 0.1, 2, true, 5);
Neuron* Ni = new Neuron(0, 0.1,1.5, 0.1, 2, 5, true);
bool spiking = false;
for(unsigned int j = 0; j < net->getPop(); ++j)
{
source = net->getPopulation_()[j];
source->set_iext(2);
do{
spiking = source->update_state_();
}while(!spiking);
unsigned int index = (source->getspiketime() + 15)%16;
for(unsigned int i = 0; i < source->getMyTargets().size(); ++i)
{
int target_i = source->getMyTargets()[i];
Ni = net->getPopulation_()[target_i];
Ni->set_step(source->getspiketime());
Ni->write_buffer(source->getweight());
std::vector<double> temp = Ni->getBuffer();
ASSERT_EQ(16, temp.size());
ASSERT_LE(index, temp.size());
Ni->set_step(15);
double value = Ni->read_buffer();
Ni->reset_buffer();
if(source->Is_it_excitatory())
{ EXPECT_EQ(0.1, value); }else{ EXPECT_EQ(-0.5, value); };
EXPECT_EQ(0, Ni->read_buffer());
}
}
delete net;
net = nullptr;
}