blob: b73acb269a54f79d5a7a8c1e9e943cf8b99ea0a5 [file]
/*------------------------------------------------------------------------------
* Copyright (C) 2003-2006 Ben van Klinken and the CLucene Team
*
* Distributable under the terms of either the Apache License (Version 2.0) or
* the GNU Lesser General Public License, as specified in the COPYING file.
------------------------------------------------------------------------------*/
#include "test.h"
#include "CLucene/store/Directory.h"
#include "CLucene/store/IndexInput.h"
#include <stdlib.h>
void StoreTest(CuTest *tc,int32_t count, int mode){
srand(1251971);
int32_t i;
uint64_t veryStart = Misc::currentTimeMillis();
uint64_t start = Misc::currentTimeMillis();
char fsdir[CL_MAX_PATH];
_snprintf(fsdir, CL_MAX_PATH, "%s/%s",cl_tempDir, "test.store");
Directory* store = NULL;
if ( mode == 1 )
store = _CLNEW RAMDirectory();
else{
store = (Directory*)FSDirectory::getDirectory(fsdir);
((FSDirectory*)store)->setUseMMap(mode == 3);
}
int32_t LENGTH_MASK = 0xFFF;
char name[260];
for (i = 0; i < count; i++) {
_snprintf(name,260,"%d.dat",i);
int32_t length = rand() & LENGTH_MASK;
uint8_t b = (uint8_t)(rand() & 0x7F);
IndexOutput* file = store->createOutput(name);
for (int32_t j = 0; j < length; j++)
file->writeByte(b);
file->close();
_CLDELETE(file);
}
CuMessageA(tc, "%d total milliseconds to create\n", (int32_t)(Misc::currentTimeMillis() - start));
if (mode != 1){
store->close();
_CLDECDELETE(store);
store = (Directory*)FSDirectory::getDirectory(fsdir);
}else{
CuMessageA(tc, "Memory used at end: %l", ((RAMDirectory*)store)->sizeInBytes);
}
srand(1251971);
start = Misc::currentTimeMillis();
for (i = 0; i < count; i++) {
_snprintf(name,260,"%d.dat",i);
size_t length = rand() & LENGTH_MASK;
uint8_t b = (uint8_t)(rand() & 0x7F);
IndexInput* file = store->openInput(name);
if (file->length() != length)
_CLTHROWA(CL_ERR_Runtime, "length incorrect" );
for (size_t j = 0; j < length; j++){
if (file->readByte() != b){
TCHAR buf[100];
_tprintf(buf,_T("contents incorrect in file %d.dat"),i);
_CLTHROWT(CL_ERR_Runtime, buf);
}
}
file->close();
_CLDELETE(file);
}
CuMessageA(tc,"%d total milliseconds to read\n", (int32_t)(Misc::currentTimeMillis() - start));
srand(1251971);
start = Misc::currentTimeMillis();
for (i = 0; i < count; i++) {
_snprintf(name,260,"%d.dat",i);
store->deleteFile(name);
}
CuMessageA(tc, "%d total milliseconds to delete\n",(int32_t)(Misc::currentTimeMillis() - start));
CuMessageA(tc, "%d total milliseconds \n", (int32_t)(Misc::currentTimeMillis() - veryStart));
//test makeLock::toString
CL_NS(store)::LuceneLock* lf = store->makeLock("testlock");
std::string ts = lf->toString();
CLUCENE_ASSERT( ts.compare("fail") != 0 );
_CLDELETE(lf);
store->close();
_CLDECDELETE(store);
}
void ramtest(CuTest *tc){
StoreTest(tc,1000,1);
}
void fstest(CuTest *tc){
StoreTest(tc,100,2);
}
void mmaptest(CuTest *tc){
StoreTest(tc,100,3);
}
CuSuite *teststore(void)
{
CuSuite *suite = CuSuiteNew(_T("CLucene Store Test"));
SUITE_ADD_TEST(suite, ramtest);
SUITE_ADD_TEST(suite, fstest);
SUITE_ADD_TEST(suite, mmaptest);
return suite;
}
// EOF