http://stxxl.sourceforge.net
<dementiev@mpi-sb.mpg.de>
http://www.boost.org/LICENSE_1_0.txt
#include <stxxl/stack>
const unsigned critical_size = 8 * 4096;
template class stxxl::STACK_GENERATOR<int, stxxl::migrating, stxxl::normal, 4, 4096, std::stack<int>, critical_size>;
int main()
{
typedef stxxl::STACK_GENERATOR<int, stxxl::migrating, stxxl::normal, 4, 4096, std::stack<int>, critical_size>::result migrating_stack_type;
STXXL_MSG("Starting test.");
migrating_stack_type my_stack;
int test_size = 1 * 1024 * 1024 / sizeof(int), i;
STXXL_MSG("Filling stack.");
for (i = 0; i < test_size; i++)
{
my_stack.push(i);
STXXL_CHECK(my_stack.top() == i);
STXXL_CHECK(my_stack.size() == i + 1);
STXXL_CHECK((my_stack.size() >= critical_size) == my_stack.external());
}
STXXL_MSG("Testing swap.");
migrating_stack_type my_stack2;
std::swap(my_stack2, my_stack);
std::swap(my_stack2, my_stack);
STXXL_MSG("Removing elements from " <<
(my_stack.external() ? "external" : "internal") << " stack");
for (i = test_size - 1; i >= 0; i--)
{
STXXL_CHECK(my_stack.top() == i);
STXXL_CHECK(my_stack.size() == i + 1);
my_stack.pop();
STXXL_CHECK(my_stack.size() == i);
STXXL_CHECK(my_stack.external() == (test_size >= int(critical_size)));
}
STXXL_MSG("Test passed.");
return 0;
}