// Copyright 2016 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/crypto/global_prng.h>
#include <lib/unittest/unittest.h>
#include <stdint.h>

namespace crypto {

namespace {
bool identical() {
  BEGIN_TEST;

  PRNG* prng1 = GlobalPRNG::GetInstance();
  PRNG* prng2 = GlobalPRNG::GetInstance();

  EXPECT_NE(prng1, nullptr);
  EXPECT_EQ(prng1, prng2);

  END_TEST;
}

}  // namespace

UNITTEST_START_TESTCASE(global_prng_tests)
UNITTEST("Identical", identical)
UNITTEST_END_TESTCASE(global_prng_tests, "global_prng", "Validate global PRNG singleton")

}  // namespace crypto
