2
0
mirror of https://github.com/boostorg/sort.git synced 2026-01-19 04:42:11 +00:00

Fixing wstring sorting from spreadsort interface.

Fixed the string_sort test to include wstring.
This commit is contained in:
Steven Ross
2015-09-19 23:33:19 -04:00
parent b087fd854f
commit 9bb5778ed4
3 changed files with 87 additions and 5 deletions

View File

@@ -29,10 +29,20 @@ struct bracket {
}
};
struct wbracket {
wchar_t operator()(const wstring &x, size_t offset) const {
return x[offset];
}
};
struct get_size {
size_t operator()(const string &x) const{ return x.size(); }
};
struct wget_size {
size_t operator()(const wstring &x) const{ return x.size(); }
};
static const unsigned input_count = 100000;
// Test that update_offset finds the first character with a difference.
@@ -124,6 +134,53 @@ void string_test()
BOOST_CHECK(test_vec == sorted_vec);
}
void wstring_test()
{
// Prepare inputs
vector<wstring> base_vec;
const unsigned max_length = 32;
srand(1);
//Generating semirandom numbers
for (unsigned u = 0; u < input_count; ++u) {
unsigned length = rand() % max_length;
wstring result;
for (unsigned u = 0; u < length; ++u) {
wchar_t val = ((rand() % 256) << 8) + rand() % 256;
result.push_back(val);
}
base_vec.push_back(result);
}
vector<wstring> sorted_vec = base_vec;
vector<wstring> test_vec = base_vec;
std::sort(sorted_vec.begin(), sorted_vec.end());
//Testing basic call
unsigned wchar_t unused = '\0';
string_sort(test_vec.begin(), test_vec.end(), unused);
BOOST_CHECK(test_vec == sorted_vec);
//Testing boost::sort::spreadsort wrapper
boost::sort::spreadsort::spreadsort(test_vec.begin(), test_vec.end());
BOOST_CHECK(test_vec == sorted_vec);
//Character functors
test_vec = base_vec;
string_sort(test_vec.begin(), test_vec.end(), wbracket(), wget_size());
BOOST_CHECK(test_vec == sorted_vec);
//All functors
test_vec = base_vec;
string_sort(test_vec.begin(), test_vec.end(), wbracket(), wget_size(),
less<wstring>());
BOOST_CHECK(test_vec == sorted_vec);
//reverse order
std::sort(sorted_vec.begin(), sorted_vec.end(), greater<wstring>());
reverse_string_sort(test_vec.begin(), test_vec.end(), greater<wstring>(),
unused);
BOOST_CHECK(test_vec == sorted_vec);
//reverse order with functors
test_vec = base_vec;
reverse_string_sort(test_vec.begin(), test_vec.end(), wbracket(), wget_size(),
greater<wstring>());
BOOST_CHECK(test_vec == sorted_vec);
}
// Verify that 0, 1, and input_count empty strings all sort correctly.
void corner_test() {
vector<string> test_vec;
@@ -145,6 +202,7 @@ int test_main( int, char*[] )
update_offset_test();
offset_comparison_test();
string_test();
wstring_test();
corner_test();
return 0;
}