|
|
@@ -0,0 +1,162 @@ |
|
|
//===-- Unittests for strerror --------------------------------------------===// |
|
|
// |
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
|
|
// See https://llvm.org/LICENSE.txt for license information. |
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
|
|
// |
|
|
//===----------------------------------------------------------------------===// |
|
|
|
|
|
#include "src/string/strerror.h" |
|
|
#include "utils/UnitTest/Test.h" |
|
|
|
|
|
TEST(LlvmLibcStrErrorTest, KnownErrors) { |
|
|
ASSERT_STREQ(__llvm_libc::strerror(0), "Success"); |
|
|
|
|
|
const char *message_array[] = { |
|
|
"Success", |
|
|
"Operation not permitted", |
|
|
"No such file or directory", |
|
|
"No such process", |
|
|
"Interrupted system call", |
|
|
"Input/output error", |
|
|
"No such device or address", |
|
|
"Argument list too long", |
|
|
"Exec format error", |
|
|
"Bad file descriptor", |
|
|
"No child processes", |
|
|
"Resource temporarily unavailable", |
|
|
"Cannot allocate memory", |
|
|
"Permission denied", |
|
|
"Bad address", |
|
|
"Block device required", |
|
|
"Device or resource busy", |
|
|
"File exists", |
|
|
"Invalid cross-device link", |
|
|
"No such device", |
|
|
"Not a directory", |
|
|
"Is a directory", |
|
|
"Invalid argument", |
|
|
"Too many open files in system", |
|
|
"Too many open files", |
|
|
"Inappropriate ioctl for device", |
|
|
"Text file busy", |
|
|
"File too large", |
|
|
"No space left on device", |
|
|
"Illegal seek", |
|
|
"Read-only file system", |
|
|
"Too many links", |
|
|
"Broken pipe", |
|
|
"Numerical argument out of domain", |
|
|
"Numerical result out of range", |
|
|
"Resource deadlock avoided", |
|
|
"File name too long", |
|
|
"No locks available", |
|
|
"Function not implemented", |
|
|
"Directory not empty", |
|
|
"Too many levels of symbolic links", |
|
|
"Unknown error 41", // Unknown |
|
|
"No message of desired type", |
|
|
"Identifier removed", |
|
|
"Channel number out of range", |
|
|
"Level 2 not synchronized", |
|
|
"Level 3 halted", |
|
|
"Level 3 reset", |
|
|
"Link number out of range", |
|
|
"Protocol driver not attached", |
|
|
"No CSI structure available", |
|
|
"Level 2 halted", |
|
|
"Invalid exchange", |
|
|
"Invalid request descriptor", |
|
|
"Exchange full", |
|
|
"No anode", |
|
|
"Invalid request code", |
|
|
"Invalid slot", |
|
|
"Unknown error 58", // Unknown |
|
|
"Bad font file format", |
|
|
"Device not a stream", |
|
|
"No data available", |
|
|
"Timer expired", |
|
|
"Out of streams resources", |
|
|
"Machine is not on the network", |
|
|
"Package not installed", |
|
|
"Object is remote", |
|
|
"Link has been severed", |
|
|
"Advertise error", |
|
|
"Srmount error", |
|
|
"Communication error on send", |
|
|
"Protocol error", |
|
|
"Multihop attempted", |
|
|
"RFS specific error", |
|
|
"Bad message", |
|
|
"Value too large for defined data type", |
|
|
"Name not unique on network", |
|
|
"File descriptor in bad state", |
|
|
"Remote address changed", |
|
|
"Can not access a needed shared library", |
|
|
"Accessing a corrupted shared library", |
|
|
".lib section in a.out corrupted", |
|
|
"Attempting to link in too many shared libraries", |
|
|
"Cannot exec a shared library directly", |
|
|
"Invalid or incomplete multibyte or wide character", |
|
|
"Interrupted system call should be restarted", |
|
|
"Streams pipe error", |
|
|
"Too many users", |
|
|
"Socket operation on non-socket", |
|
|
"Destination address required", |
|
|
"Message too long", |
|
|
"Protocol wrong type for socket", |
|
|
"Protocol not available", |
|
|
"Protocol not supported", |
|
|
"Socket type not supported", |
|
|
"Operation not supported", |
|
|
"Protocol family not supported", |
|
|
"Address family not supported by protocol", |
|
|
"Address already in use", |
|
|
"Cannot assign requested address", |
|
|
"Network is down", |
|
|
"Network is unreachable", |
|
|
"Network dropped connection on reset", |
|
|
"Software caused connection abort", |
|
|
"Connection reset by peer", |
|
|
"No buffer space available", |
|
|
"Transport endpoint is already connected", |
|
|
"Transport endpoint is not connected", |
|
|
"Cannot send after transport endpoint shutdown", |
|
|
"Too many references: cannot splice", |
|
|
"Connection timed out", |
|
|
"Connection refused", |
|
|
"Host is down", |
|
|
"No route to host", |
|
|
"Operation already in progress", |
|
|
"Operation now in progress", |
|
|
"Stale file handle", |
|
|
"Structure needs cleaning", |
|
|
"Not a XENIX named type file", |
|
|
"No XENIX semaphores available", |
|
|
"Is a named type file", |
|
|
"Remote I/O error", |
|
|
"Disk quota exceeded", |
|
|
"No medium found", |
|
|
"Wrong medium type", |
|
|
"Operation canceled", |
|
|
"Required key not available", |
|
|
"Key has expired", |
|
|
"Key has been revoked", |
|
|
"Key was rejected by service", |
|
|
"Owner died", |
|
|
"State not recoverable", |
|
|
"Operation not possible due to RF-kill", |
|
|
"Memory page has hardware error", |
|
|
}; |
|
|
|
|
|
for (size_t i = 0; i < (sizeof(message_array) / sizeof(char *)); ++i) { |
|
|
EXPECT_STREQ(__llvm_libc::strerror(i), message_array[i]); |
|
|
} |
|
|
} |
|
|
|
|
|
TEST(LlvmLibcStrErrorTest, UnknownErrors) { |
|
|
ASSERT_STREQ(__llvm_libc::strerror(-1), "Unknown error -1"); |
|
|
ASSERT_STREQ(__llvm_libc::strerror(134), "Unknown error 134"); |
|
|
ASSERT_STREQ(__llvm_libc::strerror(2147483647), "Unknown error 2147483647"); |
|
|
ASSERT_STREQ(__llvm_libc::strerror(-2147483648), "Unknown error -2147483648"); |
|
|
} |