blob: 38ce103e36eb84b1edcbf3d91cf804629b7889e5 [file] [log] [blame]
// Copyright 2021 The Fuchsia Authors
//
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file or at
// https://opensource.org/licenses/MIT
#include <lib/arch/random.h>
#include <lib/unittest/unittest.h>
#include <ktl/type_traits.h>
namespace {
template <bool Reseeded>
bool ArchRandomTest() {
BEGIN_TEST;
bool supported = arch::Random<Reseeded>::Supported();
EXPECT_EQ(supported, !!supported);
if (supported) {
auto result = arch::Random<Reseeded>::Get();
ASSERT_TRUE(result);
auto value = result.value();
static_assert(ktl::is_same_v<decltype(value), uint64_t>);
}
END_TEST;
}
bool PlainRandomTest() { return ArchRandomTest<false>(); }
bool ReseededRandomTest() { return ArchRandomTest<true>(); }
} // namespace
UNITTEST_START_TESTCASE(ArchRandomTests)
UNITTEST("hardware RNG", PlainRandomTest)
UNITTEST("hardware reseeded RNG", ReseededRandomTest)
UNITTEST_END_TESTCASE(ArchRandomTests, "arch-random", "hardware RNG tests")