| //===-- 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 "test/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(static_cast<int>(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"); |
| } |