| Index: webrtc/base/random.h
 | 
| diff --git a/webrtc/test/random.h b/webrtc/base/random.h
 | 
| similarity index 63%
 | 
| rename from webrtc/test/random.h
 | 
| rename to webrtc/base/random.h
 | 
| index c7254a9b4946e41f6e62d333af79bfd45dad5e96..647b84c9c947b8d11f711012c9deb5e09b151d3f 100644
 | 
| --- a/webrtc/test/random.h
 | 
| +++ b/webrtc/base/random.h
 | 
| @@ -8,23 +8,23 @@
 | 
|   *  be found in the AUTHORS file in the root of the source tree.
 | 
|   */
 | 
|  
 | 
| -#ifndef WEBRTC_TEST_RANDOM_H_
 | 
| -#define WEBRTC_TEST_RANDOM_H_
 | 
| +#ifndef WEBRTC_BASE_RANDOM_H_
 | 
| +#define WEBRTC_BASE_RANDOM_H_
 | 
|  
 | 
|  #include <limits>
 | 
|  
 | 
|  #include "webrtc/typedefs.h"
 | 
|  #include "webrtc/base/constructormagic.h"
 | 
| +#include "webrtc/base/checks.h"
 | 
|  
 | 
|  namespace webrtc {
 | 
|  
 | 
| -namespace test {
 | 
| -
 | 
|  class Random {
 | 
|   public:
 | 
| -  explicit Random(uint32_t seed);
 | 
| +  explicit Random(uint64_t seed);
 | 
|  
 | 
|    // Return pseudo-random integer of the specified type.
 | 
| +  // We need to limit the size to 32 bits to keep the output close to uniform.
 | 
|    template <typename T>
 | 
|    T Rand() {
 | 
|      static_assert(std::numeric_limits<T>::is_integer &&
 | 
| @@ -32,7 +32,7 @@ class Random {
 | 
|                        std::numeric_limits<T>::digits <= 32,
 | 
|                    "Rand is only supported for built-in integer types that are "
 | 
|                    "32 bits or smaller.");
 | 
| -    return static_cast<T>(Rand(std::numeric_limits<uint32_t>::max()));
 | 
| +    return static_cast<T>(NextOutput());
 | 
|    }
 | 
|  
 | 
|    // Uniformly distributed pseudo-random number in the interval [0, t].
 | 
| @@ -41,18 +41,26 @@ class Random {
 | 
|    // Uniformly distributed pseudo-random number in the interval [low, high].
 | 
|    uint32_t Rand(uint32_t low, uint32_t high);
 | 
|  
 | 
| +  // Uniformly distributed pseudo-random number in the interval [low, high].
 | 
| +  int32_t Rand(int32_t low, int32_t high);
 | 
| +
 | 
|    // Normal Distribution.
 | 
| -  int Gaussian(int mean, int standard_deviation);
 | 
| +  double Gaussian(double mean, double standard_deviation);
 | 
|  
 | 
|    // Exponential Distribution.
 | 
| -  int Exponential(float lambda);
 | 
| -
 | 
| -  // TODO(solenberg): Random from histogram.
 | 
| -  // template<typename T> int Distribution(const std::vector<T> histogram) {
 | 
| +  double Exponential(double lambda);
 | 
|  
 | 
|   private:
 | 
| -  uint32_t a_;
 | 
| -  uint32_t b_;
 | 
| +  // Outputs a nonzero 64-bit random number.
 | 
| +  uint64_t NextOutput() {
 | 
| +    state_ ^= state_ >> 12;
 | 
| +    state_ ^= state_ << 25;
 | 
| +    state_ ^= state_ >> 27;
 | 
| +    RTC_DCHECK(state_ != 0x0ULL);
 | 
| +    return state_ * 2685821657736338717ull;
 | 
| +  }
 | 
| +
 | 
| +  uint64_t state_;
 | 
|  
 | 
|    RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(Random);
 | 
|  };
 | 
| @@ -61,11 +69,14 @@ class Random {
 | 
|  template <>
 | 
|  float Random::Rand<float>();
 | 
|  
 | 
| +// Return pseudo-random number in the interval [0.0, 1.0).
 | 
| +template <>
 | 
| +double Random::Rand<double>();
 | 
| +
 | 
|  // Return pseudo-random boolean value.
 | 
|  template <>
 | 
|  bool Random::Rand<bool>();
 | 
|  
 | 
| -}  // namespace test
 | 
|  }  // namespace webrtc
 | 
|  
 | 
| -#endif  // WEBRTC_TEST_RANDOM_H_
 | 
| +#endif  // WEBRTC_BASE_RANDOM_H_
 | 
| 
 |