test.cpp

来自「MySQL数据库开发源码 值得一看哦」· C++ 代码 · 共 172 行

CPP
172
字号
/* Copyright (C) 2003 MySQL AB   This program is free software; you can redistribute it and/or modify   it under the terms of the GNU General Public License as published by   the Free Software Foundation; either version 2 of the License, or   (at your option) any later version.   This program is distributed in the hope that it will be useful,   but WITHOUT ANY WARRANTY; without even the implied warranty of   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the   GNU General Public License for more details.   You should have received a copy of the GNU General Public License   along with this program; if not, write to the Free Software   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include <ndb_global.h>#include <NdbTick.h>#include <TransporterDefinitions.hpp>#include <SimpleProperties.hpp>#include <LongSignal.hpp>#undef teststruct Buffer {  Buffer(Uint32 size){ m_sz = size; buffer = new Uint32[m_sz]; m_len = 0;}  ~Buffer(){ delete [] buffer;}    Uint32 m_sz;  Uint32 m_len;  Uint32 * buffer;};inlinevoid require(bool b){  if(!b)    abort();}#define relSz(x) ((x + SectionSegment::DataLength - 1) / SectionSegment::DataLength)voidrelease(SectionSegmentPool & thePool, SegmentedSectionPtr & ptr){  const Uint32 sz = relSz(ptr.sz);  thePool.releaseList(sz,		      ptr.i, 		      ptr.p->m_lastSegment);}voidcompare(SimplePropertiesSectionReader & db, Buffer & buf){  {    bool fail = false;    db.reset();    for(Uint32 i = 0; i<buf.m_len; i++){      Uint32 tmp;      if(!db.getWord(&tmp)){	ndbout_c("getWord(...) failed i=%d size=%d", i, buf.m_len);	abort();      }            if(tmp != buf.buffer[i]){	ndbout_c("getWord(...)=%d != buf[%d]=%d size=%d", tmp, i, 		 buf.buffer[i], buf.m_len);	fail = true;      }    }    require(!fail);  }  {    db.reset();    Buffer buf2(buf.m_sz);    if(!db.getWords(buf2.buffer, buf.m_len))      abort();        bool fail = false;    for(Uint32 i = 0; i<buf.m_len; i++){      if(buf.buffer[i] != buf2.buffer[i]){	ndbout_c("getWords(...) buf[%d] != buf2[%d] size=%d", i, i, buf.m_len);	fail = true;      }    }    require(!fail);  }}voidtest(Uint32 sz, Uint32 loops, Uint32 iter){  ndbout_c("SimplePropertiesSection sz=%d loops=%d iter=%d", sz, loops, iter);    while(loops-- > 0){    Uint32 size = sz*((10 + (rand() % (10 * sz)) + sz - 1)/sz);        Buffer buf(size);    SectionSegmentPool thePool; thePool.setSize(size);    for(Uint32 i = 0; i<iter; i++){      Uint32 c = 0 + (rand() % (2));            const Uint32 alloc = 1 + (rand() % (size - 1));      SegmentedSectionPtr dst;      if(0)	ndbout_c("size: %d loops: %d iter: %d c=%d alloc=%d", 		 size, loops, i, c, alloc);            switch(c){       case 0:{	for(Uint32 i = 0; i<alloc; i++)	  buf.buffer[i] = i; //rand();	buf.m_len = alloc;		SimplePropertiesSectionWriter w(thePool);	for(Uint32 i = 0; i<alloc; i++){	  w.putWord(buf.buffer[i]);	}	w.getPtr(dst);	break;      }      case 1:{	for(Uint32 i = 0; i<alloc; i++)	  buf.buffer[i] = i; //rand();	buf.m_len = alloc;		SimplePropertiesSectionWriter w(thePool);	Uint32 i = 0;	while(i < alloc){	  Uint32 sz = rand() % (alloc - i + 1);	  w.putWords(&buf.buffer[i], sz);	  i += sz;	}	w.getPtr(dst);	break;      }      case 2:{	break;      }      }      SimplePropertiesSectionReader r(dst, thePool);      compare(r, buf);      release(thePool, dst);      require(thePool.getSize() == thePool.getNoOfFree());    }  }}intmain(void){    srand(NdbTick_CurrentMillisecond());  //test( 1, 1000, 1000);  test(54, 1000, 1000);  test(59, 1000, 1000);  test(60, 1000, 1000);  test(61, 1000, 1000);  return 0;}voidErrorReporter::handleAssert(const char * msg, const char * file, int line){  ndbout << "ErrorReporter::handleAssert activated - " 	 << " line= " << line << endl;  abort();}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?