/* libcr_ipc/tests/test_chan.c - Tests for * * Copyright (C) 2024-2025 Luke T. Shumaker * SPDX-License-Identifier: AGPL-3.0-or-later */ #include #include #include "test.h" CR_CHAN_DECLARE(intchan, int); COROUTINE producer_cr(void *_ch) { intchan_t *ch = _ch; cr_begin(); cr_chan_send(ch, 1); while (!cr_chan_can_send(ch)) cr_yield(); cr_chan_send(ch, 2); cr_end(); } COROUTINE consumer_cr(void *_ch) { int x; intchan_t *ch = _ch; cr_begin(); x = cr_chan_recv(ch); test_assert(x == 1); x = cr_chan_recv(ch); test_assert(x == 2); cr_end(); } int main() { intchan_t ch = {0}; coroutine_add("producer", producer_cr, &ch); coroutine_add("consumer", consumer_cr, &ch); coroutine_main(); return 0; }