test.cpp
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:4k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. #include <ndb_global.h>
  14. #include <NdbTick.h>
  15. #include <TransporterDefinitions.hpp>
  16. #include <SimpleProperties.hpp>
  17. #include <LongSignal.hpp>
  18. #undef test
  19. struct Buffer {
  20.   Buffer(Uint32 size){ m_sz = size; buffer = new Uint32[m_sz]; m_len = 0;}
  21.   ~Buffer(){ delete [] buffer;}
  22.   
  23.   Uint32 m_sz;
  24.   Uint32 m_len;
  25.   Uint32 * buffer;
  26. };
  27. inline
  28. void 
  29. require(bool b){
  30.   if(!b)
  31.     abort();
  32. }
  33. #define relSz(x) ((x + SectionSegment::DataLength - 1) / SectionSegment::DataLength)
  34. void
  35. release(SectionSegmentPool & thePool, SegmentedSectionPtr & ptr){
  36.   const Uint32 sz = relSz(ptr.sz);
  37.   thePool.releaseList(sz,
  38.       ptr.i, 
  39.       ptr.p->m_lastSegment);
  40. }
  41. void
  42. compare(SimplePropertiesSectionReader & db, Buffer & buf){
  43.   {
  44.     bool fail = false;
  45.     db.reset();
  46.     for(Uint32 i = 0; i<buf.m_len; i++){
  47.       Uint32 tmp;
  48.       if(!db.getWord(&tmp)){
  49. ndbout_c("getWord(...) failed i=%d size=%d", i, buf.m_len);
  50. abort();
  51.       }
  52.       
  53.       if(tmp != buf.buffer[i]){
  54. ndbout_c("getWord(...)=%d != buf[%d]=%d size=%d", tmp, i, 
  55.  buf.buffer[i], buf.m_len);
  56. fail = true;
  57.       }
  58.     }
  59.     require(!fail);
  60.   }
  61.   {
  62.     db.reset();
  63.     Buffer buf2(buf.m_sz);
  64.     if(!db.getWords(buf2.buffer, buf.m_len))
  65.       abort();
  66.     
  67.     bool fail = false;
  68.     for(Uint32 i = 0; i<buf.m_len; i++){
  69.       if(buf.buffer[i] != buf2.buffer[i]){
  70. ndbout_c("getWords(...) buf[%d] != buf2[%d] size=%d", i, i, buf.m_len);
  71. fail = true;
  72.       }
  73.     }
  74.     require(!fail);
  75.   }
  76. }
  77. void
  78. test(Uint32 sz, Uint32 loops, Uint32 iter){
  79.   ndbout_c("SimplePropertiesSection sz=%d loops=%d iter=%d", sz, loops, iter);
  80.   
  81.   while(loops-- > 0){
  82.     Uint32 size = sz*((10 + (rand() % (10 * sz)) + sz - 1)/sz);
  83.     
  84.     Buffer buf(size);
  85.     SectionSegmentPool thePool; thePool.setSize(size);
  86.     for(Uint32 i = 0; i<iter; i++){
  87.       Uint32 c = 0 + (rand() % (2));
  88.       
  89.       const Uint32 alloc = 1 + (rand() % (size - 1));
  90.       SegmentedSectionPtr dst;
  91.       if(0)
  92. ndbout_c("size: %d loops: %d iter: %d c=%d alloc=%d", 
  93.  size, loops, i, c, alloc);
  94.       
  95.       switch(c){ 
  96.       case 0:{
  97. for(Uint32 i = 0; i<alloc; i++)
  98.   buf.buffer[i] = i; //rand();
  99. buf.m_len = alloc;
  100. SimplePropertiesSectionWriter w(thePool);
  101. for(Uint32 i = 0; i<alloc; i++){
  102.   w.putWord(buf.buffer[i]);
  103. }
  104. w.getPtr(dst);
  105. break;
  106.       }
  107.       case 1:{
  108. for(Uint32 i = 0; i<alloc; i++)
  109.   buf.buffer[i] = i; //rand();
  110. buf.m_len = alloc;
  111. SimplePropertiesSectionWriter w(thePool);
  112. Uint32 i = 0;
  113. while(i < alloc){
  114.   Uint32 sz = rand() % (alloc - i + 1);
  115.   w.putWords(&buf.buffer[i], sz);
  116.   i += sz;
  117. }
  118. w.getPtr(dst);
  119. break;
  120.       }
  121.       case 2:{
  122. break;
  123.       }
  124.       }
  125.       SimplePropertiesSectionReader r(dst, thePool);
  126.       compare(r, buf);
  127.       release(thePool, dst);
  128.       require(thePool.getSize() == thePool.getNoOfFree());
  129.     }
  130.   }
  131. }
  132. int
  133. main(void){
  134.   
  135.   srand(NdbTick_CurrentMillisecond());
  136.   //test( 1, 1000, 1000);
  137.   test(54, 1000, 1000);
  138.   test(59, 1000, 1000);
  139.   test(60, 1000, 1000);
  140.   test(61, 1000, 1000);
  141.   return 0;
  142. }
  143. void
  144. ErrorReporter::handleAssert(const char * msg, const char * file, int line)
  145. {
  146.   ndbout << "ErrorReporter::handleAssert activated - " 
  147.  << " line= " << line << endl;
  148.   abort();
  149. }