Merged revisions 195034,195219,195245,195357,195374,195428,195599,195673,195809 via...
[official-gcc.git] / main / libstdc++-v3 / testsuite / ext / pb_ds / regression / trie_set_rand_debug.cc
blob830740bed3f1799dd5111f4eca2c64247d3d36d8
1 // { dg-require-debug-mode "" }
2 // { dg-require-time "" }
3 // This can take long on simulators, timing out the test.
4 // { dg-options "-DITERATIONS=5" { target simulator } }
5 // { dg-timeout-factor 2.0 }
7 // -*- C++ -*-
9 // Copyright (C) 2011-2013 Free Software Foundation, Inc.
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.
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.
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/>.
26 /**
27 * @file trie_data_map_rand_debug.cc
28 * Contains a random-operation test for maps and sets, separated out.
31 #define PB_DS_REGRESSION
32 //#define PB_DS_REGRESSION_TRACE
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>
39 #ifndef ITERATIONS
40 # define ITERATIONS 100
41 #endif
43 #ifndef KEYS
44 # define KEYS 200
45 #endif
47 // Debug version of the rand regression tests, based on trie_no_data_map.
49 // 1
50 // Simplify things by unrolling the typelist of the different
51 // container types into individual statements.
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 // (pat_trie_tag) and for the node
57 // update (null_node_update, trie_order_statistics_node_update,
58 // trie_order_staticstics_node_update, trie_prefix_search_node_update)
60 using namespace __gnu_pbds::test::detail;
61 using namespace __gnu_pbds;
62 typedef __gnu_pbds::test::basic_type basic_type;
63 typedef __gnu_cxx::throw_allocator_random<basic_type> allocator_type;
64 typedef __gnu_pbds::trie_string_access_traits<basic_type, char('a'), 100,
65 false, allocator_type>
66 etraits_type;
68 // pat_trie_tag
69 typedef trie<basic_type, null_type, etraits_type, pat_trie_tag,
70 null_node_update, allocator_type>
71 trie_type1;
73 typedef trie<basic_type, null_type, etraits_type, pat_trie_tag,
74 trie_order_statistics_node_update, allocator_type>
75 trie_type2;
77 typedef trie<basic_type, null_type, etraits_type, pat_trie_tag,
78 trie_prefix_search_node_update, allocator_type>
79 trie_type3;
82 // 2
83 // Specialize container_rand_regression_test for specific container
84 // type and test function.
86 #ifdef SPECIALIZE
87 // For testing one specific container type.
88 typedef trie_type1 test_type;
90 void debug_break_here() { }
92 namespace __gnu_pbds {
93 namespace test {
94 namespace detail {
96 template<>
97 void
98 container_rand_regression_test<test_type>::operator()()
105 #endif
108 main()
110 // Set up the test object.
111 size_t sd = 1303948889;
112 rand_reg_test test(sd, ITERATIONS, KEYS, 0.2, .6, .2, .001, .25, true);
114 // 1
115 // Determine the problem container, function that fails.
116 test(trie_type1());
117 test(trie_type2());
118 test(trie_type3());
120 #ifdef SPECIALIZE
121 // 2
122 // With specified problem container set test_type typedef
123 // appropriately above. Then, specialize operator()(), also
124 // above. Finally, run this below.
125 using namespace std;
126 test_type obj;
127 test(obj);
128 #endif
130 return 0;