00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
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
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
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
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
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
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
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
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 }