]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/ext/pb_ds/regression/list_update_map_rand_debug.cc
Update copyright years.
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / ext / pb_ds / regression / list_update_map_rand_debug.cc
CommitLineData
e330aa5b 1// { dg-require-debug-mode "" }
a345e45d 2// { dg-require-time "" }
a345e45d
BK
3// { dg-timeout-factor 2.0 }
4
5// -*- C++ -*-
6
a5544970 7// Copyright (C) 2011-2019 Free Software Foundation, Inc.
a345e45d
BK
8//
9// This file is part of the GNU ISO C++ Library. This library is free
10// software; you can redistribute it and/or modify it under the terms
11// of the GNU General Public License as published by the Free Software
12// Foundation; either version 3, or (at your option) any later
13// version.
14
15// This library is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of
17// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18// General Public License for more details.
19
20// You should have received a copy of the GNU General Public License
21// along with this library; see the file COPYING3. If not see
22// <http://www.gnu.org/licenses/>.
23
24/**
25 * @file list_update_data_map_rand_debug.cc
26 * Contains a random-operation test for maps and sets, separated out.
27 */
28
29#define PB_DS_REGRESSION
30//#define PB_DS_REGRESSION_TRACE
31
32#include <regression/rand/assoc/rand_regression_test.hpp>
33#include <regression/common_type.hpp>
34#include <ext/throw_allocator.h>
35#include <ext/pb_ds/tag_and_trait.hpp>
36
37// Debug version of the rand regression tests, based on list_update_data_map.
38
39// 1
40// Simplify things by unrolling the typelist of the different
41// container types into individual statements.
42//
43// Unroll the typelist represented by list_update_types, from
44// regression/common_type.hpp. This is just a compile-time list of
45// list_update types, with different policies for the type of
46// update (lu_move_to_front_policy, lu_counter_policy).
47
48using namespace __gnu_pbds::test::detail;
49using namespace __gnu_pbds;
50typedef __gnu_pbds::test::basic_type basic_type;
51typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
52typedef std::equal_to<basic_type> equal_type;
53
54typedef __gnu_pbds::test::lu_move_to_front_policy_t_ policy_type1;
55
56typedef __gnu_pbds::test::lu_counter_policy_t_<allocator_type, 5u>
57 policy_type2;
58
59
60typedef list_update<basic_type, basic_type, equal_type, policy_type1,
61 allocator_type>
62 list_type1;
63
64typedef list_update<basic_type, basic_type, equal_type, policy_type2,
65 allocator_type>
66 list_type2;
67
68// 2
69// Specialize container_rand_regression_test for specific container
70// type and test function.
71
72#ifdef SPECIALIZE
73// For testing one specific container type.
74typedef list_type1 test_type;
75
76void debug_break_here() { }
77
78namespace __gnu_pbds {
79 namespace test {
80 namespace detail {
81
82 template<>
83 void
84 container_rand_regression_test<test_type>::operator()()
85 {
86 }
87
88 }
89 }
90}
91#endif
92
93int
94main()
95{
96 // Set up the test object.
97 size_t sd = 1303948889;
98 rand_reg_test test(sd, 50, 10, .2, .6, .2, .001, .25, true);
99
100 // 1
101 // Determine the problem container, function that fails.
102 test(list_type1());
103 test(list_type2());
104
105#ifdef SPECIALIZE
106 // 2
107 // With specified problem container set test_type typedef
108 // appropriately above. Then, specialize operator()(), also
109 // above. Finally, run this below.
110 using namespace std;
111 test_type obj;
112 test(obj);
113#endif
114
115 return 0;
116}