mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-20 05:23:12 -07:00
Add ChiakiSeqNum32
This commit is contained in:
parent
044159e83d
commit
b3f71fc5ab
2 changed files with 45 additions and 19 deletions
|
@ -27,27 +27,31 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
typedef uint16_t ChiakiSeqNum16;
|
||||
|
||||
#define CHIAKI_SEQ_NUM_16_MAX 0xffff
|
||||
|
||||
static inline bool chiaki_seq_num_16_lt(ChiakiSeqNum16 a, ChiakiSeqNum16 b)
|
||||
{
|
||||
if(a == b)
|
||||
return false;
|
||||
int32_t d = (int32_t)b - (int32_t)a;
|
||||
return (a < b && d < (1 << 15))
|
||||
|| ((a > b) && -d > (1 << 15));
|
||||
#define CHIAKI_DEFINE_SEQNUM(bits, greater_sint) \
|
||||
\
|
||||
typedef uint##bits##_t ChiakiSeqNum##bits; \
|
||||
\
|
||||
static inline bool chiaki_seq_num_##bits##_lt(ChiakiSeqNum##bits a, ChiakiSeqNum##bits b) \
|
||||
{ \
|
||||
if(a == b) \
|
||||
return false; \
|
||||
greater_sint d = (greater_sint)b - (greater_sint)a; \
|
||||
return (a < b && d < ((ChiakiSeqNum##bits)1 << (bits - 1))) \
|
||||
|| ((a > b) && -d > ((ChiakiSeqNum##bits)1 << (bits - 1))); \
|
||||
} \
|
||||
\
|
||||
static inline bool chiaki_seq_num_##bits##_gt(ChiakiSeqNum##bits a, ChiakiSeqNum##bits b) \
|
||||
{ \
|
||||
if(a == b) \
|
||||
return false; \
|
||||
greater_sint d = (greater_sint)b - (greater_sint)a; \
|
||||
return (a < b && d > ((ChiakiSeqNum##bits)1 << (bits - 1))) \
|
||||
|| ((a > b) && -d < ((ChiakiSeqNum##bits)1 << (bits - 1))); \
|
||||
}
|
||||
|
||||
static inline bool chiaki_seq_num_16_gt(ChiakiSeqNum16 a, ChiakiSeqNum16 b)
|
||||
{
|
||||
if(a == b)
|
||||
return false;
|
||||
int32_t d = (int32_t)b - (int32_t)a;
|
||||
return (a < b && d > (1 << 15))
|
||||
|| ((a > b) && -d < (1 << 15));
|
||||
}
|
||||
CHIAKI_DEFINE_SEQNUM(16, int32_t)
|
||||
CHIAKI_DEFINE_SEQNUM(32, int64_t)
|
||||
#undef CHIAKI_DEFINE_SEQNUM
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -51,6 +51,20 @@ static MunitResult test_seq_num_16(const MunitParameter params[], void *user)
|
|||
}
|
||||
|
||||
|
||||
static MunitResult test_seq_num_32(const MunitParameter params[], void *user)
|
||||
{
|
||||
munit_assert(chiaki_seq_num_32_gt(1, 0));
|
||||
munit_assert(!chiaki_seq_num_32_gt(0, 1));
|
||||
munit_assert(!chiaki_seq_num_32_lt(1, 0));
|
||||
munit_assert(chiaki_seq_num_32_lt(0, 1));
|
||||
munit_assert(chiaki_seq_num_32_gt(1, 0xfffffff5));
|
||||
munit_assert(!chiaki_seq_num_32_gt(0xfffffff5, 1));
|
||||
|
||||
return MUNIT_OK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
MunitTest tests_seq_num[] = {
|
||||
{
|
||||
"/seq_num_16",
|
||||
|
@ -60,5 +74,13 @@ MunitTest tests_seq_num[] = {
|
|||
MUNIT_TEST_OPTION_NONE,
|
||||
NULL
|
||||
},
|
||||
{
|
||||
"/seq_num_32",
|
||||
test_seq_num_32,
|
||||
NULL,
|
||||
NULL,
|
||||
MUNIT_TEST_OPTION_NONE,
|
||||
NULL
|
||||
},
|
||||
{ NULL, NULL, NULL, NULL, MUNIT_TEST_OPTION_NONE, NULL }
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue