Fixed unit tests, added swap function to tl::list

This commit is contained in:
Matthias Koefferlein 2019-01-25 23:19:12 +01:00
parent 4712ee0f29
commit 74b6341425
2 changed files with 42 additions and 2 deletions

View File

@ -28,6 +28,7 @@
#include "tlTypeTraits.h"
#include <iterator>
#include <algorithm>
namespace tl
{
@ -141,6 +142,24 @@ public:
}
}
void swap (list_impl<C, tl::false_tag> &other)
{
std::swap (m_head.mp_next, other.m_head.mp_next);
if (m_head.mp_next) {
m_head.mp_next->mp_prev = &m_head;
}
if (other.m_head.mp_next) {
other.m_head.mp_next->mp_prev = &other.m_head;
}
std::swap (m_back.mp_prev, other.m_back.mp_prev);
if (m_back.mp_prev) {
m_back.mp_prev->mp_next = &m_back;
}
if (other.m_back.mp_prev) {
other.m_back.mp_prev->mp_next = &other.m_back;
}
}
bool empty () const
{
return m_head.mp_next == &m_back;
@ -303,7 +322,7 @@ public:
list_impl () { }
list_impl (const list_impl &other)
: list_impl<C, tl::false_tag> (other)
: list_impl<C, tl::false_tag> ()
{
operator= (other);
}

View File

@ -263,9 +263,24 @@ TEST(1_Basic)
EXPECT_EQ (l2sr (l3), "1,17");
EXPECT_EQ (l3.size (), size_t (2));
EXPECT_EQ (l2sr (l2), "17");
EXPECT_EQ (l2sr (l3), "1,17");
l3.swap (l2);
EXPECT_EQ (l2sr (l2), "1,17");
EXPECT_EQ (l2sr (l3), "17");
l1.clear ();
l2.swap (l1);
EXPECT_EQ (l2sr (l1), "1,17");
EXPECT_EQ (l2sr (l2), "");
l1.clear ();
l2.clear ();
l3.clear ();
l2.swap (l1);
EXPECT_EQ (l2sr (l1), "");
EXPECT_EQ (l2sr (l2), "");
EXPECT_EQ (obj_count, size_t (0));
}
@ -383,6 +398,12 @@ TEST(2_BasicNoCopy)
EXPECT_EQ (l2sr (l3), "1,17");
EXPECT_EQ (l3.size (), size_t (2));
EXPECT_EQ (l2sr (l2), "17");
EXPECT_EQ (l2sr (l3), "1,17");
l3.swap (l2);
EXPECT_EQ (l2sr (l2), "1,17");
EXPECT_EQ (l2sr (l3), "17");
l1.clear ();
l2.clear ();
l3.clear ();