I'm fairly new to C++ and this is my first time using googletest. I'm trying to implement a code that would simulate a network of inhibitory and excitatory neurons. Every neurone receives inputs from 10% of the population. The spike is received with a delay and stored in a buffer so when the target neuron updates its membrane potential, it can easily read the inputs. Now, I would like to test that when one neuron spikes, its input is written at the right index with the right value. So first I want to loop over every neuron of the population, and then for every neuron I would like to loop over each of its targets and check the buffer of every one; so at the end of my second loop, I have my EXPECT & ASSERT statements. Everything seems to work fine, except I have a feeling it's not testing for all targets and neurons but only the last neuron and its last target (?). Indeed, when I run the test on my terminal it says: 1 test from BufferTest, Run OK. It should be much more tests no ?
Here is my code for that test:
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;
}
This:
TEST(BufferTest, write_read_resetBuffer) {
...
}
is one test, write_read_resetBuffer
, from one test case, BufferTest
.
It doesn't matter how many EXPECT/ASSERT
calls you make inside it. Any
EXPECT
failures will be individually reported in the
output of this test. There can be at most one ASSERT
failure in a test,
of course, because any ASSERT
failure ends the test.
If you want to see one test per EXPECT/ASSERT
call then you have
to write more TEST
s, each containing only one EXPECT/ASSERT
. You
could put them in the same test case:
TEST(BufferTest, anotherTest) {
...
}
or in different test cases:
TEST(AnotherBufferTest, someTest) {
...
}
as you see fit. But there is nothing wrong with what you've done. Your single test has passed.