containers/test_vector.cpp

This is an example of use of stxxl::vector and stxxl::VECTOR_GENERATOR. Vector type is configured to store 64-bit integers and have 2 pages each of 1 block

00001 /***************************************************************************
00002  *  containers/test_vector.cpp
00003  *
00004  *  Part of the STXXL. See http://stxxl.sourceforge.net
00005  *
00006  *  Copyright (C) 2002, 2003, 2006 Roman Dementiev <dementiev@mpi-sb.mpg.de>
00007  *
00008  *  Distributed under the Boost Software License, Version 1.0.
00009  *  (See accompanying file LICENSE_1_0.txt or copy at
00010  *  http://www.boost.org/LICENSE_1_0.txt)
00011  **************************************************************************/
00012 
00017 
00018 #include <iostream>
00019 #include <algorithm>
00020 #include <stxxl/vector>
00021 #include <stxxl/scan>
00022 
00023 typedef stxxl::int64 int64;
00024 
00025 struct counter
00026 {
00027     int value;
00028     counter(int v) : value(v) { }
00029     int operator () ()
00030     {
00031         int old_val = value;
00032         value++;
00033         return old_val;
00034     }
00035 };
00036 
00037 template <class my_vec_type>
00038 void test_const_iterator(const my_vec_type & x)
00039 {
00040     typename my_vec_type::const_iterator i = x.begin();
00041     i = x.end() - 1;
00042     i.touch();
00043     i.flush();
00044     i++;
00045     ++i;
00046     --i;
00047     i--;
00048     *i;
00049 }
00050 
00051 
00052 int main()
00053 {
00054     try
00055     {
00056         // use non-randomized striping to avoid side effects on random generator
00057         typedef stxxl::VECTOR_GENERATOR<int64, 2, 2, (2 * 1024 * 1024), stxxl::striping>::result vector_type;
00058         vector_type v(int64(64 * 1024 * 1024) / sizeof(int64));
00059 
00060         // test assignment const_iterator = iterator
00061         vector_type::const_iterator c_it = v.begin();
00062 
00063         unsigned int big_size = 1024 * 1024 * 2 * 16 * 16;
00064         typedef stxxl::vector<double> vec_big;
00065         vec_big my_vec(big_size);
00066 
00067         vec_big::iterator big_it = my_vec.begin();
00068         big_it += 6;
00069 
00070         test_const_iterator(v);
00071 
00072         stxxl::random_number32 rnd;
00073         int offset = rnd();
00074 
00075         STXXL_MSG("write " << v.size() << " elements");
00076 
00077         stxxl::ran32State = 0xdeadbeef;
00078         vector_type::size_type i;
00079 
00080         // fill the vector with increasing sequence of integer numbers
00081         for (i = 0; i < v.size(); ++i)
00082         {
00083             v[i] = i + offset;
00084             assert(v[i] == int64(i + offset));
00085         }
00086 
00087 
00088         // fill the vector with random numbers
00089         stxxl::generate(v.begin(), v.end(), stxxl::random_number32(), 4);
00090         v.flush();
00091 
00092         STXXL_MSG("seq read of " << v.size() << " elements");
00093 
00094         stxxl::ran32State = 0xdeadbeef;
00095 
00096         // testing swap
00097         vector_type a;
00098         std::swap(v, a);
00099         std::swap(v, a);
00100 
00101         for (i = 0; i < v.size(); i++)
00102         {
00103             assert(v[i] == rnd());
00104         }
00105 
00106         // check again
00107         STXXL_MSG("clear");
00108 
00109         v.clear();
00110 
00111         stxxl::ran32State = 0xdeadbeef + 10;
00112 
00113         v.resize(int64(64 * 1024 * 1024) / sizeof(int64));
00114 
00115         STXXL_MSG("write " << v.size() << " elements");
00116         stxxl::generate(v.begin(), v.end(), stxxl::random_number32(), 4);
00117 
00118         stxxl::ran32State = 0xdeadbeef + 10;
00119 
00120         STXXL_MSG("seq read of " << v.size() << " elements");
00121 
00122         for (i = 0; i < v.size(); i++)
00123         {
00124             assert(v[i] == rnd());
00125         }
00126 
00127         std::vector<stxxl::vector<int> > vector_of_stxxlvectors(2);
00128         // test copy operator
00129         vector_of_stxxlvectors[0] = vector_of_stxxlvectors[1];
00130 
00131         assert(vector_of_stxxlvectors[0] == vector_of_stxxlvectors[1]);
00132     }
00133     catch (const std::exception & ex)
00134     {
00135         STXXL_MSG("Caught exception: " << ex.what());
00136     }
00137     catch (...)
00138     {
00139         STXXL_MSG("Caught unknown exception.");
00140     }
00141 
00142     return 0;
00143 }

Generated on Thu Jun 4 10:29:29 2009 for Stxxl by  doxygen 1.4.7