// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

#include "sw/device/sca/lib/prng.h"

#include <algorithm>
#include <array>

#include "gmock/gmock.h"
#include "gtest/gtest.h"

namespace sca_prng_unittest {
namespace {

/**
 * First 100 return values of `random.randint(0, 255)` with a seed value of `0`.
 */
constexpr std::array<uint8_t, 100> kExpected = {
    197, 215, 20,  132, 248, 207, 155, 244, 183, 111, 71,  144, 71,  48,  128,
    75,  158, 50,  37,  169, 241, 51,  181, 222, 161, 104, 244, 226, 133, 31,
    7,   47,  204, 0,   252, 170, 124, 166, 32,  97,  113, 122, 72,  229, 46,
    41,  163, 250, 55,  154, 149, 63,  170, 104, 147, 227, 46,  197, 162, 123,
    148, 94,  96,  95,  16,  133, 243, 35,  45,  66,  76,  19,  41,  200, 141,
    120, 110, 214, 140, 230, 252, 182, 42,  166, 59,  249, 171, 97,  124, 8,
    138, 59,  112, 190, 87,  170, 218, 31,  51,  74};

TEST(RandByte, Seed_0) {
  std::vector<uint8_t> actual(kExpected.size());

  prng_seed(0);
  std::generate(actual.begin(), actual.end(), prng_rand_byte);
  EXPECT_THAT(actual, testing::ElementsAreArray(kExpected));
}

TEST(RandBytes, Seed_0) {
  std::vector<uint8_t> actual(kExpected.size());

  prng_seed(0);
  prng_rand_bytes(actual.data(), actual.size());
  EXPECT_THAT(actual, testing::ElementsAreArray(kExpected));
}

}  // namespace
}  // namespace sca_prng_unittest
