diff --git a/lib/base/dictionary.cpp b/lib/base/dictionary.cpp index 78dbadaa2..46595d5d4 100644 --- a/lib/base/dictionary.cpp +++ b/lib/base/dictionary.cpp @@ -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(); diff --git a/test/base-dictionary.cpp b/test/base-dictionary.cpp index d09b74fc8..c2452b39d 100644 --- a/test/base-dictionary.cpp +++ b/test/base-dictionary.cpp @@ -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(); + + 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++; + } +}