[libc-commits] [libc] bb4f88f - [libc] simplify test for getrandom
Guillaume Chatelet via libc-commits
libc-commits at lists.llvm.org
Wed May 24 08:08:01 PDT 2023
Author: Guillaume Chatelet
Date: 2023-05-24T15:07:51Z
New Revision: bb4f88f9b97f8345c04afcea5323b1d26f022507
URL: https://github.com/llvm/llvm-project/commit/bb4f88f9b97f8345c04afcea5323b1d26f022507
DIFF: https://github.com/llvm/llvm-project/commit/bb4f88f9b97f8345c04afcea5323b1d26f022507.diff
LOG: [libc] simplify test for getrandom
`getrandom` is implemented as a syscall.
We don't want to test linux implementation of the syscall. We just want to verify that it reacts as expected to sensible values.
Runtime before
```
[ RUN ] LlvmLibcGetRandomTest.InvalidFlag
[ OK ] LlvmLibcGetRandomTest.InvalidFlag (took 0 ms)
[ RUN ] LlvmLibcGetRandomTest.InvalidBuffer
[ OK ] LlvmLibcGetRandomTest.InvalidBuffer (took 0 ms)
[ RUN ] LlvmLibcGetRandomTest.ReturnsSize
[ OK ] LlvmLibcGetRandomTest.ReturnsSize (took 83 ms)
[ RUN ] LlvmLibcGetRandomTest.PiEstimation
[ OK ] LlvmLibcGetRandomTest.PiEstimation (took 9882 ms)
```
Runtime after
```
[ RUN ] LlvmLibcGetRandomTest.InvalidFlag
[ OK ] LlvmLibcGetRandomTest.InvalidFlag (took 0 ms)
[ RUN ] LlvmLibcGetRandomTest.InvalidBuffer
[ OK ] LlvmLibcGetRandomTest.InvalidBuffer (took 0 ms)
[ RUN ] LlvmLibcGetRandomTest.ReturnsSize
[ OK ] LlvmLibcGetRandomTest.ReturnsSize (took 0 ms)
[ RUN ] LlvmLibcGetRandomTest.CheckValue
[ OK ] LlvmLibcGetRandomTest.CheckValue (took 0 ms)
```
Reviewed By: lntue
Differential Revision: https://reviews.llvm.org/D151336
Added:
Modified:
libc/test/src/sys/random/linux/getrandom_test.cpp
Removed:
################################################################################
diff --git a/libc/test/src/sys/random/linux/getrandom_test.cpp b/libc/test/src/sys/random/linux/getrandom_test.cpp
index 52586313be660..1d26ee97348bf 100644
--- a/libc/test/src/sys/random/linux/getrandom_test.cpp
+++ b/libc/test/src/sys/random/linux/getrandom_test.cpp
@@ -6,6 +6,7 @@
//
//===----------------------------------------------------------------------===//
+#include "src/__support/CPP/array.h"
#include "src/errno/libc_errno.h"
#include "src/math/fabs.h"
#include "src/sys/random/getrandom.h"
@@ -13,53 +14,41 @@
#include "test/UnitTest/Test.h"
TEST(LlvmLibcGetRandomTest, InvalidFlag) {
- using __llvm_libc::testing::ErrnoSetterMatcher::Fails;
- static constexpr size_t SIZE = 256;
- char data[SIZE];
- libc_errno = 0;
- ASSERT_THAT(__llvm_libc::getrandom(data, SIZE, -1), Fails(EINVAL));
+ __llvm_libc::cpp::array<char, 10> buffer;
libc_errno = 0;
+ ASSERT_THAT(__llvm_libc::getrandom(buffer.data(), buffer.size(), -1),
+ __llvm_libc::testing::ErrnoSetterMatcher::Fails(EINVAL));
}
TEST(LlvmLibcGetRandomTest, InvalidBuffer) {
- using __llvm_libc::testing::ErrnoSetterMatcher::Fails;
-
- libc_errno = 0;
- ASSERT_THAT(__llvm_libc::getrandom(nullptr, 65536, 0), Fails(EFAULT));
libc_errno = 0;
+ ASSERT_THAT(__llvm_libc::getrandom(nullptr, 65536, 0),
+ __llvm_libc::testing::ErrnoSetterMatcher::Fails(EFAULT));
}
TEST(LlvmLibcGetRandomTest, ReturnsSize) {
- static constexpr size_t SIZE = 8192;
- uint8_t buf[SIZE];
- for (size_t i = 0; i < SIZE; ++i) {
+ __llvm_libc::cpp::array<char, 10> buffer;
+ for (size_t i = 0; i < buffer.size(); ++i) {
// Without GRND_RANDOM set this should never fail.
- ASSERT_EQ(__llvm_libc::getrandom(buf, i, 0), static_cast<ssize_t>(i));
+ ASSERT_EQ(__llvm_libc::getrandom(buffer.data(), i, 0),
+ static_cast<ssize_t>(i));
}
}
-TEST(LlvmLibcGetRandomTest, PiEstimation) {
- static constexpr size_t LIMIT = 10000000;
- static constexpr double PI = 3.14159265358979;
+TEST(LlvmLibcGetRandomTest, CheckValue) {
+ // Probability of picking one particular value amongst 256 possibilities a
+ // hundred times in a row is (1/256)^100 = 1.49969681e-241.
+ __llvm_libc::cpp::array<char, 100> buffer;
- auto generator = []() {
- uint16_t data;
- __llvm_libc::getrandom(&data, sizeof(data), 0);
- return data;
- };
+ for (char &c : buffer)
+ c = 0;
- auto sample = [&]() {
- auto x = static_cast<double>(generator()) / 65536.0;
- auto y = static_cast<double>(generator()) / 65536.0;
- return x * x + y * y < 1.0;
- };
+ __llvm_libc::getrandom(buffer.data(), buffer.size(), 0);
- double counter = 0;
- for (size_t i = 0; i < LIMIT; ++i) {
- if (sample()) {
- counter += 1.0;
- }
- }
- counter = counter / LIMIT * 4.0;
- ASSERT_TRUE(__llvm_libc::fabs(counter - PI) < 0.1);
+ bool all_zeros = true;
+ for (char c : buffer)
+ if (c != 0)
+ all_zeros = false;
+
+ ASSERT_FALSE(all_zeros);
}
More information about the libc-commits
mailing list