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;
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
00101
00102 requestSize = 1;
00103 ensure("2. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
00104
00105
00106 requestSize = 1;
00107 ensure("3. LLHeapBuffer createSegment failed", (FALSE == buf.createSegment(channel, requestSize, segment)));
00108
00109 LLHeapBuffer buf1(bigSize);
00110
00111
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
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
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
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
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
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
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 }