1// { dg-require-debug-mode "" } 2// { dg-require-time "" } 3// { dg-timeout-factor 2.0 } 4 5// -*- C++ -*- 6 7// Copyright (C) 2011-2015 Free Software Foundation, Inc. 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} 117