// Copyright (c) 2012 The Chromium 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 "quic/test_tools/mock_random.h"

#include <string.h>

namespace quic {
namespace test {

MockRandom::MockRandom() : base_(0xDEADBEEF), increment_(0) {}

MockRandom::MockRandom(uint32_t base) : base_(base), increment_(0) {}

void MockRandom::RandBytes(void* data, size_t len) {
  memset(data, increment_ + static_cast<uint8_t>('r'), len);
}

uint64_t MockRandom::RandUint64() {
  return base_ + increment_;
}

void MockRandom::InsecureRandBytes(void* data, size_t len) {
  RandBytes(data, len);
}

uint64_t MockRandom::InsecureRandUint64() {
  return RandUint64();
}

void MockRandom::ChangeValue() {
  increment_++;
}

void MockRandom::ResetBase(uint32_t base) {
  base_ = base;
  increment_ = 0;
}

}  // namespace test
}  // namespace quic
