]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/25_algorithms/fill_n/1.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / 25_algorithms / fill_n / 1.cc
CommitLineData
e9e90c1f
PC
1// 2007-01-19 Paolo Carlini <pcarlini@suse.de>
2
99dee823 3// Copyright (C) 2007-2021 Free Software Foundation, Inc.
e9e90c1f
PC
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
748086b7 8// Free Software Foundation; either version 3, or (at your option)
e9e90c1f
PC
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
2328b1de 12// but WITHOUT ANY WARRANTY; without even the implied warranty of
e9e90c1f
PC
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15
16// You should have received a copy of the GNU General Public License along
748086b7
JJ
17// with this library; see the file COPYING3. If not see
18// <http://www.gnu.org/licenses/>.
e9e90c1f
PC
19
20// 25.2.5 [lib.alg.fill] Fill_n.
21
22#include <algorithm>
23#include <vector>
24#include <testsuite_hooks.h>
d67be443
JW
25#include <testsuite_iterators.h>
26
27// Non-scalar type to exercise partial specialization of fill_n implementation.
28struct Value
29{
30 Value(int n) : n(n) { }
31
32 operator int() const { return n; }
33
34private:
35 int n;
36};
e9e90c1f
PC
37
38void
39test01()
40{
41 using namespace std;
d67be443
JW
42 using __gnu_test::test_container;
43 using __gnu_test::output_iterator_wrapper;
e9e90c1f
PC
44
45 const int A1[] = {3, 3, 3, 3, 3, 3, 3, 3, 3, 3};
46 const int N1 = sizeof(A1) / sizeof(int);
47
48 int i1[N1];
d67be443
JW
49 test_container<int, output_iterator_wrapper> c1(i1, i1 + N1);
50 fill_n(c1.begin(), N1, 3);
e9e90c1f
PC
51 VERIFY( equal(i1, i1 + N1, A1) );
52
53 vector<int> v1(N1);
d67be443 54 fill_n(v1.begin(), N1, Value(3));
e9e90c1f
PC
55 VERIFY( equal(v1.begin(), v1.end(), A1) );
56
57 const char A2[] = {'\3', '\3', '\3', '\3', '\3',
58 '\3', '\3', '\3', '\3', '\3'};
59 const int N2 = sizeof(A2) / sizeof(char);
60
61 char i2[N2];
62 fill_n(i2, N2, '\3');
63 VERIFY( equal(i2, i2 + N2, A2) );
64
65 vector<char> v2(N2);
66 fill_n(v2.begin(), N2, '\3');
67 VERIFY( equal(v2.begin(), v2.end(), A2) );
68
69#ifdef _GLIBCXX_USE_WCHAR_T
70 const wchar_t A3[] = {L'\3', L'\3', L'\3', L'\3', L'\3',
71 L'\3', L'\3', L'\3', L'\3', L'\3'};
72 const int N3 = sizeof(A3) / sizeof(wchar_t);
73
74 wchar_t i3[N3];
75 fill_n(i3, N3, L'\3');
76 VERIFY( equal(i3, i3 + N3, A3) );
77
78 vector<wchar_t> v3(N3);
79 fill_n(v3.begin(), N3, L'\3');
80 VERIFY( equal(v3.begin(), v3.end(), A3) );
81#endif
82}
83
84int
85main()
86{
87 test01();
88 return 0;
89}