Skip to content
Snippets Groups Projects
Select Git revision
  • a8cb6bd28fb53ab00bafc4b26c1c83b19e0058d7
  • master default protected
2 results

webpack.test.js

Blame
  • test_event_queue.cpp 2.26 KiB
    #include "gtest.h"
    
    #include <vector>
    
    #include <event_queue.hpp>
    
    TEST(event_queue, push)
    {
        using namespace nest::mc;
        using ps_event_queue = event_queue<postsynaptic_spike_event>;
    
        ps_event_queue q;
    
        q.push({1u, 2.f, 2.f});
        q.push({4u, 1.f, 2.f});
        q.push({8u, 20.f, 2.f});
        q.push({2u, 8.f, 2.f});
    
        std::vector<float> times;
        while(q.size()) {
            times.push_back(
                q.pop_if_before(std::numeric_limits<float>::max())->time
            );
        }
    
        //std::copy(times.begin(), times.end(), std::ostream_iterator<float>(std::cout, ","));
        //std::cout << "\n";
        EXPECT_TRUE(std::is_sorted(times.begin(), times.end()));
    }
    
    TEST(event_queue, push_range)
    {
        using namespace nest::mc;
        using ps_event_queue = event_queue<postsynaptic_spike_event>;
    
        postsynaptic_spike_event events[] = {
            {1u, 2.f, 2.f},
            {4u, 1.f, 2.f},
            {8u, 20.f, 2.f},
            {2u, 8.f, 2.f}
        };
    
        ps_event_queue q;
        q.push(std::begin(events), std::end(events));
    
        std::vector<float> times;
        while(q.size()) {
            times.push_back(
                q.pop_if_before(std::numeric_limits<float>::max())->time
            );
        }
    
        EXPECT_TRUE(std::is_sorted(times.begin(), times.end()));
    }
    
    TEST(event_queue, pop_if_before)
    {
        using namespace nest::mc;
        using ps_event_queue = event_queue<postsynaptic_spike_event>;
    
        postsynaptic_spike_event events[] = {
            {1u, 1.f, 2.f},
            {2u, 2.f, 2.f},
            {3u, 3.f, 2.f},
            {4u, 4.f, 2.f}
        };
    
        ps_event_queue q;
        q.push(std::begin(events), std::end(events));
    
        EXPECT_EQ(q.size(), 4u);
    
        auto e1 = q.pop_if_before(0.);
        EXPECT_FALSE(e1);
        EXPECT_EQ(q.size(), 4u);
    
        auto e2 = q.pop_if_before(5.);
        EXPECT_TRUE(e2);
        EXPECT_EQ(e2->target, 1u);
        EXPECT_EQ(q.size(), 3u);
    
        auto e3 = q.pop_if_before(5.);
        EXPECT_TRUE(e3);
        EXPECT_EQ(e3->target, 2u);
        EXPECT_EQ(q.size(), 2u);
    
        auto e4 = q.pop_if_before(2.5);
        EXPECT_FALSE(e4);
        EXPECT_EQ(q.size(), 2u);
    
        auto e5 = q.pop_if_before(5.);
        EXPECT_TRUE(e5);
        EXPECT_EQ(e5->target, 3u);
        EXPECT_EQ(q.size(), 1u);
    
        q.pop_if_before(5.);
        EXPECT_EQ(q.size(), 0u);
    
        // empty queue should always return "false"
        auto e6 = q.pop_if_before(100.);
        EXPECT_FALSE(e6);
    }