//===----------------------------------------------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

// <random>

// template <class UIntType, UIntType a, UIntType c, UIntType m>
//   class linear_congruential_engine;

// void discard(unsigned long long z);

#include <random>
#include <cassert>

template <class T>
void
rand0()
{
    typedef std::linear_congruential_engine<T, 16807, 0, 2147483647> E;
    E e;
    e.discard(9999);
    assert(e() == 1043618065);
}

template <class T>
void
rand()
{
    typedef std::linear_congruential_engine<T, 48271, 0, 2147483647> E;
    E e;
    e.discard(9999);
    assert(e() == 399268537);
}

template <class T>
void
other()
{
    typedef std::linear_congruential_engine<T, 48271, 123465789, 2147483647> E;
    E e1;
    E e2;
    assert(e1 == e2);
    e1.discard(1);
    assert(e1 != e2);
    e2();
    assert(e1 == e2);
    e1.discard(3);
    assert(e1 != e2);
    e2();
    e2();
    e2();
    assert(e1 == e2);
}

int main()
{
    rand0<unsigned int>();
    rand0<unsigned long>();
    rand0<unsigned long long>();

    rand<unsigned int>();
    rand<unsigned long>();
    rand<unsigned long long>();

    other<unsigned int>();
    other<unsigned long>();
    other<unsigned long long>();
}
