// 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 "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
