From 4d10d47f5ef40f13dad35d360cd3dcce5e104697 Mon Sep 17 00:00:00 2001 From: John Wellbelove Date: Mon, 16 Jun 2025 08:30:35 +0100 Subject: [PATCH] Removed non-const iterator and pointer types Updated Doxygen comments --- include/etl/const_map.h | 134 +++- test/test_const_map.cpp | 1084 +++++++++++++++++++------------ test/vs2022/etl.vcxproj | 2 + test/vs2022/etl.vcxproj.filters | 6 + 4 files changed, 772 insertions(+), 454 deletions(-) diff --git a/include/etl/const_map.h b/include/etl/const_map.h index a9a8dc1c..e31c9641 100644 --- a/include/etl/const_map.h +++ b/include/etl/const_map.h @@ -53,12 +53,8 @@ namespace etl using value_type = ETL_OR_STD::pair; using mapped_type = TMapped ; using key_compare = TKeyCompare; - using reference = const value_type&; using const_reference = const value_type&; - using rvalue_reference = value_type&&; - using pointer = const value_type*; using const_pointer = const value_type*; - using iterator = const value_type*; using const_iterator = const value_type*; using size_type = size_t; @@ -73,28 +69,34 @@ namespace etl { public: - // value_compare two value types. + // Compare two value types. ETL_CONSTEXPR14 bool operator ()(const value_type& element1, const value_type& element2) const ETL_NOEXCEPT { return kcompare(element1.first, element2.first); } + // Compare value type and key. ETL_CONSTEXPR14 bool operator ()(const value_type& element, const_key_reference key) const ETL_NOEXCEPT { return kcompare(element.first, key); } + // Compare value types and key. + // Enabled for transparent comparators. template ::value, int> = 0> ETL_CONSTEXPR14 bool operator ()(const value_type& element, const K& key) const ETL_NOEXCEPT { return kcompare(element.first, key); } + // Compare key and value type. ETL_CONSTEXPR14 bool operator ()(const_key_reference key, const value_type& element) const ETL_NOEXCEPT { return kcompare(key, element.first); } + // Compare key and value type. + // Enabled for transparent comparators. template ::value, int> = 0> ETL_CONSTEXPR14 bool operator ()(const K& key, const value_type& element) const ETL_NOEXCEPT { @@ -173,6 +175,7 @@ namespace etl //************************************************************************* ///\brief Index operator. + ///\param key The key of the element to return. ///\return A const_mapped_reference to the mapped value at the index. /// Undefined behaviour if the key is not in the map. //************************************************************************* @@ -186,6 +189,7 @@ namespace etl //************************************************************************* ///\brief Key index operator. /// Enabled for transparent comparators. + ///\param key The key of the element to return. ///\return A const_mapped_reference to the mapped value at the key index. /// Undefined behaviour if the key is not in the map. //************************************************************************* @@ -199,6 +203,7 @@ namespace etl //************************************************************************* ///\brief Gets the mapped value at the key index. + ///\param key The key of the element to return. ///\return A const_mapped_reference to the mapped value at the index. /// Undefined behaviour if the key is not in the map. //************************************************************************* @@ -209,6 +214,12 @@ namespace etl return itr->second; } + //************************************************************************* + ///\brief Gets the mapped value at the key index. + /// Enabled if the comparator is transparent. + ///\param key The key of the element to return. + ///\return A const_mapped_reference to the mapped value at the index. + /// Undefined behaviour if the key is not in the map. //************************************************************************* template ::value, int> = 0> ETL_CONSTEXPR14 const_mapped_reference at(const K& key) const ETL_NOEXCEPT @@ -218,54 +229,60 @@ namespace etl return itr->second; } + //************************************************************************* + ///\brief Gets a const_iterator to the mapped value at the key index. + ///\param key The key of the element to find. + ///\return A const_iterator to the mapped value at the index, + /// or end() if not found. //************************************************************************* ETL_CONSTEXPR14 const_iterator find(const_key_reference key) const ETL_NOEXCEPT { - iterator itr = lower_bound(key); + const_iterator itr = lower_bound(key); - if (itr != end()) + if ((itr != end()) && (keys_are_equal(itr->first, key))) { - if (keys_are_equal(itr->first, key)) - { - return itr; - } - else - { - return end(); - } + return itr; } return end(); } + //************************************************************************* + ///\brief Gets a const_iterator to the mapped value at the key index. + /// Enabled if the comparator is transparent. + ///\param key The key of the element to find. + ///\return A const_iterator to the mapped value at the index, + /// or end() if not found. //************************************************************************* template ::value, int> = 0> ETL_CONSTEXPR14 const_iterator find(const K& key) const ETL_NOEXCEPT { - iterator itr = lower_bound(key); + const_iterator itr = lower_bound(key); - if (itr != end()) + if ((itr != end()) && (keys_are_equal(itr->first, key))) { - if (keys_are_equal(itr->first, key)) - { - return itr; - } - else - { - return end(); - } + return itr; } return end(); } + //************************************************************************* + ///\brief Checks if the map contains an element with key. + ///\param key The key of the element to check. + ///\return true if the map contains an element with key. //************************************************************************* ETL_CONSTEXPR14 bool contains(const_key_reference key) const ETL_NOEXCEPT { return find(key) != end(); } + //************************************************************************* + ///\brief Checks if the map contains an element with key. + /// Enabled if the comparator is transparent. + ///\param key The key of the element to check. + ///\return true if the map contains an element with key. //************************************************************************* template ::value, int> = 0> ETL_CONSTEXPR14 bool contains(const K& key) const ETL_NOEXCEPT @@ -273,12 +290,21 @@ namespace etl return find(key) != end(); } + //************************************************************************* + ///\brief Counts the numbeer elements with key. + ///\param key The key of the element to count. + ///\return 0 or 1 //************************************************************************* ETL_CONSTEXPR14 size_type count(const_key_reference key) const ETL_NOEXCEPT { return contains(key) ? 1 : 0; } + //************************************************************************* + ///\brief Counts the numbeer elements with key. + /// Enabled if the comparator is transparent. + ///\param key The key of the element to count. + ///\return 0 or 1 //************************************************************************* template ::value, int> = 0> ETL_CONSTEXPR14 size_type count(const K& key) const ETL_NOEXCEPT @@ -286,12 +312,27 @@ namespace etl return contains(key) ? 1 : 0; } + //************************************************************************* + ///\brief Returns a range containing all elements with the key. + /// The range is defined by a pair of two iterators, one to the + /// first element that is not less than the key and second to the first + /// element greater than the key. + ///\param key The key of the element + ///\return etl::pair or std::pair containing a pair of iterators. //************************************************************************* ETL_CONSTEXPR14 ETL_OR_STD::pair equal_range(const_key_reference key) const ETL_NOEXCEPT { return etl::equal_range(begin(), end(), key, vcompare); } + //************************************************************************* + ///\brief Returns a range containing all elements with the key. + /// The range is defined by a pair of two iterators, one to the + /// first element that is not less than the key and second to the first + /// element greater than the key. + /// Enabled if the comparator is transparent. + ///\param key The key of the element + ///\return etl::pair or std::pair containing a pair of iterators. //************************************************************************* template ::value, int> = 0> ETL_CONSTEXPR14 ETL_OR_STD::pair equal_range(const K& key) const ETL_NOEXCEPT @@ -299,12 +340,23 @@ namespace etl return etl::equal_range(begin(), end(), key, vcompare); } + //************************************************************************* + ///\brief Returns a const_iterator to the first element that is not less than the key. + /// Returns a const_iterator to the first element that is not less than the key. + ///\param key The key of the element + ///\return const_iterator to the element or end() //************************************************************************* ETL_CONSTEXPR14 const_iterator lower_bound(const_key_reference key) const ETL_NOEXCEPT { return etl::lower_bound(begin(), end(), key, vcompare); } + //************************************************************************* + ///\brief Returns a const_iterator to the first element that is not less than the key. + /// Returns a const_iterator to the first element that is not less than the key. + /// Enabled if the comparator is transparent. + ///\param key The key of the element + ///\return const_iterator to the element or end() //************************************************************************* template ::value, int> = 0> ETL_CONSTEXPR14 const_iterator lower_bound(const K& key) const ETL_NOEXCEPT @@ -312,12 +364,23 @@ namespace etl return etl::lower_bound(begin(), end(), key, vcompare); } + //************************************************************************* + ///\brief Returns a const_iterator to the first element that is greater than the key. + /// Returns a const_iterator to the first element that is greater than the key. + ///\param key The key of the element + ///\return const_iterator to the element or end() //************************************************************************* ETL_CONSTEXPR14 const_iterator upper_bound(const_key_reference key) const ETL_NOEXCEPT { return etl::upper_bound(begin(), end(), key, vcompare); } + //************************************************************************* + ///\brief Returns a const_iterator to the first element that is greater than the key. + /// Returns a const_iterator to the first element that is greater than the key. + /// Enabled if the comparator is transparent. + ///\param key The key of the element + ///\return const_iterator to the element or end() //************************************************************************* template ::value, int> = 0> ETL_CONSTEXPR14 const_iterator upper_bound(const K& key) const ETL_NOEXCEPT @@ -325,30 +388,46 @@ namespace etl return etl::upper_bound(begin(), end(), key, vcompare); } + //************************************************************************* + /// Checks if the map is empty. + ///\return true if the map is empty. //************************************************************************* ETL_CONSTEXPR14 size_type empty() const ETL_NOEXCEPT { return size() == 0U; } + //************************************************************************* + /// Checks if the map is full. + ///\return true if the map is full. //************************************************************************* ETL_CONSTEXPR14 size_type full() const ETL_NOEXCEPT { return size() == Size; } + //************************************************************************* + /// Gets the size of the map. + ///\return The size of the map. //************************************************************************* ETL_CONSTEXPR14 size_type size() const ETL_NOEXCEPT { return size_type(element_list_end - element_list); } + //************************************************************************* + /// Gets the maximum size of the map. + ///\return The maximum size of the map. //************************************************************************* ETL_CONSTEXPR14 size_type max_size() const ETL_NOEXCEPT { return Size; } + //************************************************************************* + /// Gets the capacity of the map. + /// This is always equal to max_size(). + ///\return The capacity of the map. //************************************************************************* ETL_CONSTEXPR14 size_type capacity() const ETL_NOEXCEPT { @@ -357,6 +436,7 @@ namespace etl //************************************************************************* /// How to compare two key elements. + ///\return An instance of the key_compare type. //************************************************************************* ETL_CONSTEXPR14 key_compare key_comp() const ETL_NOEXCEPT { @@ -365,6 +445,7 @@ namespace etl //************************************************************************* /// How to compare two value elements. + ///\return An instance of the value_compare type. //************************************************************************* ETL_CONSTEXPR14 value_compare value_comp() const ETL_NOEXCEPT { @@ -381,6 +462,9 @@ namespace etl return !key_compare()(key1, key2) && !key_compare()(key2, key1); } + //********************************************************************* + /// Check to see if the keys are equal. + /// Enabled if the comparator is transparent. //********************************************************************* template ::value, int> = 0> ETL_CONSTEXPR14 bool keys_are_equal(const K1& key1, const K2& key2) const ETL_NOEXCEPT diff --git a/test/test_const_map.cpp b/test/test_const_map.cpp index d10a1c3e..082efe99 100644 --- a/test/test_const_map.cpp +++ b/test/test_const_map.cpp @@ -108,7 +108,7 @@ namespace return (lhs.k == rhs.k); } - //#define TEST_GREATER_THAN + #define TEST_GREATER_THAN #ifdef TEST_GREATER_THAN using Data = etl::const_map>; using DataTransparentComparator = etl::const_map>; @@ -118,8 +118,6 @@ namespace #endif using value_type = Data::value_type; - - using Data_iterator = Data::iterator; using Data_const_iterator = Data::const_iterator; SUITE(test_const_map) @@ -547,61 +545,61 @@ namespace value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; #endif - ETL_OR_STD::pair result0 = data.equal_range(Key('A')); - ETL_OR_STD::pair result1 = data.equal_range(Key('B')); - ETL_OR_STD::pair result2 = data.equal_range(Key('C')); - ETL_OR_STD::pair result3 = data.equal_range(Key('D')); - ETL_OR_STD::pair result4 = data.equal_range(Key('E')); - ETL_OR_STD::pair result5 = data.equal_range(Key('F')); - ETL_OR_STD::pair result6 = data.equal_range(Key('G')); - ETL_OR_STD::pair result7 = data.equal_range(Key('H')); - ETL_OR_STD::pair result8 = data.equal_range(Key('I')); - ETL_OR_STD::pair result9 = data.equal_range(Key('J')); + ETL_OR_STD::pair resultA = data.equal_range(Key('A')); + ETL_OR_STD::pair resultB = data.equal_range(Key('B')); + ETL_OR_STD::pair resultC = data.equal_range(Key('C')); + ETL_OR_STD::pair resultD = data.equal_range(Key('D')); + ETL_OR_STD::pair resultE = data.equal_range(Key('E')); + ETL_OR_STD::pair resultF = data.equal_range(Key('F')); + ETL_OR_STD::pair resultG = data.equal_range(Key('G')); + ETL_OR_STD::pair resultH = data.equal_range(Key('H')); + ETL_OR_STD::pair resultI = data.equal_range(Key('I')); + ETL_OR_STD::pair resultJ = data.equal_range(Key('J')); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(9, (std::distance(data.begin(), result0.first))); - CHECK_EQUAL(8, (std::distance(data.begin(), result1.first))); - CHECK_EQUAL(7, (std::distance(data.begin(), result2.first))); - CHECK_EQUAL(6, (std::distance(data.begin(), result3.first))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4.first))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5.first))); - CHECK_EQUAL(3, (std::distance(data.begin(), result6.first))); - CHECK_EQUAL(2, (std::distance(data.begin(), result7.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result8.first))); - CHECK_EQUAL(0, (std::distance(data.begin(), result9.first))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA.first))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB.first))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC.first))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultD.first))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE.first))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF.first))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultG.first))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultH.first))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultI.first))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultJ.first))); - CHECK_EQUAL(10, (std::distance(data.begin(), result0.second))); - CHECK_EQUAL(9, (std::distance(data.begin(), result1.second))); - CHECK_EQUAL(8, (std::distance(data.begin(), result2.second))); - CHECK_EQUAL(7, (std::distance(data.begin(), result3.second))); - CHECK_EQUAL(6, (std::distance(data.begin(), result4.second))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5.second))); - CHECK_EQUAL(4, (std::distance(data.begin(), result6.second))); - CHECK_EQUAL(3, (std::distance(data.begin(), result7.second))); - CHECK_EQUAL(2, (std::distance(data.begin(), result8.second))); - CHECK_EQUAL(1, (std::distance(data.begin(), result9.second))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultA.second))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultB.second))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultC.second))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD.second))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultE.second))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF.second))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultG.second))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultH.second))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultI.second))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultJ.second))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1.first))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2.first))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3.first))); - CHECK_EQUAL(4, (std::distance(data.begin(), result4.first))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5.first))); - CHECK_EQUAL(6, (std::distance(data.begin(), result6.first))); - CHECK_EQUAL(7, (std::distance(data.begin(), result7.first))); - CHECK_EQUAL(8, (std::distance(data.begin(), result8.first))); - CHECK_EQUAL(9, (std::distance(data.begin(), result9.first))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA.first))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB.first))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC.first))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD.first))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE.first))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF.first))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG.first))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH.first))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI.first))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result0.second))); - CHECK_EQUAL(2, (std::distance(data.begin(), result1.second))); - CHECK_EQUAL(3, (std::distance(data.begin(), result2.second))); - CHECK_EQUAL(4, (std::distance(data.begin(), result3.second))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4.second))); - CHECK_EQUAL(6, (std::distance(data.begin(), result5.second))); - CHECK_EQUAL(7, (std::distance(data.begin(), result6.second))); - CHECK_EQUAL(8, (std::distance(data.begin(), result7.second))); - CHECK_EQUAL(9, (std::distance(data.begin(), result8.second))); - CHECK_EQUAL(10, (std::distance(data.begin(), result9.second))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultA.second))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultB.second))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultC.second))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultD.second))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE.second))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultF.second))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultG.second))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultH.second))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultI.second))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultJ.second))); #endif } @@ -616,61 +614,61 @@ namespace value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; #endif - static constexpr ETL_OR_STD::pair result0 = data.equal_range(Key('A')); - static constexpr ETL_OR_STD::pair result1 = data.equal_range(Key('B')); - static constexpr ETL_OR_STD::pair result2 = data.equal_range(Key('C')); - static constexpr ETL_OR_STD::pair result3 = data.equal_range(Key('D')); - static constexpr ETL_OR_STD::pair result4 = data.equal_range(Key('E')); - static constexpr ETL_OR_STD::pair result5 = data.equal_range(Key('F')); - static constexpr ETL_OR_STD::pair result6 = data.equal_range(Key('G')); - static constexpr ETL_OR_STD::pair result7 = data.equal_range(Key('H')); - static constexpr ETL_OR_STD::pair result8 = data.equal_range(Key('I')); - static constexpr ETL_OR_STD::pair result9 = data.equal_range(Key('J')); + static constexpr ETL_OR_STD::pair resultA = data.equal_range(Key('A')); + static constexpr ETL_OR_STD::pair resultB = data.equal_range(Key('B')); + static constexpr ETL_OR_STD::pair resultC = data.equal_range(Key('C')); + static constexpr ETL_OR_STD::pair resultD = data.equal_range(Key('D')); + static constexpr ETL_OR_STD::pair resultE = data.equal_range(Key('E')); + static constexpr ETL_OR_STD::pair resultF = data.equal_range(Key('F')); + static constexpr ETL_OR_STD::pair resultG = data.equal_range(Key('G')); + static constexpr ETL_OR_STD::pair resultH = data.equal_range(Key('H')); + static constexpr ETL_OR_STD::pair resultI = data.equal_range(Key('I')); + static constexpr ETL_OR_STD::pair resultJ = data.equal_range(Key('J')); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(9, (std::distance(data.begin(), result0.first))); - CHECK_EQUAL(8, (std::distance(data.begin(), result1.first))); - CHECK_EQUAL(7, (std::distance(data.begin(), result2.first))); - CHECK_EQUAL(6, (std::distance(data.begin(), result3.first))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4.first))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5.first))); - CHECK_EQUAL(3, (std::distance(data.begin(), result6.first))); - CHECK_EQUAL(2, (std::distance(data.begin(), result7.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result8.first))); - CHECK_EQUAL(0, (std::distance(data.begin(), result9.first))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA.first))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB.first))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC.first))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultD.first))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE.first))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF.first))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultG.first))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultH.first))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultI.first))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultJ.first))); - CHECK_EQUAL(10, (std::distance(data.begin(), result0.second))); - CHECK_EQUAL(9, (std::distance(data.begin(), result1.second))); - CHECK_EQUAL(8, (std::distance(data.begin(), result2.second))); - CHECK_EQUAL(7, (std::distance(data.begin(), result3.second))); - CHECK_EQUAL(6, (std::distance(data.begin(), result4.second))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5.second))); - CHECK_EQUAL(4, (std::distance(data.begin(), result6.second))); - CHECK_EQUAL(3, (std::distance(data.begin(), result7.second))); - CHECK_EQUAL(2, (std::distance(data.begin(), result8.second))); - CHECK_EQUAL(1, (std::distance(data.begin(), result9.second))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultA.second))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultB.second))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultC.second))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD.second))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultE.second))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF.second))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultG.second))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultH.second))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultI.second))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultJ.second))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1.first))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2.first))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3.first))); - CHECK_EQUAL(4, (std::distance(data.begin(), result4.first))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5.first))); - CHECK_EQUAL(6, (std::distance(data.begin(), result6.first))); - CHECK_EQUAL(7, (std::distance(data.begin(), result7.first))); - CHECK_EQUAL(8, (std::distance(data.begin(), result8.first))); - CHECK_EQUAL(9, (std::distance(data.begin(), result9.first))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA.first))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB.first))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC.first))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD.first))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE.first))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF.first))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG.first))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH.first))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI.first))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result0.second))); - CHECK_EQUAL(2, (std::distance(data.begin(), result1.second))); - CHECK_EQUAL(3, (std::distance(data.begin(), result2.second))); - CHECK_EQUAL(4, (std::distance(data.begin(), result3.second))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4.second))); - CHECK_EQUAL(6, (std::distance(data.begin(), result5.second))); - CHECK_EQUAL(7, (std::distance(data.begin(), result6.second))); - CHECK_EQUAL(8, (std::distance(data.begin(), result7.second))); - CHECK_EQUAL(9, (std::distance(data.begin(), result8.second))); - CHECK_EQUAL(10, (std::distance(data.begin(), result9.second))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultA.second))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultB.second))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultC.second))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultD.second))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE.second))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultF.second))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultG.second))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultH.second))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultI.second))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultJ.second))); #endif } @@ -685,61 +683,61 @@ namespace value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; #endif - ETL_OR_STD::pair result0 = data.equal_range('A'); - ETL_OR_STD::pair result1 = data.equal_range('B'); - ETL_OR_STD::pair result2 = data.equal_range('C'); - ETL_OR_STD::pair result3 = data.equal_range('D'); - ETL_OR_STD::pair result4 = data.equal_range('E'); - ETL_OR_STD::pair result5 = data.equal_range('F'); - ETL_OR_STD::pair result6 = data.equal_range('G'); - ETL_OR_STD::pair result7 = data.equal_range('H'); - ETL_OR_STD::pair result8 = data.equal_range('I'); - ETL_OR_STD::pair result9 = data.equal_range('J'); + ETL_OR_STD::pair resultA = data.equal_range('A'); + ETL_OR_STD::pair resultB = data.equal_range('B'); + ETL_OR_STD::pair resultC = data.equal_range('C'); + ETL_OR_STD::pair resultD = data.equal_range('D'); + ETL_OR_STD::pair resultE = data.equal_range('E'); + ETL_OR_STD::pair resultF = data.equal_range('F'); + ETL_OR_STD::pair resultG = data.equal_range('G'); + ETL_OR_STD::pair resultH = data.equal_range('H'); + ETL_OR_STD::pair resultI = data.equal_range('I'); + ETL_OR_STD::pair resultJ = data.equal_range('J'); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(9, (std::distance(data.begin(), result0.first))); - CHECK_EQUAL(8, (std::distance(data.begin(), result1.first))); - CHECK_EQUAL(7, (std::distance(data.begin(), result2.first))); - CHECK_EQUAL(6, (std::distance(data.begin(), result3.first))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4.first))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5.first))); - CHECK_EQUAL(3, (std::distance(data.begin(), result6.first))); - CHECK_EQUAL(2, (std::distance(data.begin(), result7.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result8.first))); - CHECK_EQUAL(0, (std::distance(data.begin(), result9.first))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA.first))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB.first))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC.first))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultD.first))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE.first))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF.first))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultG.first))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultH.first))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultI.first))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultJ.first))); - CHECK_EQUAL(10, (std::distance(data.begin(), result0.second))); - CHECK_EQUAL(9, (std::distance(data.begin(), result1.second))); - CHECK_EQUAL(8, (std::distance(data.begin(), result2.second))); - CHECK_EQUAL(7, (std::distance(data.begin(), result3.second))); - CHECK_EQUAL(6, (std::distance(data.begin(), result4.second))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5.second))); - CHECK_EQUAL(4, (std::distance(data.begin(), result6.second))); - CHECK_EQUAL(3, (std::distance(data.begin(), result7.second))); - CHECK_EQUAL(2, (std::distance(data.begin(), result8.second))); - CHECK_EQUAL(1, (std::distance(data.begin(), result9.second))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultA.second))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultB.second))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultC.second))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD.second))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultE.second))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF.second))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultG.second))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultH.second))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultI.second))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultJ.second))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1.first))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2.first))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3.first))); - CHECK_EQUAL(4, (std::distance(data.begin(), result4.first))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5.first))); - CHECK_EQUAL(6, (std::distance(data.begin(), result6.first))); - CHECK_EQUAL(7, (std::distance(data.begin(), result7.first))); - CHECK_EQUAL(8, (std::distance(data.begin(), result8.first))); - CHECK_EQUAL(9, (std::distance(data.begin(), result9.first))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA.first))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB.first))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC.first))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD.first))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE.first))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF.first))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG.first))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH.first))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI.first))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result0.second))); - CHECK_EQUAL(2, (std::distance(data.begin(), result1.second))); - CHECK_EQUAL(3, (std::distance(data.begin(), result2.second))); - CHECK_EQUAL(4, (std::distance(data.begin(), result3.second))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4.second))); - CHECK_EQUAL(6, (std::distance(data.begin(), result5.second))); - CHECK_EQUAL(7, (std::distance(data.begin(), result6.second))); - CHECK_EQUAL(8, (std::distance(data.begin(), result7.second))); - CHECK_EQUAL(9, (std::distance(data.begin(), result8.second))); - CHECK_EQUAL(10, (std::distance(data.begin(), result9.second))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultA.second))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultB.second))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultC.second))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultD.second))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE.second))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultF.second))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultG.second))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultH.second))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultI.second))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultJ.second))); #endif } @@ -754,61 +752,61 @@ namespace value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; #endif - static constexpr ETL_OR_STD::pair result0 = data.equal_range('A'); - static constexpr ETL_OR_STD::pair result1 = data.equal_range('B'); - static constexpr ETL_OR_STD::pair result2 = data.equal_range('C'); - static constexpr ETL_OR_STD::pair result3 = data.equal_range('D'); - static constexpr ETL_OR_STD::pair result4 = data.equal_range('E'); - static constexpr ETL_OR_STD::pair result5 = data.equal_range('F'); - static constexpr ETL_OR_STD::pair result6 = data.equal_range('G'); - static constexpr ETL_OR_STD::pair result7 = data.equal_range('H'); - static constexpr ETL_OR_STD::pair result8 = data.equal_range('I'); - static constexpr ETL_OR_STD::pair result9 = data.equal_range('J'); + static constexpr ETL_OR_STD::pair resultA = data.equal_range('A'); + static constexpr ETL_OR_STD::pair resultB = data.equal_range('B'); + static constexpr ETL_OR_STD::pair resultC = data.equal_range('C'); + static constexpr ETL_OR_STD::pair resultD = data.equal_range('D'); + static constexpr ETL_OR_STD::pair resultE = data.equal_range('E'); + static constexpr ETL_OR_STD::pair resultF = data.equal_range('F'); + static constexpr ETL_OR_STD::pair resultG = data.equal_range('G'); + static constexpr ETL_OR_STD::pair resultH = data.equal_range('H'); + static constexpr ETL_OR_STD::pair resultI = data.equal_range('I'); + static constexpr ETL_OR_STD::pair resultJ = data.equal_range('J'); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(9, (std::distance(data.begin(), result0.first))); - CHECK_EQUAL(8, (std::distance(data.begin(), result1.first))); - CHECK_EQUAL(7, (std::distance(data.begin(), result2.first))); - CHECK_EQUAL(6, (std::distance(data.begin(), result3.first))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4.first))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5.first))); - CHECK_EQUAL(3, (std::distance(data.begin(), result6.first))); - CHECK_EQUAL(2, (std::distance(data.begin(), result7.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result8.first))); - CHECK_EQUAL(0, (std::distance(data.begin(), result9.first))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA.first))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB.first))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC.first))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultD.first))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE.first))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF.first))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultG.first))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultH.first))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultI.first))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultJ.first))); - CHECK_EQUAL(10, (std::distance(data.begin(), result0.second))); - CHECK_EQUAL(9, (std::distance(data.begin(), result1.second))); - CHECK_EQUAL(8, (std::distance(data.begin(), result2.second))); - CHECK_EQUAL(7, (std::distance(data.begin(), result3.second))); - CHECK_EQUAL(6, (std::distance(data.begin(), result4.second))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5.second))); - CHECK_EQUAL(4, (std::distance(data.begin(), result6.second))); - CHECK_EQUAL(3, (std::distance(data.begin(), result7.second))); - CHECK_EQUAL(2, (std::distance(data.begin(), result8.second))); - CHECK_EQUAL(1, (std::distance(data.begin(), result9.second))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultA.second))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultB.second))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultC.second))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD.second))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultE.second))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF.second))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultG.second))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultH.second))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultI.second))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultJ.second))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1.first))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2.first))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3.first))); - CHECK_EQUAL(4, (std::distance(data.begin(), result4.first))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5.first))); - CHECK_EQUAL(6, (std::distance(data.begin(), result6.first))); - CHECK_EQUAL(7, (std::distance(data.begin(), result7.first))); - CHECK_EQUAL(8, (std::distance(data.begin(), result8.first))); - CHECK_EQUAL(9, (std::distance(data.begin(), result9.first))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA.first))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB.first))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC.first))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD.first))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE.first))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF.first))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG.first))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH.first))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI.first))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ.first))); - CHECK_EQUAL(1, (std::distance(data.begin(), result0.second))); - CHECK_EQUAL(2, (std::distance(data.begin(), result1.second))); - CHECK_EQUAL(3, (std::distance(data.begin(), result2.second))); - CHECK_EQUAL(4, (std::distance(data.begin(), result3.second))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4.second))); - CHECK_EQUAL(6, (std::distance(data.begin(), result5.second))); - CHECK_EQUAL(7, (std::distance(data.begin(), result6.second))); - CHECK_EQUAL(8, (std::distance(data.begin(), result7.second))); - CHECK_EQUAL(9, (std::distance(data.begin(), result8.second))); - CHECK_EQUAL(10, (std::distance(data.begin(), result9.second))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultA.second))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultB.second))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultC.second))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultD.second))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE.second))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultF.second))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultG.second))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultH.second))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultI.second))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultJ.second))); #endif } @@ -823,42 +821,42 @@ namespace value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 }, value_type{Key('K'), 10 } }; #endif - Data::const_iterator result0 = data.lower_bound(Key('A')); - Data::const_iterator result1 = data.lower_bound(Key('B')); - Data::const_iterator result2 = data.lower_bound(Key('C')); - Data::const_iterator result3 = data.lower_bound(Key('D')); - Data::const_iterator result4 = data.lower_bound(Key('E')); - Data::const_iterator result5 = data.lower_bound(Key('F')); - Data::const_iterator result6 = data.lower_bound(Key('G')); - Data::const_iterator result7 = data.lower_bound(Key('H')); - Data::const_iterator result8 = data.lower_bound(Key('I')); - Data::const_iterator result9 = data.lower_bound(Key('J')); - Data::const_iterator result10 = data.lower_bound(Key('K')); + Data::const_iterator resultA = data.lower_bound(Key('A')); + Data::const_iterator resultB = data.lower_bound(Key('B')); + Data::const_iterator resultC = data.lower_bound(Key('C')); + Data::const_iterator resultD = data.lower_bound(Key('D')); + Data::const_iterator resultE = data.lower_bound(Key('E')); + Data::const_iterator resultF = data.lower_bound(Key('F')); + Data::const_iterator resultG = data.lower_bound(Key('G')); + Data::const_iterator resultH = data.lower_bound(Key('H')); + Data::const_iterator resultI = data.lower_bound(Key('I')); + Data::const_iterator resultJ = data.lower_bound(Key('J')); + Data::const_iterator resultK = data.lower_bound(Key('K')); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(10, (std::distance(data.begin(), result0))); - CHECK_EQUAL(9, (std::distance(data.begin(), result1))); - CHECK_EQUAL(8, (std::distance(data.begin(), result2))); - CHECK_EQUAL(7, (std::distance(data.begin(), result3))); - CHECK_EQUAL(6, (std::distance(data.begin(), result4))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5))); - CHECK_EQUAL(4, (std::distance(data.begin(), result6))); - CHECK_EQUAL(3, (std::distance(data.begin(), result7))); - CHECK_EQUAL(2, (std::distance(data.begin(), result8))); - CHECK_EQUAL(1, (std::distance(data.begin(), result9))); - CHECK_EQUAL(0, (std::distance(data.begin(), result10))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultK))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3))); - CHECK_EQUAL(3, (std::distance(data.begin(), result4))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5))); - CHECK_EQUAL(5, (std::distance(data.begin(), result6))); - CHECK_EQUAL(6, (std::distance(data.begin(), result7))); - CHECK_EQUAL(7, (std::distance(data.begin(), result8))); - CHECK_EQUAL(8, (std::distance(data.begin(), result9))); - CHECK_EQUAL(9, (std::distance(data.begin(), result10))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultK))); #endif } @@ -873,75 +871,343 @@ namespace value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 }, value_type{Key('K'), 10 } }; #endif - static constexpr Data::const_iterator result0 = data.lower_bound(Key('A')); - static constexpr Data::const_iterator result1 = data.lower_bound(Key('B')); - static constexpr Data::const_iterator result2 = data.lower_bound(Key('C')); - static constexpr Data::const_iterator result3 = data.lower_bound(Key('D')); - static constexpr Data::const_iterator result4 = data.lower_bound(Key('E')); - static constexpr Data::const_iterator result5 = data.lower_bound(Key('F')); - static constexpr Data::const_iterator result6 = data.lower_bound(Key('G')); - static constexpr Data::const_iterator result7 = data.lower_bound(Key('H')); - static constexpr Data::const_iterator result8 = data.lower_bound(Key('I')); - static constexpr Data::const_iterator result9 = data.lower_bound(Key('J')); - static constexpr Data::const_iterator result10 = data.lower_bound(Key('K')); + static constexpr Data::const_iterator resultA = data.lower_bound(Key('A')); + static constexpr Data::const_iterator resultB = data.lower_bound(Key('B')); + static constexpr Data::const_iterator resultC = data.lower_bound(Key('C')); + static constexpr Data::const_iterator resultD = data.lower_bound(Key('D')); + static constexpr Data::const_iterator resultE = data.lower_bound(Key('E')); + static constexpr Data::const_iterator resultF = data.lower_bound(Key('F')); + static constexpr Data::const_iterator resultG = data.lower_bound(Key('G')); + static constexpr Data::const_iterator resultH = data.lower_bound(Key('H')); + static constexpr Data::const_iterator resultI = data.lower_bound(Key('I')); + static constexpr Data::const_iterator resultJ = data.lower_bound(Key('J')); + static constexpr Data::const_iterator resultK = data.lower_bound(Key('K')); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(10, (std::distance(data.begin(), result0))); - CHECK_EQUAL(9, (std::distance(data.begin(), result1))); - CHECK_EQUAL(8, (std::distance(data.begin(), result2))); - CHECK_EQUAL(7, (std::distance(data.begin(), result3))); - CHECK_EQUAL(6, (std::distance(data.begin(), result4))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5))); - CHECK_EQUAL(4, (std::distance(data.begin(), result6))); - CHECK_EQUAL(3, (std::distance(data.begin(), result7))); - CHECK_EQUAL(2, (std::distance(data.begin(), result8))); - CHECK_EQUAL(1, (std::distance(data.begin(), result9))); - CHECK_EQUAL(0, (std::distance(data.begin(), result10))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultK))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3))); - CHECK_EQUAL(3, (std::distance(data.begin(), result4))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5))); - CHECK_EQUAL(5, (std::distance(data.begin(), result6))); - CHECK_EQUAL(6, (std::distance(data.begin(), result7))); - CHECK_EQUAL(7, (std::distance(data.begin(), result8))); - CHECK_EQUAL(8, (std::distance(data.begin(), result9))); - CHECK_EQUAL(9, (std::distance(data.begin(), result10))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultK))); #endif } //************************************************************************* TEST(test_lower_bound_using_transparent_comparator) { +#ifdef TEST_GREATER_THAN + static constexpr DataTransparentComparator data{ value_type{Key('K'), 10 }, value_type{Key('J'), 9 }, value_type{Key('I'), 8 }, value_type{Key('H'), 7 }, value_type{Key('G'), 6 }, + value_type{Key('F'), 5 }, value_type{Key('E'), 4 }, value_type{Key('C'), 2 }, value_type{Key('B'), 1 }, value_type{Key('A'), 0 } }; +#else + static constexpr DataTransparentComparator data{ value_type{Key('A'), 0 }, value_type{Key('B'), 1 }, value_type{Key('C'), 2 }, value_type{Key('E'), 4 }, value_type{Key('F'), 5 }, + value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 }, value_type{Key('K'), 10 } }; +#endif + Data::const_iterator resultA = data.lower_bound('A'); + Data::const_iterator resultB = data.lower_bound('B'); + Data::const_iterator resultC = data.lower_bound('C'); + Data::const_iterator resultD = data.lower_bound('D'); + Data::const_iterator resultE = data.lower_bound('E'); + Data::const_iterator resultF = data.lower_bound('F'); + Data::const_iterator resultG = data.lower_bound('G'); + Data::const_iterator resultH = data.lower_bound('H'); + Data::const_iterator resultI = data.lower_bound('I'); + Data::const_iterator resultJ = data.lower_bound('J'); + Data::const_iterator resultK = data.lower_bound('K'); + +#ifdef TEST_GREATER_THAN + CHECK_EQUAL(9, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultK))); +#else + CHECK_EQUAL(0, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultK))); +#endif } //************************************************************************* TEST(test_lower_bound_constexpr_using_transparent_comparator) { +#ifdef TEST_GREATER_THAN + static constexpr DataTransparentComparator data{ value_type{Key('K'), 10 }, value_type{Key('J'), 9 }, value_type{Key('I'), 8 }, value_type{Key('H'), 7 }, value_type{Key('G'), 6 }, + value_type{Key('F'), 5 }, value_type{Key('E'), 4 }, value_type{Key('C'), 2 }, value_type{Key('B'), 1 }, value_type{Key('A'), 0 } }; +#else + static constexpr DataTransparentComparator data{ value_type{Key('A'), 0 }, value_type{Key('B'), 1 }, value_type{Key('C'), 2 }, value_type{Key('E'), 4 }, value_type{Key('F'), 5 }, + value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 }, value_type{Key('K'), 10 } }; +#endif + static constexpr Data::const_iterator resultA = data.lower_bound('A'); + static constexpr Data::const_iterator resultB = data.lower_bound('B'); + static constexpr Data::const_iterator resultC = data.lower_bound('C'); + static constexpr Data::const_iterator resultD = data.lower_bound('D'); + static constexpr Data::const_iterator resultE = data.lower_bound('E'); + static constexpr Data::const_iterator resultF = data.lower_bound('F'); + static constexpr Data::const_iterator resultG = data.lower_bound('G'); + static constexpr Data::const_iterator resultH = data.lower_bound('H'); + static constexpr Data::const_iterator resultI = data.lower_bound('I'); + static constexpr Data::const_iterator resultJ = data.lower_bound('J'); + static constexpr Data::const_iterator resultK = data.lower_bound('K'); + +#ifdef TEST_GREATER_THAN + CHECK_EQUAL(9, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultK))); +#else + CHECK_EQUAL(0, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultK))); +#endif } //************************************************************************* TEST(test_upper_bound) { +#ifdef TEST_GREATER_THAN + static constexpr Data data{ value_type{Key('K'), 10 }, value_type{Key('J'), 9 }, value_type{Key('I'), 8 }, value_type{Key('H'), 7 }, value_type{Key('G'), 6 }, + value_type{Key('F'), 5 }, value_type{Key('E'), 4 }, value_type{Key('C'), 2 }, value_type{Key('B'), 1 }, value_type{Key('A'), 0 } }; +#else + static constexpr Data data{ value_type{Key('A'), 0 }, value_type{Key('B'), 1 }, value_type{Key('C'), 2 }, value_type{Key('E'), 4 }, value_type{Key('F'), 5 }, + value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 }, value_type{Key('K'), 10 } }; +#endif + + Data::const_iterator resultA = data.upper_bound(Key('A')); + Data::const_iterator resultB = data.upper_bound(Key('B')); + Data::const_iterator resultC = data.upper_bound(Key('C')); + Data::const_iterator resultD = data.upper_bound(Key('D')); + Data::const_iterator resultE = data.upper_bound(Key('E')); + Data::const_iterator resultF = data.upper_bound(Key('F')); + Data::const_iterator resultG = data.upper_bound(Key('G')); + Data::const_iterator resultH = data.upper_bound(Key('H')); + Data::const_iterator resultI = data.upper_bound(Key('I')); + Data::const_iterator resultJ = data.upper_bound(Key('J')); + Data::const_iterator resultK = data.upper_bound(Key('K')); + +#ifdef TEST_GREATER_THAN + CHECK_EQUAL(10, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultK))); +#else + CHECK_EQUAL(1, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultK))); +#endif } //************************************************************************* TEST(test_upper_bound_constexpr) { +#ifdef TEST_GREATER_THAN + static constexpr Data data{ value_type{Key('K'), 10 }, value_type{Key('J'), 9 }, value_type{Key('I'), 8 }, value_type{Key('H'), 7 }, value_type{Key('G'), 6 }, + value_type{Key('F'), 5 }, value_type{Key('E'), 4 }, value_type{Key('C'), 2 }, value_type{Key('B'), 1 }, value_type{Key('A'), 0 } }; +#else + static constexpr Data data{ value_type{Key('A'), 0 }, value_type{Key('B'), 1 }, value_type{Key('C'), 2 }, value_type{Key('E'), 4 }, value_type{Key('F'), 5 }, + value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 }, value_type{Key('K'), 10 } }; +#endif + + static constexpr Data::const_iterator resultA = data.upper_bound(Key('A')); + static constexpr Data::const_iterator resultB = data.upper_bound(Key('B')); + static constexpr Data::const_iterator resultC = data.upper_bound(Key('C')); + static constexpr Data::const_iterator resultD = data.upper_bound(Key('D')); + static constexpr Data::const_iterator resultE = data.upper_bound(Key('E')); + static constexpr Data::const_iterator resultF = data.upper_bound(Key('F')); + static constexpr Data::const_iterator resultG = data.upper_bound(Key('G')); + static constexpr Data::const_iterator resultH = data.upper_bound(Key('H')); + static constexpr Data::const_iterator resultI = data.upper_bound(Key('I')); + static constexpr Data::const_iterator resultJ = data.upper_bound(Key('J')); + static constexpr Data::const_iterator resultK = data.upper_bound(Key('K')); + +#ifdef TEST_GREATER_THAN + CHECK_EQUAL(10, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultK))); +#else + CHECK_EQUAL(1, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultK))); +#endif } //************************************************************************* TEST(test_upper_bound_using_transparent_comparator) { +#ifdef TEST_GREATER_THAN + static constexpr DataTransparentComparator data{ value_type{Key('K'), 10 }, value_type{Key('J'), 9 }, value_type{Key('I'), 8 }, value_type{Key('H'), 7 }, value_type{Key('G'), 6 }, + value_type{Key('F'), 5 }, value_type{Key('E'), 4 }, value_type{Key('C'), 2 }, value_type{Key('B'), 1 }, value_type{Key('A'), 0 } }; +#else + static constexpr DataTransparentComparator data{ value_type{Key('A'), 0 }, value_type{Key('B'), 1 }, value_type{Key('C'), 2 }, value_type{Key('E'), 4 }, value_type{Key('F'), 5 }, + value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 }, value_type{Key('K'), 10 } }; +#endif + + Data::const_iterator resultA = data.upper_bound('A'); + Data::const_iterator resultB = data.upper_bound('B'); + Data::const_iterator resultC = data.upper_bound('C'); + Data::const_iterator resultD = data.upper_bound('D'); + Data::const_iterator resultE = data.upper_bound('E'); + Data::const_iterator resultF = data.upper_bound('F'); + Data::const_iterator resultG = data.upper_bound('G'); + Data::const_iterator resultH = data.upper_bound('H'); + Data::const_iterator resultI = data.upper_bound('I'); + Data::const_iterator resultJ = data.upper_bound('J'); + Data::const_iterator resultK = data.upper_bound('K'); + +#ifdef TEST_GREATER_THAN + CHECK_EQUAL(10, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultK))); +#else + CHECK_EQUAL(1, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultK))); +#endif } //************************************************************************* TEST(test_upper_bound_constexpr_using_transparent_comparator) { +#ifdef TEST_GREATER_THAN + static constexpr DataTransparentComparator data{ value_type{Key('K'), 10 }, value_type{Key('J'), 9 }, value_type{Key('I'), 8 }, value_type{Key('H'), 7 }, value_type{Key('G'), 6 }, + value_type{Key('F'), 5 }, value_type{Key('E'), 4 }, value_type{Key('C'), 2 }, value_type{Key('B'), 1 }, value_type{Key('A'), 0 } }; +#else + static constexpr DataTransparentComparator data{ value_type{Key('A'), 0 }, value_type{Key('B'), 1 }, value_type{Key('C'), 2 }, value_type{Key('E'), 4 }, value_type{Key('F'), 5 }, + value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 }, value_type{Key('K'), 10 } }; +#endif + + static constexpr Data::const_iterator resultA = data.upper_bound('A'); + static constexpr Data::const_iterator resultB = data.upper_bound('B'); + static constexpr Data::const_iterator resultC = data.upper_bound('C'); + static constexpr Data::const_iterator resultD = data.upper_bound('D'); + static constexpr Data::const_iterator resultE = data.upper_bound('E'); + static constexpr Data::const_iterator resultF = data.upper_bound('F'); + static constexpr Data::const_iterator resultG = data.upper_bound('G'); + static constexpr Data::const_iterator resultH = data.upper_bound('H'); + static constexpr Data::const_iterator resultI = data.upper_bound('I'); + static constexpr Data::const_iterator resultJ = data.upper_bound('J'); + static constexpr Data::const_iterator resultK = data.upper_bound('K'); + +#ifdef TEST_GREATER_THAN + CHECK_EQUAL(10, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultK))); +#else + CHECK_EQUAL(1, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ))); + CHECK_EQUAL(10, (std::distance(data.begin(), resultK))); +#endif } //************************************************************************* @@ -1064,46 +1330,6 @@ namespace CHECK_EQUAL(0, countK); } - //************************************************************************* - TEST(test_iterator) - { -#ifdef TEST_GREATER_THAN - static constexpr Data data{ value_type{Key('J'), 9 }, value_type{Key('I'), 8 }, value_type{Key('H'), 7 }, value_type{Key('G'), 6 }, value_type{Key('F'), 5 }, - value_type{Key('E'), 4 }, value_type{Key('D'), 3 }, value_type{Key('C'), 2 }, value_type{Key('B'), 1 }, value_type{Key('A'), 0 } }; -#else - static constexpr Data data{ value_type{Key('A'), 0 }, value_type{Key('B'), 1 }, value_type{Key('C'), 2 }, value_type{Key('D'), 3 }, value_type{Key('E'), 4 }, - value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; -#endif - - Data::iterator itr = data.begin(); - -#ifdef TEST_GREATER_THAN - CHECK_TRUE((value_type{Key('J'), 9 }) == *itr++); - CHECK_TRUE((value_type{Key('I'), 8 }) == *itr++); - CHECK_TRUE((value_type{Key('H'), 7 }) == *itr++); - CHECK_TRUE((value_type{Key('G'), 6 }) == *itr++); - CHECK_TRUE((value_type{Key('F'), 5 }) == *itr++); - CHECK_TRUE((value_type{Key('E'), 4 }) == *itr++); - CHECK_TRUE((value_type{Key('D'), 3 }) == *itr++); - CHECK_TRUE((value_type{Key('C'), 2 }) == *itr++); - CHECK_TRUE((value_type{Key('B'), 1 }) == *itr++); - CHECK_TRUE((value_type{Key('A'), 0 }) == *itr++); - CHECK_TRUE(itr == data.end()); -#else - CHECK_TRUE((value_type{Key('A'), 0 }) == *itr++); - CHECK_TRUE((value_type{Key('B'), 1 }) == *itr++); - CHECK_TRUE((value_type{Key('C'), 2 }) == *itr++); - CHECK_TRUE((value_type{Key('D'), 3 }) == *itr++); - CHECK_TRUE((value_type{Key('E'), 4 }) == *itr++); - CHECK_TRUE((value_type{Key('F'), 5 }) == *itr++); - CHECK_TRUE((value_type{Key('G'), 6 }) == *itr++); - CHECK_TRUE((value_type{Key('H'), 7 }) == *itr++); - CHECK_TRUE((value_type{Key('I'), 8 }) == *itr++); - CHECK_TRUE((value_type{Key('J'), 9 }) == *itr++); - CHECK_TRUE(itr == data.end()); -#endif - } - //************************************************************************* TEST(test_const_iterator) { @@ -1155,39 +1381,39 @@ namespace value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; #endif - Data::const_iterator result0 = data.find(Key('A')); - Data::const_iterator result1 = data.find(Key('B')); - Data::const_iterator result2 = data.find(Key('C')); - Data::const_iterator result3 = data.find(Key('D')); - Data::const_iterator result4 = data.find(Key('E')); - Data::const_iterator result5 = data.find(Key('F')); - Data::const_iterator result6 = data.find(Key('G')); - Data::const_iterator result7 = data.find(Key('H')); - Data::const_iterator result8 = data.find(Key('I')); - Data::const_iterator result9 = data.find(Key('J')); + Data::const_iterator resultA = data.find(Key('A')); + Data::const_iterator resultB = data.find(Key('B')); + Data::const_iterator resultC = data.find(Key('C')); + Data::const_iterator resultD = data.find(Key('D')); + Data::const_iterator resultE = data.find(Key('E')); + Data::const_iterator resultF = data.find(Key('F')); + Data::const_iterator resultG = data.find(Key('G')); + Data::const_iterator resultH = data.find(Key('H')); + Data::const_iterator resultI = data.find(Key('I')); + Data::const_iterator resultJ = data.find(Key('J')); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(9, (std::distance(data.begin(), result0))); - CHECK_EQUAL(8, (std::distance(data.begin(), result1))); - CHECK_EQUAL(7, (std::distance(data.begin(), result2))); - CHECK_EQUAL(6, (std::distance(data.begin(), result3))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5))); - CHECK_EQUAL(3, (std::distance(data.begin(), result6))); - CHECK_EQUAL(2, (std::distance(data.begin(), result7))); - CHECK_EQUAL(1, (std::distance(data.begin(), result8))); - CHECK_EQUAL(0, (std::distance(data.begin(), result9))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultJ))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3))); - CHECK_EQUAL(4, (std::distance(data.begin(), result4))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5))); - CHECK_EQUAL(6, (std::distance(data.begin(), result6))); - CHECK_EQUAL(7, (std::distance(data.begin(), result7))); - CHECK_EQUAL(8, (std::distance(data.begin(), result8))); - CHECK_EQUAL(9, (std::distance(data.begin(), result9))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ))); #endif } @@ -1202,39 +1428,39 @@ namespace value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; #endif - static constexpr Data::const_iterator result0 = data.find(Key('A')); - static constexpr Data::const_iterator result1 = data.find(Key('B')); - static constexpr Data::const_iterator result2 = data.find(Key('C')); - static constexpr Data::const_iterator result3 = data.find(Key('D')); - static constexpr Data::const_iterator result4 = data.find(Key('E')); - static constexpr Data::const_iterator result5 = data.find(Key('F')); - static constexpr Data::const_iterator result6 = data.find(Key('G')); - static constexpr Data::const_iterator result7 = data.find(Key('H')); - static constexpr Data::const_iterator result8 = data.find(Key('I')); - static constexpr Data::const_iterator result9 = data.find(Key('J')); + static constexpr Data::const_iterator resultA = data.find(Key('A')); + static constexpr Data::const_iterator resultB = data.find(Key('B')); + static constexpr Data::const_iterator resultC = data.find(Key('C')); + static constexpr Data::const_iterator resultD = data.find(Key('D')); + static constexpr Data::const_iterator resultE = data.find(Key('E')); + static constexpr Data::const_iterator resultF = data.find(Key('F')); + static constexpr Data::const_iterator resultG = data.find(Key('G')); + static constexpr Data::const_iterator resultH = data.find(Key('H')); + static constexpr Data::const_iterator resultI = data.find(Key('I')); + static constexpr Data::const_iterator resultJ = data.find(Key('J')); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(9, (std::distance(data.begin(), result0))); - CHECK_EQUAL(8, (std::distance(data.begin(), result1))); - CHECK_EQUAL(7, (std::distance(data.begin(), result2))); - CHECK_EQUAL(6, (std::distance(data.begin(), result3))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5))); - CHECK_EQUAL(3, (std::distance(data.begin(), result6))); - CHECK_EQUAL(2, (std::distance(data.begin(), result7))); - CHECK_EQUAL(1, (std::distance(data.begin(), result8))); - CHECK_EQUAL(0, (std::distance(data.begin(), result9))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultJ))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3))); - CHECK_EQUAL(4, (std::distance(data.begin(), result4))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5))); - CHECK_EQUAL(6, (std::distance(data.begin(), result6))); - CHECK_EQUAL(7, (std::distance(data.begin(), result7))); - CHECK_EQUAL(8, (std::distance(data.begin(), result8))); - CHECK_EQUAL(9, (std::distance(data.begin(), result9))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ))); #endif } @@ -1249,39 +1475,39 @@ namespace value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; #endif - Data::const_iterator result0 = data.find('A'); - Data::const_iterator result1 = data.find('B'); - Data::const_iterator result2 = data.find('C'); - Data::const_iterator result3 = data.find('D'); - Data::const_iterator result4 = data.find('E'); - Data::const_iterator result5 = data.find('F'); - Data::const_iterator result6 = data.find('G'); - Data::const_iterator result7 = data.find('H'); - Data::const_iterator result8 = data.find('I'); - Data::const_iterator result9 = data.find('J'); + Data::const_iterator resultA = data.find('A'); + Data::const_iterator resultB = data.find('B'); + Data::const_iterator resultC = data.find('C'); + Data::const_iterator resultD = data.find('D'); + Data::const_iterator resultE = data.find('E'); + Data::const_iterator resultF = data.find('F'); + Data::const_iterator resultG = data.find('G'); + Data::const_iterator resultH = data.find('H'); + Data::const_iterator resultI = data.find('I'); + Data::const_iterator resultJ = data.find('J'); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(9, (std::distance(data.begin(), result0))); - CHECK_EQUAL(8, (std::distance(data.begin(), result1))); - CHECK_EQUAL(7, (std::distance(data.begin(), result2))); - CHECK_EQUAL(6, (std::distance(data.begin(), result3))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5))); - CHECK_EQUAL(3, (std::distance(data.begin(), result6))); - CHECK_EQUAL(2, (std::distance(data.begin(), result7))); - CHECK_EQUAL(1, (std::distance(data.begin(), result8))); - CHECK_EQUAL(0, (std::distance(data.begin(), result9))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultJ))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3))); - CHECK_EQUAL(4, (std::distance(data.begin(), result4))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5))); - CHECK_EQUAL(6, (std::distance(data.begin(), result6))); - CHECK_EQUAL(7, (std::distance(data.begin(), result7))); - CHECK_EQUAL(8, (std::distance(data.begin(), result8))); - CHECK_EQUAL(9, (std::distance(data.begin(), result9))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ))); #endif } @@ -1296,39 +1522,39 @@ namespace value_type{Key('F'), 5 }, value_type{Key('G'), 6 }, value_type{Key('H'), 7 }, value_type{Key('I'), 8 }, value_type{Key('J'), 9 } }; #endif - static constexpr Data::const_iterator result0 = data.find('A'); - static constexpr Data::const_iterator result1 = data.find('B'); - static constexpr Data::const_iterator result2 = data.find('C'); - static constexpr Data::const_iterator result3 = data.find('D'); - static constexpr Data::const_iterator result4 = data.find('E'); - static constexpr Data::const_iterator result5 = data.find('F'); - static constexpr Data::const_iterator result6 = data.find('G'); - static constexpr Data::const_iterator result7 = data.find('H'); - static constexpr Data::const_iterator result8 = data.find('I'); - static constexpr Data::const_iterator result9 = data.find('J'); + static constexpr Data::const_iterator resultA = data.find('A'); + static constexpr Data::const_iterator resultB = data.find('B'); + static constexpr Data::const_iterator resultC = data.find('C'); + static constexpr Data::const_iterator resultD = data.find('D'); + static constexpr Data::const_iterator resultE = data.find('E'); + static constexpr Data::const_iterator resultF = data.find('F'); + static constexpr Data::const_iterator resultG = data.find('G'); + static constexpr Data::const_iterator resultH = data.find('H'); + static constexpr Data::const_iterator resultI = data.find('I'); + static constexpr Data::const_iterator resultJ = data.find('J'); #ifdef TEST_GREATER_THAN - CHECK_EQUAL(9, (std::distance(data.begin(), result0))); - CHECK_EQUAL(8, (std::distance(data.begin(), result1))); - CHECK_EQUAL(7, (std::distance(data.begin(), result2))); - CHECK_EQUAL(6, (std::distance(data.begin(), result3))); - CHECK_EQUAL(5, (std::distance(data.begin(), result4))); - CHECK_EQUAL(4, (std::distance(data.begin(), result5))); - CHECK_EQUAL(3, (std::distance(data.begin(), result6))); - CHECK_EQUAL(2, (std::distance(data.begin(), result7))); - CHECK_EQUAL(1, (std::distance(data.begin(), result8))); - CHECK_EQUAL(0, (std::distance(data.begin(), result9))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultJ))); #else - CHECK_EQUAL(0, (std::distance(data.begin(), result0))); - CHECK_EQUAL(1, (std::distance(data.begin(), result1))); - CHECK_EQUAL(2, (std::distance(data.begin(), result2))); - CHECK_EQUAL(3, (std::distance(data.begin(), result3))); - CHECK_EQUAL(4, (std::distance(data.begin(), result4))); - CHECK_EQUAL(5, (std::distance(data.begin(), result5))); - CHECK_EQUAL(6, (std::distance(data.begin(), result6))); - CHECK_EQUAL(7, (std::distance(data.begin(), result7))); - CHECK_EQUAL(8, (std::distance(data.begin(), result8))); - CHECK_EQUAL(9, (std::distance(data.begin(), result9))); + CHECK_EQUAL(0, (std::distance(data.begin(), resultA))); + CHECK_EQUAL(1, (std::distance(data.begin(), resultB))); + CHECK_EQUAL(2, (std::distance(data.begin(), resultC))); + CHECK_EQUAL(3, (std::distance(data.begin(), resultD))); + CHECK_EQUAL(4, (std::distance(data.begin(), resultE))); + CHECK_EQUAL(5, (std::distance(data.begin(), resultF))); + CHECK_EQUAL(6, (std::distance(data.begin(), resultG))); + CHECK_EQUAL(7, (std::distance(data.begin(), resultH))); + CHECK_EQUAL(8, (std::distance(data.begin(), resultI))); + CHECK_EQUAL(9, (std::distance(data.begin(), resultJ))); #endif } diff --git a/test/vs2022/etl.vcxproj b/test/vs2022/etl.vcxproj index b5583df4..0bb7285f 100644 --- a/test/vs2022/etl.vcxproj +++ b/test/vs2022/etl.vcxproj @@ -3291,6 +3291,7 @@ + @@ -9270,6 +9271,7 @@ + diff --git a/test/vs2022/etl.vcxproj.filters b/test/vs2022/etl.vcxproj.filters index 3743da7b..00d27413 100644 --- a/test/vs2022/etl.vcxproj.filters +++ b/test/vs2022/etl.vcxproj.filters @@ -1512,6 +1512,9 @@ ETL\Private\chrono + + ETL\Containers + @@ -3593,6 +3596,9 @@ Tests\Chrono + + Tests\Containers +