15a83710eSEric Fiselier //===----------------------------------------------------------------------===//
25a83710eSEric Fiselier //
357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information.
557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
65a83710eSEric Fiselier //
75a83710eSEric Fiselier //===----------------------------------------------------------------------===//
85a83710eSEric Fiselier
95a83710eSEric Fiselier // <random>
105a83710eSEric Fiselier
115a83710eSEric Fiselier // class seed_seq;
125a83710eSEric Fiselier
135a83710eSEric Fiselier // template<class InputIterator>
145a83710eSEric Fiselier // seed_seq(InputIterator begin, InputIterator end);
155a83710eSEric Fiselier
165a83710eSEric Fiselier #include <random>
175a83710eSEric Fiselier #include <cassert>
185a83710eSEric Fiselier
197fc6a556SMarshall Clow #include "test_macros.h"
207fc6a556SMarshall Clow
test()21*8b29b84cSArthur O'Dwyer void test()
22*8b29b84cSArthur O'Dwyer {
235a83710eSEric Fiselier {
245a83710eSEric Fiselier unsigned a[5] = {5, 4, 3, 2, 1};
255a83710eSEric Fiselier std::seed_seq s(a, a+5);
265a83710eSEric Fiselier assert(s.size() == 5);
27*8b29b84cSArthur O'Dwyer
285a83710eSEric Fiselier unsigned b[5] = {0};
295a83710eSEric Fiselier s.param(b);
305a83710eSEric Fiselier assert(b[0] == 5);
315a83710eSEric Fiselier assert(b[1] == 4);
325a83710eSEric Fiselier assert(b[2] == 3);
335a83710eSEric Fiselier assert(b[3] == 2);
345a83710eSEric Fiselier assert(b[4] == 1);
35*8b29b84cSArthur O'Dwyer }
36*8b29b84cSArthur O'Dwyer {
37*8b29b84cSArthur O'Dwyer // Test truncation to 32 bits
38*8b29b84cSArthur O'Dwyer unsigned long long a[4] = {
39*8b29b84cSArthur O'Dwyer 0x1234000056780000uLL,
40*8b29b84cSArthur O'Dwyer 0x0000001234567800uLL,
41*8b29b84cSArthur O'Dwyer 0xFFFFFFFFFFFFFFFFuLL,
42*8b29b84cSArthur O'Dwyer 0x0000000180000000uLL,
43*8b29b84cSArthur O'Dwyer };
44*8b29b84cSArthur O'Dwyer std::seed_seq s(a, a+4);
45*8b29b84cSArthur O'Dwyer assert(s.size() == 4);
46*8b29b84cSArthur O'Dwyer
47*8b29b84cSArthur O'Dwyer unsigned b[4] = {0};
48*8b29b84cSArthur O'Dwyer s.param(b);
49*8b29b84cSArthur O'Dwyer assert(b[0] == 0x56780000u);
50*8b29b84cSArthur O'Dwyer assert(b[1] == 0x34567800u);
51*8b29b84cSArthur O'Dwyer assert(b[2] == 0xFFFFFFFFu);
52*8b29b84cSArthur O'Dwyer assert(b[3] == 0x80000000u);
53*8b29b84cSArthur O'Dwyer }
54*8b29b84cSArthur O'Dwyer #if TEST_STD_VER >= 11
55*8b29b84cSArthur O'Dwyer {
56*8b29b84cSArthur O'Dwyer // Test uniform initialization syntax (LWG 3422)
57*8b29b84cSArthur O'Dwyer unsigned a[3] = {1, 2, 3};
58*8b29b84cSArthur O'Dwyer std::seed_seq s{a, a+3}; // uniform initialization
59*8b29b84cSArthur O'Dwyer assert(s.size() == 3);
60*8b29b84cSArthur O'Dwyer
61*8b29b84cSArthur O'Dwyer unsigned b[3] = {0};
62*8b29b84cSArthur O'Dwyer s.param(b);
63*8b29b84cSArthur O'Dwyer assert(b[0] == 1);
64*8b29b84cSArthur O'Dwyer assert(b[1] == 2);
65*8b29b84cSArthur O'Dwyer assert(b[2] == 3);
66*8b29b84cSArthur O'Dwyer }
67*8b29b84cSArthur O'Dwyer #endif // TEST_STD_VER >= 11
68*8b29b84cSArthur O'Dwyer }
69*8b29b84cSArthur O'Dwyer
main(int,char **)70*8b29b84cSArthur O'Dwyer int main(int, char**)
71*8b29b84cSArthur O'Dwyer {
72*8b29b84cSArthur O'Dwyer test();
732df59c50SJF Bastien
742df59c50SJF Bastien return 0;
755a83710eSEric Fiselier }
76