1c8c19e1cSJoseph Huber //===-- Loader test to check the RPC interface with the loader ------------===// 2c8c19e1cSJoseph Huber // 3c8c19e1cSJoseph Huber // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4c8c19e1cSJoseph Huber // See https://llvm.org/LICENSE.txt for license information. 5c8c19e1cSJoseph Huber // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6c8c19e1cSJoseph Huber // 7c8c19e1cSJoseph Huber //===----------------------------------------------------------------------===// 8c8c19e1cSJoseph Huber 973aab2f6Slntue #include "include/llvm-libc-types/test_rpc_opcodes_t.h" 10c8c19e1cSJoseph Huber #include "src/__support/GPU/utils.h" 11c8c19e1cSJoseph Huber #include "src/__support/RPC/rpc_client.h" 12c8c19e1cSJoseph Huber #include "test/IntegrationTest/test.h" 13c8c19e1cSJoseph Huber 14b6bc9d72SGuillaume Chatelet using namespace LIBC_NAMESPACE; 15c8c19e1cSJoseph Huber 16c8c19e1cSJoseph Huber // Test to ensure that we can use aribtrary combinations of sends and recieves 17c8c19e1cSJoseph Huber // as long as they are mirrored. 18c8c19e1cSJoseph Huber static void test_interface(bool end_with_send) { 19c8c19e1cSJoseph Huber uint64_t cnt = 0; 20*89614cebSJoseph Huber LIBC_NAMESPACE::rpc::Client::Port port = 21*89614cebSJoseph Huber LIBC_NAMESPACE::rpc::client.open<RPC_TEST_INTERFACE>(); 22*89614cebSJoseph Huber port.send([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 23*89614cebSJoseph Huber buffer->data[0] = end_with_send; 24*89614cebSJoseph Huber }); 25*89614cebSJoseph Huber port.send([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 26*89614cebSJoseph Huber buffer->data[0] = cnt = cnt + 1; 27*89614cebSJoseph Huber }); 28*89614cebSJoseph Huber port.recv([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 29*89614cebSJoseph Huber cnt = buffer->data[0]; 30*89614cebSJoseph Huber }); 31*89614cebSJoseph Huber port.send([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 32*89614cebSJoseph Huber buffer->data[0] = cnt = cnt + 1; 33*89614cebSJoseph Huber }); 34*89614cebSJoseph Huber port.recv([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 35*89614cebSJoseph Huber cnt = buffer->data[0]; 36*89614cebSJoseph Huber }); 37*89614cebSJoseph Huber port.send([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 38*89614cebSJoseph Huber buffer->data[0] = cnt = cnt + 1; 39*89614cebSJoseph Huber }); 40*89614cebSJoseph Huber port.send([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 41*89614cebSJoseph Huber buffer->data[0] = cnt = cnt + 1; 42*89614cebSJoseph Huber }); 43*89614cebSJoseph Huber port.recv([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 44*89614cebSJoseph Huber cnt = buffer->data[0]; 45*89614cebSJoseph Huber }); 46*89614cebSJoseph Huber port.recv([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 47*89614cebSJoseph Huber cnt = buffer->data[0]; 48*89614cebSJoseph Huber }); 49c8c19e1cSJoseph Huber if (end_with_send) 50*89614cebSJoseph Huber port.send([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 5108ed1999SJoseph Huber buffer->data[0] = cnt = cnt + 1; 5208ed1999SJoseph Huber }); 53c8c19e1cSJoseph Huber else 54*89614cebSJoseph Huber port.recv([&](LIBC_NAMESPACE::rpc::Buffer *buffer, uint32_t) { 55*89614cebSJoseph Huber cnt = buffer->data[0]; 56*89614cebSJoseph Huber }); 57c8c19e1cSJoseph Huber port.close(); 58c8c19e1cSJoseph Huber 59c8c19e1cSJoseph Huber ASSERT_TRUE(cnt == 9 && "Invalid number of increments"); 60c8c19e1cSJoseph Huber } 61c8c19e1cSJoseph Huber 62c8c19e1cSJoseph Huber TEST_MAIN(int argc, char **argv, char **envp) { 63c8c19e1cSJoseph Huber test_interface(true); 64c8c19e1cSJoseph Huber test_interface(false); 65c8c19e1cSJoseph Huber 66c8c19e1cSJoseph Huber return 0; 67c8c19e1cSJoseph Huber } 68