From ceeee1a8ec4254131c1130a1cf45e627671d96e4 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Fri, 9 Sep 2016 13:56:57 +0300 Subject: [PATCH] Tests on using deque by SortUnique and EqualsBy --- base/base_tests/stl_helpers_test.cpp | 131 ++++++++++++++++----------- 1 file changed, 77 insertions(+), 54 deletions(-) diff --git a/base/base_tests/stl_helpers_test.cpp b/base/base_tests/stl_helpers_test.cpp index af47c7e5fb..23246beeff 100644 --- a/base/base_tests/stl_helpers_test.cpp +++ b/base/base_tests/stl_helpers_test.cpp @@ -3,6 +3,7 @@ #include "base/stl_helpers.hpp" #include "std/algorithm.hpp" +#include "std/deque.hpp" #include "std/utility.hpp" #include "std/vector.hpp" @@ -19,6 +20,70 @@ private: int m_v; }; +template class TContainer> +void TestSortUnique() +{ + { + TContainer> actual = {1, 2, 1, 4, 3, 5, 2, 7, 1}; + my::SortUnique(actual); + TContainer> const expected = {1, 2, 3, 4, 5, 7}; + TEST_EQUAL(actual, expected, ()); + } + { + using TValue = int; + using TPair = pair; + TContainer> d = + {{1, 22}, {2, 33}, {1, 23}, {4, 54}, {3, 34}, {5, 23}, {2, 23}, {7, 32}, {1, 12}}; + + my::SortUnique(d, my::LessBy(&TPair::first), my::EqualsBy(&TPair::first)); + + TContainer> const expected = {1, 2, 3, 4, 5, 7}; + TEST_EQUAL(d.size(), expected.size(), ()); + for (int i = 0; i < d.size(); ++i) + TEST_EQUAL(d[i].first, expected[i], (i)); + } + { + using TValue = double; + using TPair = pair; + TContainer> d = + {{0.5, 11}, {1000.99, 234}, {0.5, 23}, {1234.56789, 54}, {1000.99, 34}}; + + my::SortUnique(d, my::LessBy(&TPair::first), my::EqualsBy(&TPair::first)); + + TContainer> const expected = {0.5, 1000.99, 1234.56789}; + TEST_EQUAL(d.size(), expected.size(), ()); + for (int i = 0; i < d.size(); ++i) + TEST_EQUAL(d[i].first, expected[i], (i)); + } +} + +template class TContainer> +void TestEqualsBy() +{ + { + using TValue = pair; + TContainer> actual = {{1, 2}, {1, 3}, {2, 100}, {3, 7}, {3, 8}, {2, 500}}; + actual.erase(unique(actual.begin(), actual.end(), my::EqualsBy(&TValue::first)), actual.end()); + + TContainer> const expected = {{1, 2, 3, 2}}; + TEST_EQUAL(expected.size(), actual.size(), ()); + for (size_t i = 0; i < actual.size(); ++i) + TEST_EQUAL(expected[i], actual[i].first, ()); + } + + { + TContainer> actual; + for (auto const v : {0, 0, 1, 2, 2, 0}) + actual.emplace_back(v); + actual.erase(unique(actual.begin(), actual.end(), my::EqualsBy(&Int::Get)), actual.end()); + + TContainer> const expected = {{0, 1, 2, 0}}; + TEST_EQUAL(expected.size(), actual.size(), ()); + for (size_t i = 0; i < actual.size(); ++i) + TEST_EQUAL(expected[i], actual[i].Get(), ()); + } +} + UNIT_TEST(LessBy) { { @@ -49,65 +114,23 @@ UNIT_TEST(LessBy) } } -UNIT_TEST(EqualsBy) +UNIT_TEST(EqualsBy_VectorTest) { - { - using TValue = pair; - vector actual = {{1, 2}, {1, 3}, {2, 100}, {3, 7}, {3, 8}, {2, 500}}; - actual.erase(unique(actual.begin(), actual.end(), my::EqualsBy(&TValue::first)), actual.end()); - - vector const expected = {{1, 2, 3, 2}}; - TEST_EQUAL(expected.size(), actual.size(), ()); - for (size_t i = 0; i < actual.size(); ++i) - TEST_EQUAL(expected[i], actual[i].first, ()); - } - - { - vector actual; - for (auto const v : {0, 0, 1, 2, 2, 0}) - actual.emplace_back(v); - actual.erase(unique(actual.begin(), actual.end(), my::EqualsBy(&Int::Get)), actual.end()); - - vector const expected = {{0, 1, 2, 0}}; - TEST_EQUAL(expected.size(), actual.size(), ()); - for (size_t i = 0; i < actual.size(); ++i) - TEST_EQUAL(expected[i], actual[i].Get(), ()); - } + TestEqualsBy(); } -UNIT_TEST(SortUnique) +UNIT_TEST(EqualsBy_DequeTest) { - { - vector actual = {1, 2, 1, 4, 3, 5, 2, 7, 1}; - my::SortUnique(actual); - vector const expected = {1, 2, 3, 4, 5, 7}; - TEST_EQUAL(actual, expected, ()); - } - { - using TValue = int; - using TPair = pair; - vector v = - {{1, 22}, {2, 33}, {1, 23}, {4, 54}, {3, 34}, {5, 23}, {2, 23}, {7, 32}, {1, 12}}; + TestEqualsBy(); +} - my::SortUnique(v, my::LessBy(&TPair::first), my::EqualsBy(&TPair::first)); +UNIT_TEST(SortUnique_VectorTest) +{ + TestSortUnique(); +} - vector const expected = {1, 2, 3, 4, 5, 7}; - TEST_EQUAL(v.size(), expected.size(), ()); - for (int i = 0; i < v.size(); ++i) - TEST_EQUAL(v[i].first, expected[i], (i)); - } - { - using TValue = double; - using TPair = pair; - vector v = - {{0.5, 11}, {1000.99, 234}, {0.5, 23}, {1234.56789, 54}, {1000.99, 34}}; - - my::SortUnique(v, my::LessBy(&TPair::first), my::EqualsBy(&TPair::first)); - - vector const expected = {0.5, 1000.99, 1234.56789}; - TEST_EQUAL(v.size(), expected.size(), ()); - for (int i = 0; i < v.size(); ++i) - TEST_EQUAL(v[i].first, expected[i], (i)); - } +UNIT_TEST(SortUnique_DequeTest) +{ + TestSortUnique(); } } // namespace