/* Copyright (c) 2003-2005 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; version 2 of the License. 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ #include #include #include #undef test struct 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; }; inline void require(bool b){ if(!b) abort(); } template void compare(DataBuffer & db, Buffer & buf){ typename DataBuffer::DataBufferIterator it; db.first(it); for(Uint32 i = 0; i void test(Uint32 loops, Uint32 iter){ ndbout_c("DataBuffer<%d> loops=%d iter=%d", sz, loops, iter); while(loops-- > 0){ Uint32 size = sz*((10 + (rand() % (10 * sz)) + sz - 1)/sz); typename DataBuffer::DataBufferPool thePool; typename DataBuffer::DataBufferIterator it; DataBuffer db(thePool); thePool.setSize((size + sz - 1) / sz); Buffer buf(size); bool testOverRun = true; for(Uint32 i = 0; i= 1 && c <= 3) c += 3; } if(free <= 1) alloc = 1; else alloc = 1 + (rand() % (free - 1)); //ndbout_c("iter=%d case=%d free=%d alloc=%d", i, c, free, alloc); switch(c){ case 0: // Release db.first(it); for(; !it.curr.isNull(); db.next(it)) * it.data = 0; db.release(); buf.m_len = 0; break; case 1:{ // Append (success) for(Uint32 i = 0; i(1000, 1000); test<11>(1000, 1000); test<15>(1000, 1000); test<16>(1000, 1000); test<17>(1000, 1000); #if 0 #endif return 0; } void ErrorReporter::handleAssert(const char * msg, const char * file, int line) { ndbout << "ErrorReporter::handleAssert activated - " << " line= " << line << endl; abort(); }