blob: 47d0bd1100140b7b39b3ad72adb9644d653ddf33 [file]
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <cstddef>
#include <cstdint>
#include <gtest/gtest.h>
#include <wlan/drivers/fuzzing.h>
#include <wlan/drivers/log.h>
namespace fuzzing = wlan::drivers::fuzzing;
const uint32_t RAND_TEST_REPETITIONS = 1000;
#define RAND_TEST(R, rand_type) \
TEST(FuzzingTest, UnlikelyRepeats_##rand_type) { \
std::random_device::result_type seed; \
auto rng = fuzzing::seeded_rng(&seed); \
const char* test_name = testing::UnitTest::GetInstance()->current_test_info()->name(); \
linfo("%s seed: %u", test_name, seed); \
rand_type r = R(rng); \
size_t i = 0; \
for (; i < RAND_TEST_REPETITIONS; ++i) { \
rand_type r_next = R(rng); \
if (r != r_next) { \
break; \
} \
r = r_next; \
} \
if (i == RAND_TEST_REPETITIONS) { \
FAIL() << #R << "() produces same value " << RAND_TEST_REPETITIONS << " times: " << r; \
} \
}
RAND_TEST(fuzzing::rand8, uint8_t)
RAND_TEST(fuzzing::rand16, uint16_t)
RAND_TEST(fuzzing::rand32, uint32_t)
RAND_TEST(fuzzing::rand64, uint64_t)