Make sure that unnamed items in a dictionary are always in the order they were inserted in.

This commit is contained in:
Gunnar Beutner 2013-02-07 09:36:17 +01:00
parent e0fe2cab14
commit c04cfb9dac
2 changed files with 19 additions and 1 deletions

View File

@ -115,7 +115,7 @@ String Dictionary::Add(const Value& value)
long index = GetLength();
do {
stringstream s;
s << "_" << index;
s << "_" << std::hex << std::setw(8) << std::setfill('0') << index;
index++;
key = s.str();

View File

@ -53,3 +53,21 @@ BOOST_AUTO_TEST_CASE(unnamed)
BOOST_REQUIRE(distance(dictionary->Begin(), dictionary->End()) == 3);
}
BOOST_AUTO_TEST_CASE(unnamed_order)
{
Dictionary::Ptr dictionary = boost::make_shared<Dictionary>();
for (int i = 0; i < 1000; i++)
dictionary->Add(i);
/* unnamed items are guaranteed to be in whatever order they were
* inserted in. */
String key;
Value value;
int i = 0;
BOOST_FOREACH(tie(key, value), dictionary) {
BOOST_REQUIRE(value == i);
i++;
}
}