3 #include <gtest/gtest.h>
4 #include <gmock/gmock-matchers.h>
12 inline std::vector<T>
reversed(
const std::vector<T>& in) {
13 return std::vector<T>(in.rbegin(), in.rend());
15 void validateSorting(QAbstractTableModel& model,
int sort_column, Qt::SortOrder sort_order,
16 const std::vector<uint32_t>& expected_id_order) {
17 SCOPED_TRACE(qPrintable(QString(
"sorting in %1 %2 order")
18 .arg(sort_order == Qt::AscendingOrder ?
"ascending" :
"descending")
19 .arg(sort_column == 0 ?
"creation" :
"cost")));
20 model.sort(sort_column, sort_order);
21 std::vector<uint32_t> actual_id_order(model.rowCount());
22 for (
int row = 0; row < model.rowCount(); ++row)
23 actual_id_order[row] = model.data(model.index(row, 0), Qt::UserRole).toInt();
24 EXPECT_THAT(actual_id_order, ::testing::ElementsAreArray(expected_id_order));
27 const std::vector<uint32_t>& failure_ids) {
30 std::vector<uint32_t> cost_ordered_ids(success_ids.begin(), success_ids.end());
31 std::vector<uint32_t> sorted_failure_ids(failure_ids.begin(), failure_ids.end());
32 std::sort(sorted_failure_ids.begin(), sorted_failure_ids.end());
33 std::copy(sorted_failure_ids.begin(), sorted_failure_ids.end(), std::back_inserter(cost_ordered_ids));
35 std::vector<uint32_t> creation_ordered_ids(cost_ordered_ids.size());
36 for (
size_t i = 0; i < cost_ordered_ids.size(); ++i)
37 creation_ordered_ids[i] = i + 1;
39 validateSorting(model, 0, Qt::AscendingOrder, creation_ordered_ids);
40 validateSorting(model, 0, Qt::DescendingOrder, reversed(creation_ordered_ids));
42 validateSorting(model, 1, Qt::AscendingOrder, cost_ordered_ids);
43 validateSorting(model, 1, Qt::DescendingOrder, reversed(cost_ordered_ids));
47 #define processAndValidate(...) \
49 SCOPED_TRACE("processSolutionIDs(" #__VA_ARGS__ ")"); \
50 processAndValidate(model, __VA_ARGS__); \