mirror of
https://github.com/transmission/transmission
synced 2025-02-22 22:20:39 +00:00
Reimplement quarks order check as a static assert (#1836)
This commit is contained in:
parent
4ac1c601f5
commit
c646a26c43
2 changed files with 32 additions and 11 deletions
|
@ -9,6 +9,7 @@
|
|||
#include <algorithm>
|
||||
#include <cstdlib> /* bsearch() */
|
||||
#include <cstring> /* memcmp() */
|
||||
#include <iterator>
|
||||
|
||||
#include "transmission.h"
|
||||
#include "ptrarray.h"
|
||||
|
@ -27,7 +28,7 @@ struct tr_key_struct
|
|||
"" name "", sizeof("" name "") - 1, \
|
||||
}
|
||||
|
||||
static struct tr_key_struct const my_static[] = {
|
||||
static struct tr_key_struct constexpr my_static[] = {
|
||||
Q(""),
|
||||
Q("activeTorrentCount"),
|
||||
Q("activity-date"),
|
||||
|
@ -418,6 +419,36 @@ static struct tr_key_struct const my_static[] = {
|
|||
Q("webseedsSendingToUs"),
|
||||
};
|
||||
|
||||
static size_t constexpr quarks_are_sorted = ( //
|
||||
[]() constexpr
|
||||
{
|
||||
for (size_t i = 1; i < std::size(my_static); ++i)
|
||||
{
|
||||
char const* lhs = my_static[i - 1].str;
|
||||
char const* rhs = my_static[i].str;
|
||||
|
||||
while (true)
|
||||
{
|
||||
if (*lhs > *rhs)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (*lhs < *rhs || *lhs == '\0' || *rhs == '\0')
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
++lhs;
|
||||
++rhs;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
})();
|
||||
|
||||
static_assert(quarks_are_sorted, "Predefined quarks must be sorted by their string value");
|
||||
|
||||
#undef Q
|
||||
|
||||
static int compareKeys(void const* va, void const* vb)
|
||||
|
|
|
@ -39,16 +39,6 @@ TEST_F(QuarkTest, allPredefinedKeysCanBeLookedUp)
|
|||
}
|
||||
}
|
||||
|
||||
TEST_F(QuarkTest, allPredefinedKeysAreSorted)
|
||||
{
|
||||
for (int i = 0; i + 1 < TR_N_KEYS; i++)
|
||||
{
|
||||
auto const str1 = quarkGetString(i);
|
||||
auto const str2 = quarkGetString(i + 1);
|
||||
EXPECT_LT(str1, str2);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(QuarkTest, newEmptyQuarkReturnsNone)
|
||||
{
|
||||
auto const q = tr_quark_new(nullptr, TR_BAD_SIZE);
|
||||
|
|
Loading…
Reference in a new issue