llbuffer_tut.cpp

Go to the documentation of this file.
00001 
00034 #include <tut/tut.h>
00035 #include "linden_common.h"
00036 #include "lltut.h"
00037 #include "llbuffer.h"
00038 #include "llerror.h"
00039 #include "llmemtype.h"
00040 
00041 
00042 namespace tut
00043 {
00044         struct buffer
00045         {
00046         };
00047 
00048         typedef test_group<buffer> buffer_t;
00049         typedef buffer_t::object buffer_object_t;
00050         tut::buffer_t tut_buffer("buffer");
00051 
00052         template<> template<>
00053         void buffer_object_t::test<1>()
00054         {
00055                 LLChannelDescriptors channelDescriptors;
00056                 ensure("in() and out() functions Failed", (0 == channelDescriptors.in() && 1 == channelDescriptors.out()));
00057         
00058                 S32 val = 50;
00059                 LLChannelDescriptors channelDescriptors1(val);
00060                 ensure("LLChannelDescriptors in() and out() functions Failed", (50 == channelDescriptors1.in() && 51 == channelDescriptors1.out()));
00061         }       
00062         
00063         template<> template<>
00064         void buffer_object_t::test<2>()
00065         {
00066                 LLSegment segment;
00067                 ensure("LLSegment get functions failed", (0 == segment.getChannel() && NULL == segment.data() && 0 == segment.size()));
00068                 segment.setChannel(50);
00069                 ensure_equals("LLSegment setChannel() function failed", segment.getChannel(), 50);
00070                 ensure("LLSegment isOnChannel() function failed", (TRUE == segment.isOnChannel(50)));
00071         }       
00072 
00073         template<> template<>
00074         void buffer_object_t::test<3>()
00075         {
00076                 S32 channel = 30;
00077                 const char str[] = "SecondLife";
00078                 S32 len = sizeof(str);
00079                 LLSegment segment(channel, (U8*)str, len);
00080                 ensure("LLSegment get functions failed", (30 == segment.getChannel() && len == segment.size() && (U8*)str == segment.data()));
00081                 ensure_memory_matches("LLSegment::data() failed",  segment.data(), segment.size(), (U8*)str, len);
00082                 ensure("LLSegment isOnChannel() function failed", (TRUE == segment.isOnChannel(channel)));
00083         }        
00084         
00085         template<> template<>
00086         void buffer_object_t::test<4>()
00087         {
00088                 S32 channel = 50;
00089                 S32 bigSize = 16384*2;
00090                 char str[] = "SecondLife";
00091                 S32 smallSize = sizeof(str);
00092 
00093                 LLSegment segment;
00094                 LLHeapBuffer buf; // use default size of DEFAULT_HEAP_BUFFER_SIZE = 16384
00095 
00096                 S32 requestSize;
00097 
00098                 requestSize = 16384-1;
00099                 ensure("1. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
00100                 // second request for remainign 1 byte
00101 
00102                 requestSize = 1;
00103                 ensure("2. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
00104 
00105                 // it should fail now.
00106                 requestSize = 1;
00107                 ensure("3. LLHeapBuffer createSegment failed", (FALSE == buf.createSegment(channel, requestSize, segment)));
00108 
00109                 LLHeapBuffer buf1(bigSize);
00110 
00111                 // requst for more than default size but less than total sizeit should fail now.
00112                 requestSize = 16384 + 1;
00113                 ensure("4. LLHeapBuffer createSegment failed", (TRUE == buf1.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
00114 
00115                 LLHeapBuffer buf2((U8*) str, smallSize);
00116                 requestSize = smallSize;
00117                 ensure("5. LLHeapBuffer createSegment failed", (TRUE == buf2.createSegment(channel, requestSize, segment)) && segment.size() == requestSize && memcmp(segment.data(), (U8*) str, requestSize) == 0);
00118                 requestSize = smallSize+1;
00119                 ensure("6. LLHeapBuffer createSegment failed", (FALSE == buf2.createSegment(channel, requestSize, segment)));
00120         }       
00121 
00122         //makeChannelConsumer()
00123         template<> template<>
00124         void buffer_object_t::test<5>()
00125         {
00126                 LLChannelDescriptors inchannelDescriptors(20);
00127                 LLChannelDescriptors outchannelDescriptors = LLBufferArray::makeChannelConsumer(inchannelDescriptors);  
00128                 ensure("LLBufferArray::makeChannelConsumer() function Failed", (21 == outchannelDescriptors.in()));
00129         }
00130 
00131         template<> template<>
00132         void buffer_object_t::test<6>()
00133         {
00134                 LLBufferArray bufferArray;
00135                 const char array[] = "SecondLife";
00136                 S32 len = strlen(array);
00137                 LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
00138                 bufferArray.append(channelDescriptors.in(), (U8*)array, len);
00139                 S32 count = bufferArray.countAfter(channelDescriptors.in(), NULL);
00140                 ensure_equals("Appended size is:", count, len);
00141         }
00142 
00143         //append() and prepend()
00144         template<> template<>
00145         void buffer_object_t::test<7>()
00146         {
00147                 LLBufferArray bufferArray;
00148                 const char array[] = "SecondLife";
00149                 S32 len = strlen(array);
00150                 const char array1[] = "LindenLabs";
00151                 S32 len1 = strlen(array1);
00152                 
00153                 std::string str(array1);
00154                 str.append(array);
00155                 
00156                 LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
00157                 bufferArray.append(channelDescriptors.in(), (U8*)array, len);
00158                 bufferArray.prepend(channelDescriptors.in(), (U8*)array1, len1);
00159                 char buf[100];
00160                 S32 len2 = 20;
00161                 bufferArray.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);
00162                 ensure_equals("readAfter length failed", len2, 20);
00163                 
00164                 buf[len2] = '\0';
00165                 ensure_equals("readAfter/prepend/append failed", buf, str);
00166         }
00167 
00168         //append()
00169         template<> template<>
00170         void buffer_object_t::test<8>()
00171         {
00172                 LLBufferArray bufferArray;
00173                 const char array[] = "SecondLife";
00174                 S32 len = strlen(array);
00175                 const char array1[] = "LindenLabs";
00176                 S32 len1 = strlen(array1);
00177                 
00178                 std::string str(array);
00179                 str.append(array1);
00180                 
00181                 LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
00182                 bufferArray.append(channelDescriptors.in(), (U8*)array, len);           
00183                 bufferArray.append(channelDescriptors.in(), (U8*)array1, len1);
00184                 char buf[100];
00185                 S32 len2 = 20;
00186                 bufferArray.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);
00187                 ensure_equals("readAfter length failed", len2, 20);
00188                 
00189                 buf[len2] = '\0';
00190                 ensure_equals("readAfter/append/append failed", buf, str);
00191         }
00192 
00193         template<> template<>
00194         void buffer_object_t::test<9>()
00195         {
00196                 LLBufferArray bufferArray;
00197                 const char array[] = "SecondLife";
00198                 S32 len = strlen(array) + 1;
00199                 std::string str(array);
00200                 LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
00201                 bufferArray.append(channelDescriptors.in(), (U8*)array, len);
00202                 LLBufferArray bufferArray1;
00203                 ensure("Contents are not copied and the source buffer is not empty", (1 == bufferArray1.takeContents(bufferArray)));
00204                 
00205                 char buf[100];
00206                 S32 len2 = len;
00207                 bufferArray1.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);  
00208                 ensure_equals("takeContents failed to copy", buf, str);
00209         }
00210 
00211         //seek()
00212         template<> template<>
00213         void buffer_object_t::test<10>()
00214         {
00215                 const char array[] = "SecondLife is a Virtual World";
00216                 S32 len = strlen(array);
00217                 LLBufferArray bufferArray;
00218                 bufferArray.append(0, (U8*)array, len);
00219                 
00220                 char buf[255];
00221                 S32 len1 = 16;
00222                 U8* last = bufferArray.readAfter(0, 0, (U8*)buf, len1);
00223                 buf[len1] = '\0';
00224                 last = bufferArray.seek(0, last, -2);
00225 
00226                 len1 = 15;
00227                 last = bufferArray.readAfter(0, last, (U8*)buf, len1);
00228                 buf[len1] = '\0';
00229                 std::string str(buf);
00230                 ensure_equals("Seek does'nt worked", str, std::string("a Virtual World"));
00231         }
00232 
00233         template<> template<>
00234         void buffer_object_t::test<11>()
00235         {
00236                 const char array[] = "SecondLife is a Virtual World";
00237                 S32 len = strlen(array);
00238                 LLBufferArray bufferArray;
00239                 bufferArray.append(0, (U8*)array, len);
00240                 
00241                 char buf[255];
00242                 S32 len1 = 10;
00243                 U8* last = bufferArray.readAfter(0, 0, (U8*)buf, len1);
00244                 bufferArray.splitAfter(last);
00245                 LLBufferArray::segment_iterator_t iterator = bufferArray.beginSegment();
00246                 ++iterator;
00247                 std::string str(((char*)(*iterator).data()), (*iterator).size());
00248                 ensure_equals("Strings are not equal;splitAfter() operation failed", str, std::string(" is a Virtual World"));
00249         }
00250 
00251         //makeSegment()->eraseSegment()
00252         template<> template<>
00253         void buffer_object_t::test<12>()
00254         {
00255                 LLBufferArray bufferArray;
00256                 LLChannelDescriptors channelDescriptors;
00257                 LLBufferArray::segment_iterator_t it;
00258                 S32 length = 1000;
00259                 it = bufferArray.makeSegment(channelDescriptors.out(), length);
00260                 ensure("makeSegment() function failed", (it != bufferArray.endSegment()));
00261                 ensure("eraseSegment() function failed", bufferArray.eraseSegment(it));
00262                 ensure("eraseSegment() begin/end should now be same", bufferArray.beginSegment() == bufferArray.endSegment());
00263         }
00264 
00265         // constructSegmentAfter()
00266         template<> template<>
00267         void buffer_object_t::test<13>()
00268         {
00269                 LLBufferArray bufferArray;
00270                 LLBufferArray::segment_iterator_t it;
00271                 LLSegment segment;
00272                 LLBufferArray::segment_iterator_t end = bufferArray.endSegment();
00273                 it = bufferArray.constructSegmentAfter(NULL, segment);
00274                 ensure("constructSegmentAfter() function failed", (it == end));
00275         }
00276 }

Generated on Thu Jul 1 06:08:19 2010 for Second Life Viewer by  doxygen 1.4.7