You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

86 lines
2.5 KiB

#include "u_async.h"
#include <stdio.h>
/* Test statistics */
static struct {
int timer_callbacks;
int immediate_timeouts;
} test_stats = {0};
typedef struct {
int callback_count;
int timeout_ms;
} test_context_t;
/* Timer callback for testing */
static void test_timer_callback(void* arg) {
test_context_t* ctx = (test_context_t*)arg;
ctx->callback_count++;
test_stats.timer_callbacks++;
printf("Callback fired: ctx->timeout_ms=%d, immediate_timeouts before=%d", ctx->timeout_ms, test_stats.immediate_timeouts);
if (ctx->timeout_ms == 0) {
test_stats.immediate_timeouts++;
printf(" -> INCREMENTED to %d\n", test_stats.immediate_timeouts);
} else {
printf(" -> NOT incremented\n");
}
}
int main() {
printf("=== Test 1: Basic timers (non-zero timeouts) ===\n");
printf("Before test 1: immediate_timeouts = %d\n", test_stats.immediate_timeouts);
uasync_t* ua1 = uasync_create();
test_context_t ctx1 = {.timeout_ms = 10};
for (int i = 0; i < 3; i++) {
uasync_set_timeout(ua1, 10 + i*10, &ctx1, test_timer_callback);
}
int polls = 0;
while (ctx1.callback_count < 3 && polls < 10) {
uasync_poll(ua1, 10);
polls++;
}
printf("After test 1: immediate_timeouts = %d\n", test_stats.immediate_timeouts);
uasync_destroy(ua1);
printf("\n=== Test 2: Immediate timeouts (zero timeouts) ===\n");
printf("Before test 2: immediate_timeouts = %d\n", test_stats.immediate_timeouts);
uasync_t* ua2 = uasync_create();
test_context_t ctx2 = {.timeout_ms = 0};
for (int i = 0; i < 5; i++) {
uasync_set_timeout(ua2, 0, &ctx2, test_timer_callback);
}
printf("Before poll: ctx2.callback_count = %d, immediate_timeouts = %d\n", ctx2.callback_count, test_stats.immediate_timeouts);
uasync_poll(ua2, 1);
printf("After poll: ctx2.callback_count = %d, immediate_timeouts = %d\n", ctx2.callback_count, test_stats.immediate_timeouts);
uasync_destroy(ua2);
printf("\n=== Test 3: Another immediate timeout test ===\n");
printf("Before test 3: immediate_timeouts = %d\n", test_stats.immediate_timeouts);
uasync_t* ua3 = uasync_create();
test_context_t ctx3 = {.timeout_ms = 0};
for (int i = 0; i < 2; i++) {
uasync_set_timeout(ua3, 0, &ctx3, test_timer_callback);
}
uasync_poll(ua3, 1);
printf("After test 3: immediate_timeouts = %d\n", test_stats.immediate_timeouts);
uasync_destroy(ua3);
return 0;
}