#include #include using namespace vanetza; struct ObjectA { int a = 1; }; struct ObjectB { int b = 2; }; struct ObjectC { int c = 3; }; template std::unique_ptr create_unique() { return std::unique_ptr { new T() }; } TEST(ObjectContainer, size) { ObjectContainer c; EXPECT_EQ(0, c.size()); c.insert(create_unique()); EXPECT_EQ(1, c.size()); c.insert(create_unique()); EXPECT_EQ(1, c.size()); c.insert(create_unique()); EXPECT_EQ(2, c.size()); c.clear(); EXPECT_EQ(0, c.size()); } TEST(ObjectContainer, insert) { ObjectContainer c; EXPECT_TRUE(c.insert(create_unique())); EXPECT_FALSE(c.insert(create_unique())); EXPECT_TRUE(c.insert(create_unique())); } TEST(ObjectContainer, find) { ObjectContainer c; EXPECT_EQ(nullptr, c.find()); auto a = create_unique(); ObjectA* pa = a.get(); auto b = create_unique(); ObjectB* pb = b.get(); c.insert(std::move(a)); c.insert(std::move(b)); EXPECT_EQ(pa, c.find()); EXPECT_EQ(pb, c.find()); } TEST(ObjectContainer, erase) { ObjectContainer c; c.insert(create_unique()); ASSERT_EQ(1, c.size()); c.erase(); EXPECT_EQ(1, c.size()); c.erase(); EXPECT_EQ(0, c.size()); c.insert(create_unique()); c.insert(create_unique()); c.insert(create_unique()); c.erase(); EXPECT_EQ(2, c.size()); EXPECT_NE(nullptr, c.find()); EXPECT_EQ(nullptr, c.find()); EXPECT_NE(nullptr, c.find()); } TEST(ObjectContainer, move) { ObjectContainer c1; c1.insert(create_unique()); c1.insert(create_unique()); c1.insert(create_unique()); ASSERT_EQ(3, c1.size()); auto* pa = c1.find(); auto* pb = c1.find(); auto* pc = c1.find(); ObjectContainer c2 = std::move(c1); EXPECT_EQ(0, c1.size()); EXPECT_EQ(3, c2.size()); EXPECT_EQ(pa, c2.find()); EXPECT_EQ(pb, c2.find()); EXPECT_EQ(pc, c2.find()); } TEST(ObjectContainer, get) { ObjectContainer c; EXPECT_EQ(nullptr, c.find()); ObjectA& a = c.get(); EXPECT_EQ(1, a.a); }