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