improve ordq

This commit is contained in:
Rongsong Shen 2025-12-17 15:28:27 +08:00
parent 48ab2e60a2
commit f44ad07116
5 changed files with 50 additions and 43 deletions

View file

@ -7,7 +7,7 @@
#include "unity.h"
#include "utils.h"
static int long_cmp(void* ctx, ordkey_t k1, ordkey_t k2)
static int long_cmp(void* ctx, void* k1, void* k2)
{
if ((long)k1 < (long)k2) {
return -1;
@ -31,13 +31,13 @@ static void test_ordq_get(void)
TEST_ASSERT_TRUE(rc >= 0);
for (i = 0; i < 8; i++) {
ordq_put(&q, mk_ordkey(keys[i]), (void*)NULL);
ordq_put(&q, (void*)(long)(keys[i]));
}
for (i = 0; i < 8; i++) {
it = ordq_get(&q, NULL);
TEST_ASSERT_TRUE((it != NULL) && (it->key == mk_ordkey(val[i])));
TEST_ASSERT_TRUE((it != NULL) && ((int)(long)it->data == val[i]));
free(it);
}
@ -46,8 +46,9 @@ static void test_ordq_get(void)
return;
}
static int test_skip(void *ctx, ordq_item_t *data) {
int val = (int)(long)data->key;
static int test_skip(void* ctx, void* data)
{
int val = (int)(long)data;
return (val % 2 != 0);
}
@ -65,31 +66,32 @@ static void test_ordq_get_skip(void)
TEST_ASSERT_TRUE(rc >= 0);
for (i = 0; i < 8; i++) {
ordq_put(&q, mk_ordkey(keys[i]), (void*)NULL);
ordq_put(&q, (void*)(long)(keys[i]));
}
j = 0; nc = 0;
j = 0;
nc = 0;
for (i = 0; i < 5; i++) {
it = ordq_get(&q, test_skip);
if ( it == NULL) {
if (it == NULL) {
break;
}
nc ++;
while((j < 8) && (val[j] % 2 != 0)) {
j ++;
nc++;
while ((j < 8) && (val[j] % 2 != 0)) {
j++;
}
TEST_ASSERT_TRUE(it->key == mk_ordkey(val[j]));
TEST_ASSERT_TRUE((int)(long)it->data == (val[j]));
free(it);
j ++;
j++;
}
TEST_ASSERT_TRUE(nc == 5);
ordq_fini(&q);
return;
@ -108,13 +110,13 @@ static void test_ordq_peek(void)
TEST_ASSERT_TRUE(rc >= 0);
for (i = 0; i < 8; i++) {
ordq_put(&q, mk_ordkey(keys[i]), (void*)NULL);
ordq_put(&q, (void*)(long)(keys[i]));
}
for (i = 0; i < 8; i++) {
it = ordq_peek(&q, NULL); /* ordq_peek() will not remove item from q */
TEST_ASSERT_TRUE((it != NULL) && (it->key == mk_ordkey(val[0])));
TEST_ASSERT_TRUE((it != NULL) && ((int)(long)it->data == (val[0])));
}
ordq_fini(&q);
@ -122,8 +124,9 @@ static void test_ordq_peek(void)
return;
}
static int test_skip2(void *ctx, ordq_item_t *data) {
int val = (int)(long)data->key;
static int test_skip2(void* ctx, void* data)
{
int val = (int)(long)data;
return (val % 3 != 0);
}
@ -141,13 +144,14 @@ static void test_ordq_peek_skip(void)
TEST_ASSERT_TRUE(rc >= 0);
for (i = 0; i < 8; i++) {
ordq_put(&q, mk_ordkey(keys[i]), (void*)NULL);
ordq_put(&q, (void*)(long)(keys[i]));
}
for (i = 0; i < 8; i++) {
it = ordq_peek(&q, test_skip2); /* ordq_peek() will not remove item from q */
it = ordq_peek(
&q, test_skip2); /* ordq_peek() will not remove item from q */
TEST_ASSERT_TRUE((it != NULL) && (it->key == mk_ordkey(val[4])));
TEST_ASSERT_TRUE((it != NULL) && ((int)(long)it->data == val[4]));
}
ordq_fini(&q);