1//===-- Unittests for readv -----------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#include "hdr/types/struct_iovec.h"
10#include "src/fcntl/open.h"
11#include "src/sys/uio/readv.h"
12#include "src/unistd/close.h"
13#include "src/unistd/unlink.h"
14#include "src/unistd/write.h"
15#include "test/UnitTest/ErrnoSetterMatcher.h"
16#include "test/UnitTest/Test.h"
17
18using namespace LIBC_NAMESPACE::testing::ErrnoSetterMatcher;
19
20TEST(LlvmLibcSysUioReadvTest, SmokeTest) {
21 const char *filename = "./LlvmLibcSysUioReadvTest";
22 int fd = LIBC_NAMESPACE::open(filename, O_WRONLY | O_CREAT, 0644);
23 ASSERT_THAT(fd, returns(GT(0)).with_errno(EQ(0)));
24 const char data[] = "Hello, World!\n";
25 ASSERT_THAT(LIBC_NAMESPACE::write(fd, data, sizeof(data)),
26 returns(EQ(sizeof(data))).with_errno(EQ(0)));
27 ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds());
28
29 fd = LIBC_NAMESPACE::open(filename, O_RDONLY);
30 ASSERT_THAT(fd, returns(GT(0)).with_errno(EQ(0)));
31 char buf0[2];
32 char buf1[3];
33 struct iovec iov[2];
34 iov[0].iov_base = buf0;
35 iov[0].iov_len = 1;
36 iov[1].iov_base = buf1;
37 iov[1].iov_len = 2;
38 ASSERT_THAT(LIBC_NAMESPACE::readv(fd, iov, 2),
39 returns(EQ(ssize_t(3))).with_errno(EQ(0)));
40 ASSERT_THAT(LIBC_NAMESPACE::close(fd), Succeeds());
41 ASSERT_THAT(LIBC_NAMESPACE::unlink(filename),
42 returns(EQ(ssize_t(0))).with_errno(EQ(0)));
43}
44

source code of libc/test/src/sys/uio/readv_test.cpp