1// { dg-options "-std=gnu++11" }
2
3// Copyright (C) 2008-2015 Free Software Foundation, Inc.
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
8// Free Software Foundation; either version 3, or (at your option)
9// any later version.
10
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
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
17// with this library; see the file COPYING3.  If not see
18// <http://www.gnu.org/licenses/>.
19
20// 23.2.3.n forward_list xxx [lib.forward_list.xxx]
21
22#include <forward_list>
23#include <testsuite_hooks.h>
24
25bool test __attribute__((unused)) = true;
26
27// This test verifies the following:
28//   unique
29void
30test01()
31{
32  std::forward_list<int> fl = {99, 5, 99, 6, -5, 666, 777, 888,
33                               42, 42, 42, 42, 42, 7, 0, 0, 0, 9, 9, 9};
34
35  fl.unique();
36
37  std::forward_list<int> fl2 = {99, 5, 99, 6, -5, 666, 777, 888, 42, 7, 0, 9};
38  VERIFY(fl == fl2);
39}
40
41//  Test comparison predicate.
42template<typename Num>
43  class Mod
44  {
45  public:
46    Mod(const Num & mod)
47      {
48        m = mod;
49      }
50    bool operator()(const Num i, const Num j)
51      {
52        return i%m == j%m;
53      }
54  private:
55    Num m;
56  };
57
58// This test verifies the following:
59//   unique with predicate
60void
61test02()
62{
63  std::forward_list<int> fl = {99, 5, 99, 6, -5, 666, 777, 888, 42, 7, 0, 9};
64
65  fl.unique(Mod<int>(111));
66
67  std::forward_list<int> fl2 = {99, 5, 99, 6, -5, 666, 42, 7, 0, 9};
68  VERIFY(fl == fl2);
69}
70
71int
72main()
73{
74  test01();
75  test02();
76  return 0;
77}
78