1//===----------------------------------------------------------------------===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is dual licensed under the MIT and the University of Illinois Open
6// Source Licenses. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10// <forward_list>
11
12// template <class T, class Allocator>
13//     bool operator==(const forward_list<T, Allocator>& x,
14//                     const forward_list<T, Allocator>& y);
15//
16// template <class T, class Allocator>
17//     bool operator!=(const forward_list<T, Allocator>& x,
18//                     const forward_list<T, Allocator>& y);
19
20#include <forward_list>
21#include <iterator>
22#include <algorithm>
23#include <cassert>
24
25#include "min_allocator.h"
26
27template <class C>
28void test(int N, int M)
29{
30    typedef typename C::value_type T;
31    C c1;
32    for (int i = 0; i < N; ++i)
33        c1.push_front(i);
34    C c2;
35    for (int i = 0; i < M; ++i)
36        c2.push_front(i);
37    if (N == M)
38        assert(c1 == c2);
39    else
40        assert(c1 != c2);
41    c2 = c1;
42    assert(c1 == c2);
43    if (N > 0)
44    {
45        c2.front() = N+1;
46        assert(c1 != c2);
47    }
48}
49
50int main()
51{
52    for (int i = 0; i < 10; ++i)
53        for (int j = 0; j < 10; ++j)
54            test<std::forward_list<int> >(i, j);
55#if __cplusplus >= 201103L
56    for (int i = 0; i < 10; ++i)
57        for (int j = 0; j < 10; ++j)
58            test<std::forward_list<int, min_allocator<int>> >(i, j);
59#endif
60}
61