From d85899b26f116166f3c61017d0a51016c9b1a9f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Tr=C3=A1vn=C3=AD=C4=8Dek?= <jan.travnicek@fit.cvut.cz> Date: Sun, 9 Jan 2022 21:37:17 +0100 Subject: [PATCH] std: improve vector test --- .../extensions/container/VectorTest.cpp | 34 ++++++++++++++----- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/alib2std/test-src/extensions/container/VectorTest.cpp b/alib2std/test-src/extensions/container/VectorTest.cpp index 0409185894..c581acf8a7 100644 --- a/alib2std/test-src/extensions/container/VectorTest.cpp +++ b/alib2std/test-src/extensions/container/VectorTest.cpp @@ -3,6 +3,7 @@ #include <ext/type_traits> #include <ext/algorithm> #include <ext/iostream> +#include <ext/pair> namespace { class Moveable { @@ -11,15 +12,13 @@ namespace { public: Moveable(int& moves, int& copies) : m_moves(moves), m_copies(copies) { - m_moves = 0; - m_copies = 0; } Moveable(const Moveable& src) : m_moves(src.m_moves), m_copies(src.m_copies) { m_copies++; } - Moveable(Moveable&& src) : m_moves(src.m_moves), m_copies(src.m_copies) { + Moveable(Moveable&& src) noexcept : m_moves(src.m_moves), m_copies(src.m_copies) { m_moves++; } @@ -28,11 +27,13 @@ namespace { return * this; } - Moveable & operator = ( Moveable && ) { + Moveable & operator = ( Moveable && ) noexcept { m_moves ++; return * this; } + ~Moveable ( ) noexcept = default; + bool operator<(const Moveable&) const { return false; } @@ -64,8 +65,8 @@ TEST_CASE ( "Vector", "[unit][std][container]" ) { CHECK ( data == dataRef ); - int moves; - int copies; + int moves = 0; + int copies = 0; ext::vector < Moveable > vec; vec.push_back ( Moveable ( moves, copies ) ); @@ -383,8 +384,8 @@ TEST_CASE ( "Vector", "[unit][std][container]" ) { CHECK ( data == data2 ); - int moves; - int copies; + int moves = 0; + int copies = 0; ext::vector < Moveable > vec; vec.push_back ( Moveable ( moves, copies ) ); @@ -396,4 +397,21 @@ TEST_CASE ( "Vector", "[unit][std][container]" ) { CHECK ( copies == 0 ); } + + SECTION ( "Move vs Copy" ) { + int moves = 0; + int copies = 0; + + auto maker = [&](){ + return ext::make_pair ( Moveable ( moves, copies ), Moveable ( moves, copies ) ); + }; + + ext::vector < ext::pair < Moveable, Moveable > > data; + data.push_back ( maker ( ) ); + data.push_back ( maker ( ) ); + data.push_back ( maker ( ) ); + data.push_back ( maker ( ) ); + + CHECK ( copies == 0 ); + } } -- GitLab