#!/usr/bin/env python # vim: set fileencoding=utf-8 # bsl_test_auto_buffer.h generator HEADER = """ #ifndef __BSL_TEST_AUTO_BUFFER_H_ #define __BSL_TEST_AUTO_BUFFER_H_ #include #include #include #include #include #define see(x) do{ \ std::cerr<<__FILE__<<":"<<__LINE__<<": " <<(#x)<<" = "<<(x)<<" ("<= buf.size() ); TS_ASSERT( 0 == strcmp( buf.c_str(), result ) ); TS_ASSERT( !buf.truncated() ); if ( buf.size() != 0 ){ TS_ASSERT( !buf.empty() ); }else{ TS_ASSERT( buf.empty() ); } if ( buf.size() != buf.capacity() ){ TS_ASSERT( !buf.full() ); }else{ TS_ASSERT( buf.full() ); } size_t old_capacity = buf.capacity(); buf.clear(); TS_ASSERT( buf.size() == 0 ); TS_ASSERT( old_capacity == buf.capacity() ); TS_ASSERT( buf.empty() ); if ( old_capacity ){ TS_ASSERT( !buf.full() ); } } """ TEST_TEMPLATE2 = """ void test_single_%(func_name)s(){ // init pool bsl::xcompool g_xcompool; g_xcompool.create(); bsl::AutoBuffer buf(g_xcompool,%(buf_size)d); TS_ASSERT( buf.empty() ); TS_ASSERT( !buf.truncated() ); if ( %(buf_size)d != 0 ){ TS_ASSERT( !buf.full() ); }else{ TS_ASSERT( buf.full() ); } %(operation)s if ( 0 != strcmp( result, buf.c_str() ) ){ see(buf.capacity()); see(buf.size()); see(strlen(result)); see(buf.c_str()); see(result); } TS_ASSERT( buf.size() == strlen(result) ); TS_ASSERT( buf.capacity() >= buf.size() ); TS_ASSERT( 0 == strcmp( buf.c_str(), result ) ); TS_ASSERT( !buf.truncated() ); if ( buf.size() != 0 ){ TS_ASSERT( !buf.empty() ); }else{ TS_ASSERT( buf.empty() ); } if ( buf.size() != buf.capacity() ){ TS_ASSERT( !buf.full() ); }else{ TS_ASSERT( buf.full() ); } size_t old_capacity = buf.capacity(); buf.clear(); TS_ASSERT( buf.size() == 0 ); TS_ASSERT( old_capacity == buf.capacity() ); TS_ASSERT( buf.empty() ); if ( old_capacity ){ TS_ASSERT( !buf.full() ); } } """ TEST_TEMPLATE3 = """ void test_single_%(func_name)s(){ // init pool g_xmempool.create(g_membuf,sizeof(g_membuf)); bsl::AutoBuffer buf(g_xmempool,%(buf_size)d); TS_ASSERT( buf.empty() ); TS_ASSERT( !buf.truncated() ); if ( %(buf_size)d != 0 ){ TS_ASSERT( !buf.full() ); }else{ TS_ASSERT( buf.full() ); } %(operation)s if ( 0 != strcmp( result, buf.c_str() ) ){ see(buf.capacity()); see(buf.size()); see(strlen(result)); see(buf.c_str()); see(result); } TS_ASSERT( buf.size() == strlen(result) ); TS_ASSERT( buf.capacity() >= buf.size() ); TS_ASSERT( 0 == strcmp( buf.c_str(), result ) ); TS_ASSERT( !buf.truncated() ); if ( buf.size() != 0 ){ TS_ASSERT( !buf.empty() ); }else{ TS_ASSERT( buf.empty() ); } if ( buf.size() != buf.capacity() ){ TS_ASSERT( !buf.full() ); }else{ TS_ASSERT( buf.full() ); } size_t old_capacity = buf.capacity(); buf.clear(); TS_ASSERT( buf.size() == 0 ); TS_ASSERT( old_capacity == buf.capacity() ); TS_ASSERT( buf.empty() ); if ( old_capacity ){ TS_ASSERT( !buf.full() ); } g_xmempool.clear(); } """ OPERATION_TEMPLATES = [ """ %(type)s value = %(literal)s; buf.push(value); const char * result = "%(string)s"; """, """ %(type)s value = %(literal)s; buf< 2 and data[2] or data[1] for operation_tmpl in OPERATION_TEMPLATES: operation = operation_tmpl % vars() func_name = id_iter.next() print TEST_TEMPLATE % vars() for operation in SPECIAL_OPERATIONS: func_name = id_iter.next() print TEST_TEMPLATE % vars() for buf_size in [0, 1, 100]: for data in TEST_DATA: type, literal, string = data[0], data[1], len(data) > 2 and data[2] or data[1] for operation_tmpl in OPERATION_TEMPLATES: operation = operation_tmpl % vars() func_name = id_iter.next() print TEST_TEMPLATE2 % vars() for operation in SPECIAL_OPERATIONS: func_name = id_iter.next() print TEST_TEMPLATE2 % vars() for buf_size in [0, 1, 100]: for data in TEST_DATA: type, literal, string = data[0], data[1], len(data) > 2 and data[2] or data[1] for operation_tmpl in OPERATION_TEMPLATES: operation = operation_tmpl % vars() func_name = id_iter.next() print TEST_TEMPLATE3 % vars() for operation in SPECIAL_OPERATIONS: func_name = id_iter.next() print TEST_TEMPLATE3 % vars() print FOOTER