-
Janik Zikovsky authoredJanik Zikovsky authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
FreeBlockTest.h 1.96 KiB
#ifndef MANTID_API_FREEBLOCKTEST_H_
#define MANTID_API_FREEBLOCKTEST_H_
#include "MantidKernel/FreeBlock.h"
#include "MantidKernel/System.h"
#include "MantidKernel/Timer.h"
#include <cxxtest/TestSuite.h>
#include <iomanip>
#include <iostream>
using namespace Mantid;
using namespace Mantid::Kernel;
class FreeBlockTest : public CxxTest::TestSuite
{
public:
void test_constructor()
{
FreeBlock b;
TS_ASSERT_EQUALS( b.getFilePosition(), 0 );
TS_ASSERT_EQUALS( b.getSize(), 0 );
FreeBlock b2(123,456);
TS_ASSERT_EQUALS( b2.getFilePosition(), 123 );
TS_ASSERT_EQUALS( b2.getSize(), 456 );
FreeBlock b3(b2);
TS_ASSERT_EQUALS( b3.getFilePosition(), 123 );
TS_ASSERT_EQUALS( b3.getSize(), 456 );
}
void test_assignment()
{
FreeBlock b2(123,456);
FreeBlock b3;
b3 = b2;
TS_ASSERT_EQUALS( b3.getFilePosition(), 123 );
TS_ASSERT_EQUALS( b3.getSize(), 456 );
}
void test_merge()
{
FreeBlock b1(100, 100);
FreeBlock b2(200, 500);
// Merge that succeeds
TS_ASSERT( FreeBlock::merge(b1, b2) );
TS_ASSERT_EQUALS( b1.getFilePosition(), 100 );
TS_ASSERT_EQUALS( b1.getSize(), 600 );
// Merge that fails
FreeBlock b3(100, 100);
FreeBlock b4(201, 100);
TS_ASSERT( !FreeBlock::merge(b3, b4) );
TS_ASSERT_EQUALS( b3.getFilePosition(), 100 );
TS_ASSERT_EQUALS( b3.getSize(), 100 );
}
};
class FreeBlockTestPerformance : public CxxTest::TestSuite
{
public:
std::vector<FreeBlock> blocks;
size_t num;
void setUp()
{
num = 1000000;
// Make a list where 1/3 of the blocks are adjacent
for (size_t i=0; i<num; i++)
blocks.push_back( FreeBlock(i*10, (i%3==0) ? 10 : 7) );
}
void test_merge()
{
// Merge by going backwards through the list.
for (size_t i=num-1; i>0; i--)
FreeBlock::merge(blocks[i-1], blocks[i]);
// The first block is merged into size 17
TS_ASSERT_EQUALS( blocks[0].getSize(), 17);
}
};
#endif /* MANTID_API_FREEBLOCKTEST_H_ */