mirror of
https://github.com/ETLCPP/etl.git
synced 2026-04-30 19:09:10 +08:00
Fixed sort() so that it is now 'stable'.
Fixed return value type for const_iterator::operator->() in etl::list
This commit is contained in:
parent
e12cef864f
commit
3f07a785f4
@ -451,7 +451,7 @@ namespace etl
|
||||
|
||||
const_pointer operator &() const
|
||||
{
|
||||
return iforward_list::data_cast(p_node)->value;
|
||||
return &(iforward_list::data_cast(p_node)->value);
|
||||
}
|
||||
|
||||
const_pointer operator ->() const
|
||||
@ -980,7 +980,7 @@ namespace etl
|
||||
++p_left;
|
||||
--left_size;
|
||||
}
|
||||
else if (compare(*p_left, *p_right))
|
||||
else if (!compare(*p_right, *p_left))
|
||||
{
|
||||
// First node of left is lower or same. The node must come from left.
|
||||
p_node = p_left;
|
||||
|
||||
@ -687,7 +687,7 @@ namespace etl
|
||||
++i_left;
|
||||
--left_size;
|
||||
}
|
||||
else if (compare(*i_left, *i_right))
|
||||
else if (!compare(*i_right, *i_left))
|
||||
{
|
||||
// First link of left is lower or same. The link must come from left.
|
||||
i_link = i_left;
|
||||
|
||||
@ -702,7 +702,7 @@ namespace etl
|
||||
i_node = i_left++;
|
||||
--left_size;
|
||||
}
|
||||
else if (compare(*i_left, *i_right))
|
||||
else if (!compare(*i_right, *i_left))
|
||||
{
|
||||
// First node of left is lower or same. The node must come from left.
|
||||
i_node = i_left++;
|
||||
|
||||
@ -558,12 +558,12 @@ namespace etl
|
||||
|
||||
const_pointer operator &() const
|
||||
{
|
||||
return ilist::data_cast(p_node)->value;
|
||||
return &(ilist::data_cast(p_node)->value);
|
||||
}
|
||||
|
||||
const data_node_t* operator ->() const
|
||||
const_pointer operator ->() const
|
||||
{
|
||||
return p_node;
|
||||
return &(ilist::data_cast(p_node)->value);
|
||||
}
|
||||
|
||||
friend bool operator == (const const_iterator& lhs, const const_iterator& rhs)
|
||||
@ -1186,7 +1186,7 @@ namespace etl
|
||||
i_node = i_left++;
|
||||
--left_size;
|
||||
}
|
||||
else if (compare(*i_left, *i_right))
|
||||
else if (!compare(*i_right, *i_left))
|
||||
{
|
||||
// First node of left is lower or same. The node must come from left.
|
||||
i_node = i_left++;
|
||||
|
||||
17
test/data.h
17
test/data.h
@ -40,12 +40,14 @@ class TestDataDC
|
||||
public:
|
||||
|
||||
TestDataDC()
|
||||
: value(T())
|
||||
: value(T()),
|
||||
index(0)
|
||||
{
|
||||
}
|
||||
|
||||
TestDataDC(const T& value)
|
||||
: value(value)
|
||||
TestDataDC(const T& value, int index = 0)
|
||||
: value(value),
|
||||
index(index)
|
||||
{
|
||||
}
|
||||
|
||||
@ -59,7 +61,8 @@ public:
|
||||
return value > other.value;
|
||||
}
|
||||
|
||||
T value;
|
||||
T value;
|
||||
int index;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
@ -89,8 +92,9 @@ class TestDataNDC
|
||||
{
|
||||
public:
|
||||
|
||||
TestDataNDC(const T& value)
|
||||
: value(value)
|
||||
TestDataNDC(const T& value, int index = 0)
|
||||
: value(value),
|
||||
index(index)
|
||||
{}
|
||||
|
||||
bool operator < (const TestDataNDC& other) const
|
||||
@ -104,6 +108,7 @@ public:
|
||||
}
|
||||
|
||||
T value;
|
||||
int index;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
|
||||
@ -38,6 +38,7 @@ SOFTWARE.
|
||||
#include <forward_list>
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <list>
|
||||
|
||||
namespace
|
||||
{
|
||||
@ -56,6 +57,7 @@ namespace
|
||||
typedef std::forward_list<ItemNDC> CompareDataNDC;
|
||||
typedef std::vector<ItemNDC> InitialDataNDC;
|
||||
|
||||
InitialDataNDC stable_sort_data;
|
||||
InitialDataNDC unsorted_data;
|
||||
InitialDataNDC sorted_data;
|
||||
InitialDataNDC non_unique_data;
|
||||
@ -68,10 +70,11 @@ namespace
|
||||
{
|
||||
SetupFixture()
|
||||
{
|
||||
unsorted_data = { ItemNDC("1"), ItemNDC("0"), ItemNDC("3"), ItemNDC("2"), ItemNDC("5"), ItemNDC("4"), ItemNDC("7"), ItemNDC("6"), ItemNDC("9"), ItemNDC("8") };
|
||||
sorted_data = { ItemNDC("0"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5"), ItemNDC("6"), ItemNDC("7"), ItemNDC("8"), ItemNDC("9") };
|
||||
non_unique_data = { ItemNDC("0"), ItemNDC("0"), ItemNDC("1"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("3"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5") };
|
||||
small_data = { ItemNDC("0"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5") };
|
||||
stable_sort_data = { ItemNDC("1", 1), ItemNDC("2", 2), ItemNDC("3", 3), ItemNDC("2", 4), ItemNDC("0", 5), ItemNDC("2", 6), ItemNDC("7", 7), ItemNDC("4", 8), ItemNDC("4", 9), ItemNDC("8", 10) };
|
||||
unsorted_data = { ItemNDC("1"), ItemNDC("0"), ItemNDC("3"), ItemNDC("2"), ItemNDC("5"), ItemNDC("4"), ItemNDC("7"), ItemNDC("6"), ItemNDC("9"), ItemNDC("8") };
|
||||
sorted_data = { ItemNDC("0"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5"), ItemNDC("6"), ItemNDC("7"), ItemNDC("8"), ItemNDC("9") };
|
||||
non_unique_data = { ItemNDC("0"), ItemNDC("0"), ItemNDC("1"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("3"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5") };
|
||||
small_data = { ItemNDC("0"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5") };
|
||||
}
|
||||
};
|
||||
|
||||
@ -260,7 +263,7 @@ namespace
|
||||
data.assign(compare_data.begin(), compare_data.end());
|
||||
data.assign(compare_data.begin(), compare_data.end());
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -279,7 +282,7 @@ namespace
|
||||
data.assign(INITIAL_SIZE, VALUE);
|
||||
data.assign(INITIAL_SIZE, VALUE);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -316,7 +319,7 @@ namespace
|
||||
data.insert_after(i_data, INSERT_VALUE);
|
||||
compare_data.insert_after(i_compare_data, INSERT_VALUE);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -332,7 +335,7 @@ namespace
|
||||
data.insert_after(i_data, INSERT_VALUE);
|
||||
compare_data.insert_after(i_compare_data, INSERT_VALUE);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -359,7 +362,7 @@ namespace
|
||||
data.insert_after(i_data, 2, INSERT_VALUE);
|
||||
compare_data.insert_after(i_compare_data, 2, INSERT_VALUE);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -375,7 +378,7 @@ namespace
|
||||
data.insert_after(i_data, 2, INSERT_VALUE);
|
||||
compare_data.insert_after(i_compare_data, 2, INSERT_VALUE);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -393,7 +396,7 @@ namespace
|
||||
compare_data.insert_after(compare_data.before_begin(), test2.begin(), test2.end());
|
||||
data.insert_after(data.before_begin(), test2.begin(), test2.end());
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -410,7 +413,7 @@ namespace
|
||||
compare_data.insert_after(icd, test2.begin(), test2.end());
|
||||
data.insert_after(id, test2.begin(), test2.end());
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -439,7 +442,7 @@ namespace
|
||||
CHECK_EQUAL(6U, data.size());
|
||||
CHECK_EQUAL(6, std::distance(data.begin(), data.end()));
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -566,7 +569,7 @@ namespace
|
||||
i_compare_data = compare_data.erase_after(i_compare_data);
|
||||
i_data = data.erase_after(i_data);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -575,7 +578,7 @@ namespace
|
||||
i_compare_data = compare_data.erase_after(compare_data.begin());
|
||||
i_data = data.erase_after(data.begin());
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -592,7 +595,7 @@ namespace
|
||||
//std::advance(i_data, data.size() - 1);
|
||||
i_data = data.erase_after(i_data);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
|
||||
@ -625,7 +628,7 @@ namespace
|
||||
|
||||
CHECK_EQUAL(*i_compare_result, *i_result);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -649,7 +652,7 @@ namespace
|
||||
|
||||
CHECK(i_result == data.end());
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -728,7 +731,7 @@ namespace
|
||||
compare_data.unique();
|
||||
data.unique();
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -743,7 +746,7 @@ namespace
|
||||
compare_data.unique();
|
||||
data.unique();
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -758,7 +761,7 @@ namespace
|
||||
compare_data.remove(ItemNDC("7"));
|
||||
data.remove(ItemNDC("7"));
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -773,7 +776,7 @@ namespace
|
||||
compare_data.remove_if(std::bind2nd(std::equal_to<ItemNDC>(), ItemNDC("7")));
|
||||
data.remove_if(std::bind2nd(std::equal_to<ItemNDC>(), ItemNDC("7")));
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -791,7 +794,7 @@ namespace
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
CHECK_EQUAL(data.size(), size_t(std::distance(data.begin(), data.end())));
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -819,12 +822,35 @@ namespace
|
||||
compare_data.sort();
|
||||
data.sort();
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST_FIXTURE(SetupFixture, test_stable_sort)
|
||||
{
|
||||
std::list<ItemNDC> compare_data(stable_sort_data.begin(), stable_sort_data.end());
|
||||
DataNDC data(stable_sort_data.begin(), stable_sort_data.end());
|
||||
|
||||
compare_data.sort();
|
||||
data.sort();
|
||||
|
||||
std::list<ItemNDC>::const_iterator citr = compare_data.begin();
|
||||
DataNDC::const_iterator ditr = data.begin();
|
||||
|
||||
while (ditr != data.end())
|
||||
{
|
||||
const ItemNDC& v = *ditr;
|
||||
|
||||
CHECK_EQUAL(citr->index, ditr->index);
|
||||
|
||||
++citr;
|
||||
++ditr;
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST_FIXTURE(SetupFixture, test_sort_empty)
|
||||
{
|
||||
@ -834,7 +860,7 @@ namespace
|
||||
compare_data.sort();
|
||||
data.sort();
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -865,7 +891,7 @@ namespace
|
||||
compare_data.splice_after(i_compare_to_before, compare_data, i_compare_from_before);
|
||||
data.move_after(i_from_before, i_to_before);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -886,7 +912,7 @@ namespace
|
||||
compare_data.splice_after(i_compare_to_before, compare_data, i_compare_from_before);
|
||||
data.move_after(i_from_before, i_to_before);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -907,7 +933,7 @@ namespace
|
||||
compare_data.splice_after(i_compare_to_before, compare_data, i_compare_from_before);
|
||||
data.move_after(i_from_before, i_to_before);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -928,7 +954,7 @@ namespace
|
||||
compare_data.splice_after(i_compare_to_before, compare_data, i_compare_from_before);
|
||||
data.move_after(i_from_before, i_to_before);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
@ -967,7 +993,7 @@ namespace
|
||||
compare_data.splice_after(i_compare_to_before, compare_data, i_compare_first_before, i_compare_last);
|
||||
data.move_after(i_first_before, i_last, i_to_before);
|
||||
|
||||
CHECK_EQUAL(std::distance(compare_data.begin(), compare_data.end()), data.size());
|
||||
CHECK_EQUAL(size_t(std::distance(compare_data.begin(), compare_data.end())), data.size());
|
||||
|
||||
are_equal = std::equal(data.begin(), data.end(), compare_data.begin());
|
||||
CHECK(are_equal);
|
||||
|
||||
@ -53,8 +53,8 @@ namespace
|
||||
{
|
||||
public:
|
||||
|
||||
ItemDCNode(const std::string& text)
|
||||
: data(text)
|
||||
ItemDCNode(const std::string& text, int index = 0)
|
||||
: data(text, index)
|
||||
{
|
||||
}
|
||||
|
||||
@ -66,8 +66,8 @@ namespace
|
||||
{
|
||||
public:
|
||||
|
||||
ItemNDCNode(const std::string& text)
|
||||
: data(text)
|
||||
ItemNDCNode(const std::string& text, int index = 0)
|
||||
: data(text, index)
|
||||
{
|
||||
}
|
||||
|
||||
@ -127,6 +127,7 @@ namespace
|
||||
{
|
||||
SUITE(test_forward_list)
|
||||
{
|
||||
InitialDataNDC stable_sort_data;
|
||||
InitialDataNDC unsorted_data;
|
||||
InitialDataNDC sorted_data;
|
||||
InitialDataNDC sorted_data2;
|
||||
@ -146,12 +147,13 @@ namespace
|
||||
{
|
||||
SetupFixture()
|
||||
{
|
||||
unsorted_data = { ItemNDCNode("1"), ItemNDCNode("0"), ItemNDCNode("3"), ItemNDCNode("2"), ItemNDCNode("5"), ItemNDCNode("4"), ItemNDCNode("7"), ItemNDCNode("6"), ItemNDCNode("9"), ItemNDCNode("8") };
|
||||
sorted_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5"), ItemNDCNode("6"), ItemNDCNode("7"), ItemNDCNode("8"), ItemNDCNode("9") };
|
||||
sorted_data2 = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5"), ItemNDCNode("6"), ItemNDCNode("7"), ItemNDCNode("8"), ItemNDCNode("9") };
|
||||
non_unique_data = { ItemNDCNode("0"), ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
unique_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
small_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
stable_sort_data = { ItemNDCNode("1", 1), ItemNDCNode("2", 2), ItemNDCNode("3", 3), ItemNDCNode("2", 4), ItemNDCNode("0", 5), ItemNDCNode("2", 6), ItemNDCNode("7", 7), ItemNDCNode("4", 8), ItemNDCNode("4", 9), ItemNDCNode("8", 10) };
|
||||
unsorted_data = { ItemNDCNode("1"), ItemNDCNode("0"), ItemNDCNode("3"), ItemNDCNode("2"), ItemNDCNode("5"), ItemNDCNode("4"), ItemNDCNode("7"), ItemNDCNode("6"), ItemNDCNode("9"), ItemNDCNode("8") };
|
||||
sorted_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5"), ItemNDCNode("6"), ItemNDCNode("7"), ItemNDCNode("8"), ItemNDCNode("9") };
|
||||
sorted_data2 = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5"), ItemNDCNode("6"), ItemNDCNode("7"), ItemNDCNode("8"), ItemNDCNode("9") };
|
||||
non_unique_data = { ItemNDCNode("0"), ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
unique_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
small_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
|
||||
merge_data0 = { ItemNDCNode("1"), ItemNDCNode("1"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("5"), ItemNDCNode("7"), ItemNDCNode("8") };
|
||||
merge_data1 = { ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("6"), ItemNDCNode("9"), ItemNDCNode("9") };
|
||||
@ -743,6 +745,29 @@ namespace
|
||||
CHECK(are_equal);
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST_FIXTURE(SetupFixture, test_stable_sort)
|
||||
{
|
||||
std::list<ItemNDCNode> compare_data(stable_sort_data.begin(), stable_sort_data.end());
|
||||
DataNDC0 data(stable_sort_data.begin(), stable_sort_data.end());
|
||||
|
||||
compare_data.sort();
|
||||
data.sort();
|
||||
|
||||
std::list<ItemNDCNode>::const_iterator citr = compare_data.begin();
|
||||
DataNDC0::const_iterator ditr = data.begin();
|
||||
|
||||
while (ditr != data.end())
|
||||
{
|
||||
const ItemNDC& v = ditr->data;
|
||||
|
||||
CHECK_EQUAL(citr->data.index, ditr->data.index);
|
||||
|
||||
++citr;
|
||||
++ditr;
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST_FIXTURE(SetupFixture, test_sort_compare)
|
||||
{
|
||||
|
||||
@ -65,8 +65,8 @@ namespace
|
||||
{
|
||||
public:
|
||||
|
||||
ItemNDCNode(const std::string& text)
|
||||
: data(text)
|
||||
ItemNDCNode(const std::string& text, int index = 0)
|
||||
: data(text, index)
|
||||
{
|
||||
}
|
||||
|
||||
@ -140,6 +140,7 @@ namespace
|
||||
{
|
||||
SUITE(test_intrusive_list)
|
||||
{
|
||||
InitialDataNDC stable_sort_data;
|
||||
InitialDataNDC unsorted_data;
|
||||
InitialDataNDC sorted_data;
|
||||
InitialDataNDC sorted_data2;
|
||||
@ -157,12 +158,13 @@ namespace
|
||||
{
|
||||
SetupFixture()
|
||||
{
|
||||
unsorted_data = { ItemNDCNode("1"), ItemNDCNode("0"), ItemNDCNode("3"), ItemNDCNode("2"), ItemNDCNode("5"), ItemNDCNode("4"), ItemNDCNode("7"), ItemNDCNode("6"), ItemNDCNode("9"), ItemNDCNode("8") };
|
||||
sorted_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5"), ItemNDCNode("6"), ItemNDCNode("7"), ItemNDCNode("8"), ItemNDCNode("9") };
|
||||
sorted_data2 = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5"), ItemNDCNode("6"), ItemNDCNode("7"), ItemNDCNode("8"), ItemNDCNode("9") };
|
||||
non_unique_data = { ItemNDCNode("0"), ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
unique_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
small_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
stable_sort_data = { ItemNDCNode("1", 1), ItemNDCNode("2", 2), ItemNDCNode("3", 3), ItemNDCNode("2", 4), ItemNDCNode("0", 5), ItemNDCNode("2", 6), ItemNDCNode("7", 7), ItemNDCNode("4", 8), ItemNDCNode("4", 9), ItemNDCNode("8", 10) };
|
||||
unsorted_data = { ItemNDCNode("1"), ItemNDCNode("0"), ItemNDCNode("3"), ItemNDCNode("2"), ItemNDCNode("5"), ItemNDCNode("4"), ItemNDCNode("7"), ItemNDCNode("6"), ItemNDCNode("9"), ItemNDCNode("8") };
|
||||
sorted_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5"), ItemNDCNode("6"), ItemNDCNode("7"), ItemNDCNode("8"), ItemNDCNode("9") };
|
||||
sorted_data2 = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5"), ItemNDCNode("6"), ItemNDCNode("7"), ItemNDCNode("8"), ItemNDCNode("9") };
|
||||
non_unique_data = { ItemNDCNode("0"), ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
unique_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
small_data = { ItemNDCNode("0"), ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("4"), ItemNDCNode("5") };
|
||||
|
||||
merge_data0 = { ItemNDCNode("1"), ItemNDCNode("1"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("5"), ItemNDCNode("7"), ItemNDCNode("8") };
|
||||
merge_data1 = { ItemNDCNode("1"), ItemNDCNode("2"), ItemNDCNode("3"), ItemNDCNode("3"), ItemNDCNode("6"), ItemNDCNode("9"), ItemNDCNode("9") };
|
||||
@ -787,6 +789,29 @@ namespace
|
||||
CHECK(are_equal);
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST_FIXTURE(SetupFixture, test_stable_sort)
|
||||
{
|
||||
std::list<ItemNDCNode> compare_data(stable_sort_data.begin(), stable_sort_data.end());
|
||||
DataNDC0 data(stable_sort_data.begin(), stable_sort_data.end());
|
||||
|
||||
compare_data.sort();
|
||||
data.sort();
|
||||
|
||||
std::list<ItemNDCNode>::const_iterator citr = compare_data.begin();
|
||||
DataNDC0::const_iterator ditr = data.begin();
|
||||
|
||||
while (ditr != data.end())
|
||||
{
|
||||
const ItemNDC& v = ditr->data;
|
||||
|
||||
CHECK_EQUAL(citr->data.index, ditr->data.index);
|
||||
|
||||
++citr;
|
||||
++ditr;
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST_FIXTURE(SetupFixture, test_sort_compare)
|
||||
{
|
||||
|
||||
@ -55,6 +55,7 @@ namespace
|
||||
typedef std::list<ItemNDC> CompareData;
|
||||
typedef std::vector<ItemNDC> InitialData;
|
||||
|
||||
InitialData stable_sort_data;
|
||||
InitialData unsorted_data;
|
||||
InitialData sorted_data;
|
||||
InitialData non_unique_data;
|
||||
@ -73,10 +74,11 @@ namespace
|
||||
{
|
||||
SetupFixture()
|
||||
{
|
||||
unsorted_data = { ItemNDC("1"), ItemNDC("0"), ItemNDC("3"), ItemNDC("2"), ItemNDC("5"), ItemNDC("4"), ItemNDC("7"), ItemNDC("6"), ItemNDC("9"), ItemNDC("8") };
|
||||
sorted_data = { ItemNDC("0"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5"), ItemNDC("6"), ItemNDC("7"), ItemNDC("8"), ItemNDC("9") };
|
||||
non_unique_data = { ItemNDC("0"), ItemNDC("0"), ItemNDC("1"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("3"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5") };
|
||||
small_data = { ItemNDC("0"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5") };
|
||||
stable_sort_data = { ItemNDC("1", 1), ItemNDC("2", 2), ItemNDC("3", 3), ItemNDC("2", 4), ItemNDC("0", 5), ItemNDC("2", 6), ItemNDC("7", 7), ItemNDC("4", 8), ItemNDC("4", 9), ItemNDC("8", 10) };
|
||||
unsorted_data = { ItemNDC("1"), ItemNDC("0"), ItemNDC("3"), ItemNDC("2"), ItemNDC("5"), ItemNDC("4"), ItemNDC("7"), ItemNDC("6"), ItemNDC("9"), ItemNDC("8") };
|
||||
sorted_data = { ItemNDC("0"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5"), ItemNDC("6"), ItemNDC("7"), ItemNDC("8"), ItemNDC("9") };
|
||||
non_unique_data = { ItemNDC("0"), ItemNDC("0"), ItemNDC("1"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("3"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5") };
|
||||
small_data = { ItemNDC("0"), ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("4"), ItemNDC("5") };
|
||||
|
||||
merge_data0 = { ItemNDC("1"), ItemNDC("1"), ItemNDC("3"), ItemNDC("3"), ItemNDC("5"), ItemNDC("7"), ItemNDC("8") };
|
||||
merge_data1 = { ItemNDC("1"), ItemNDC("2"), ItemNDC("3"), ItemNDC("3"), ItemNDC("6"), ItemNDC("9"), ItemNDC("9") };
|
||||
@ -874,6 +876,27 @@ namespace
|
||||
CHECK(are_equal);
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST_FIXTURE(SetupFixture, test_sort_is_stable)
|
||||
{
|
||||
CompareData compare_data(stable_sort_data.begin(), stable_sort_data.end());
|
||||
DataNDC data(stable_sort_data.begin(), stable_sort_data.end());
|
||||
|
||||
compare_data.sort();
|
||||
data.sort();
|
||||
|
||||
CompareData::const_iterator citr = compare_data.begin();
|
||||
DataNDC::const_iterator ditr = data.begin();
|
||||
|
||||
while (ditr != data.end())
|
||||
{
|
||||
CHECK_EQUAL(citr->index, ditr->index);
|
||||
|
||||
++citr;
|
||||
++ditr;
|
||||
}
|
||||
}
|
||||
|
||||
//*************************************************************************
|
||||
TEST_FIXTURE(SetupFixture, test_sort_trivial)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user