1259701Sdim// -*- C++ -*-
2259701Sdim
3259701Sdim// Copyright (C) 2005-2015 Free Software Foundation, Inc.
4259701Sdim//
5259701Sdim// This file is part of the GNU ISO C++ Library.  This library is free
6259701Sdim// software; you can redistribute it and/or modify it under the terms
7259701Sdim// of the GNU General Public License as published by the Free Software
8259701Sdim// Foundation; either version 3, or (at your option) any later
9259701Sdim// version.
10259701Sdim
11259701Sdim// This library is distributed in the hope that it will be useful, but
12259701Sdim// WITHOUT ANY WARRANTY; without even the implied warranty of
13259701Sdim// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14259701Sdim// General Public License for more details.
15259701Sdim
16259701Sdim// You should have received a copy of the GNU General Public License
17259701Sdim// along with this library; see the file COPYING3.  If not see
18259701Sdim// <http://www.gnu.org/licenses/>.
19259701Sdim
20259701Sdim
21259701Sdim// Copyright (C) 2004 Ami Tavory and Vladimir Dreizin, IBM-HRL.
22259701Sdim
23259701Sdim// Permission to use, copy, modify, sell, and distribute this software
24259701Sdim// is hereby granted without fee, provided that the above copyright
25259701Sdim// notice appears in all copies, and that both that copyright notice
26259701Sdim// and this permission notice appear in supporting documentation. None
27259701Sdim// of the above authors, nor IBM Haifa Research Laboratories, make any
28259701Sdim// representation about the suitability of this software for any
29// purpose. It is provided "as is" without express or implied
30// warranty.
31
32/**
33 * @file tree_order_statistics_timing_test.cpp
34 * Contains test for order_statisticsing trees.
35 */
36
37#include <iostream>
38#include <vector>
39#include <ext/typelist.h>
40#include <performance/io/xml_formatter.hpp>
41#include <io/verified_cmd_line_input.hpp>
42#include <testsuite_rng.h>
43#include <common_type/assoc/common_type.hpp>
44#include <performance/assoc/timing/tree_order_statistics_test.hpp>
45
46void
47usage();
48
49int
50main(int argc, char* a_p_argv[])
51{
52  using namespace __gnu_pbds::test;
53  size_t vn = 200;
54  size_t vs = 200;
55  size_t vm = 2100;
56
57  try
58    {
59      xml_test_performance_formatter fmt("Size", "Average time (sec.)");
60
61      {
62	typedef tree_order_statistics_test< true> test_t;
63	test_t tst(vn, vs, vm);
64	typedef tree_common_types<int, __gnu_pbds::null_type, std::less<int>, __gnu_pbds::tree_order_statistics_node_update>::performance_tl tl_t;
65	tl_t tl;
66	__gnu_cxx::typelist::apply(tst, tl);
67      }
68
69      {
70	typedef tree_order_statistics_test<false> test_t;
71	test_t tst(vn, vs, vm);
72	typedef native_set<int> native_set_t;
73	tst(native_set_t());
74      }
75    }
76  catch(...)
77    {
78      std::cerr << "Test failed" << std::endl;
79      return -1;
80    }
81  return 0;
82}
83
84void
85usage()
86{
87  using namespace std;
88  cerr << "usage: tree_order_statistics_timing_test.out <vn> <vs> <vm>" <<
89    endl << endl;
90
91  cerr << "This test checks the performance of order statistics"
92    " in tree based containers. " << endl;
93  cerr << "Specifically, it does the following:" << endl;
94  cerr << "*  Creates a tree" << endl;
95  cerr << "*  Inserts integers into the tree" << endl;
96  cerr << "*  Checks the order-statistics of each entry in the tree" << endl;
97  cerr << "*  Repeats the above test some times"
98	    << endl;
99
100  cerr << endl << endl;
101
102  cerr << "vn = minimum size of the tree" << endl;
103  cerr << "vs = step size of the tree" << endl;
104  cerr << "vm = maximum size of the tree" << endl;
105}
106