]> gcc.gnu.org Git - gcc.git/blame - libstdc++-v3/testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc
Update copyright years.
[gcc.git] / libstdc++-v3 / testsuite / ext / pb_ds / regression / tree_map_rand_debug.cc
CommitLineData
e330aa5b 1// { dg-require-debug-mode "" }
a345e45d
BK
2// { dg-require-time "" }
3// This can take long on simulators, timing out the test.
e330aa5b 4// { dg-options "-DITERATIONS=5" { target simulator } }
a345e45d
BK
5// { dg-timeout-factor 2.0 }
6
7// -*- C++ -*-
8
5624e564 9// Copyright (C) 2011-2015 Free Software Foundation, Inc.
a345e45d
BK
10//
11// This file is part of the GNU ISO C++ Library. This library is free
12// software; you can redistribute it and/or modify it under the terms
13// of the GNU General Public License as published by the Free Software
14// Foundation; either version 3, or (at your option) any later
15// version.
16
17// This library is distributed in the hope that it will be useful, but
18// WITHOUT ANY WARRANTY; without even the implied warranty of
19// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20// General Public License for more details.
21
22// You should have received a copy of the GNU General Public License
23// along with this library; see the file COPYING3. If not see
24// <http://www.gnu.org/licenses/>.
25
26/**
27 * @file tree_data_map_rand_debug.cc
28 * Contains a random-operation test for maps and sets, separated out.
29 */
30
31#define PB_DS_REGRESSION
32//#define PB_DS_REGRESSION_TRACE
33
34#include <regression/rand/assoc/rand_regression_test.hpp>
35#include <regression/common_type.hpp>
36#include <ext/throw_allocator.h>
37#include <ext/pb_ds/tag_and_trait.hpp>
38
39#ifndef ITERATIONS
40# define ITERATIONS 100
41#endif
42
43#ifndef KEYS
44# define KEYS 200
45#endif
46
47// Debug version of the rand regression tests, based on tree_data_map.
48
49// 1
50// Simplify things by unrolling the typelist of the different
51// container types into individual statements.
52//
53// Unroll the typelist represented by tree_types, from
54// regression/common_type.hpp. This is just a compile-time list of 6
55// tree types, with different policies for the type of tree
56// (ov_tree_tag, rb_tree_tag, splay_tree_tag) and for the node
57// update (null_node_update, tree_order_statistics_node_update)
58
59using namespace __gnu_pbds::test::detail;
60using namespace __gnu_pbds;
61typedef __gnu_pbds::test::basic_type basic_type;
62typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
63
64// ov_tree_tag
65typedef tree<basic_type, basic_type, std::less<basic_type>,
66 ov_tree_tag, null_node_update,
67 allocator_type> ov_tree_type1;
68
69typedef tree<basic_type, basic_type, std::less<basic_type>,
70 ov_tree_tag, tree_order_statistics_node_update,
71 allocator_type> ov_tree_type2;
72
73// rb_tree_tag
74typedef tree<basic_type, basic_type, std::less<basic_type>,
75 rb_tree_tag, null_node_update,
76 allocator_type> rb_tree_type1;
77
78typedef tree<basic_type, basic_type, std::less<basic_type>,
79 rb_tree_tag, tree_order_statistics_node_update,
80 allocator_type> rb_tree_type2;
81
82// splay_tree_tag
83typedef tree<basic_type, basic_type, std::less<basic_type>,
84 splay_tree_tag, null_node_update,
85 allocator_type> splay_tree_type1;
86
87typedef tree<basic_type, basic_type, std::less<basic_type>,
88 splay_tree_tag, tree_order_statistics_node_update,
89 allocator_type> splay_tree_type2;
90
91
92// 2
93// Specialize container_rand_regression_test for specific container
94// type and test function.
95
96#ifdef SPECIALIZE
97// For testing one specific container type.
98typedef ov_tree_type2 test_type;
99
100void debug_break_here() { }
101
102namespace __gnu_pbds {
103 namespace test {
104 namespace detail {
105
106 template<>
107 void
108 container_rand_regression_test<test_type>::operator()()
109 {
110 }
111
112 }
113 }
114}
115#endif
116
117int
118main()
119{
120 // Set up the test object.
121 size_t sd = 1303948889;
122 rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true);
123
124 // 1
125 // Determine the problem container, function that fails.
126 test(ov_tree_type1());
127 test(ov_tree_type2());
128 test(rb_tree_type1());
129 test(rb_tree_type2());
130 test(splay_tree_type1());
131 test(splay_tree_type2());
132
133#ifdef SPECIALIZE
134 // 2
135 // With specified problem container set test_type typedef
136 // appropriately above. Then, specialize operator()(), also
137 // above. Finally, run this below.
138 using namespace std;
139 test_type obj;
140 test(obj);
141#endif
142
143 return 0;
144}
This page took 0.420533 seconds and 5 git commands to generate.