PageRenderTime 28ms CodeModel.GetById 9ms RepoModel.GetById 0ms app.codeStats 0ms

/indra/test/llbuffer_tut.cpp

https://bitbucket.org/lindenlab/viewer-beta/
C++ | 271 lines | 199 code | 36 blank | 36 comment | 39 complexity | 067626470747fe328013a85a2360c51e MD5 | raw file
Possible License(s): LGPL-2.1
  1. /**
  2. * @file llbuffer_tut.cpp
  3. * @author Adroit
  4. * @date 2007-03
  5. * @brief llbuffer test cases.
  6. *
  7. * $LicenseInfo:firstyear=2007&license=viewerlgpl$
  8. * Second Life Viewer Source Code
  9. * Copyright (C) 2010, Linden Research, Inc.
  10. *
  11. * This library is free software; you can redistribute it and/or
  12. * modify it under the terms of the GNU Lesser General Public
  13. * License as published by the Free Software Foundation;
  14. * version 2.1 of the License only.
  15. *
  16. * This library is distributed in the hope that it will be useful,
  17. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  18. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  19. * Lesser General Public License for more details.
  20. *
  21. * You should have received a copy of the GNU Lesser General Public
  22. * License along with this library; if not, write to the Free Software
  23. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  24. *
  25. * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
  26. * $/LicenseInfo$
  27. */
  28. #include <tut/tut.hpp>
  29. #include "linden_common.h"
  30. #include "lltut.h"
  31. #include "llbuffer.h"
  32. #include "llerror.h"
  33. #include "llmemtype.h"
  34. namespace tut
  35. {
  36. struct buffer
  37. {
  38. };
  39. typedef test_group<buffer> buffer_t;
  40. typedef buffer_t::object buffer_object_t;
  41. tut::buffer_t tut_buffer("buffer");
  42. template<> template<>
  43. void buffer_object_t::test<1>()
  44. {
  45. LLChannelDescriptors channelDescriptors;
  46. ensure("in() and out() functions Failed", (0 == channelDescriptors.in() && 1 == channelDescriptors.out()));
  47. S32 val = 50;
  48. LLChannelDescriptors channelDescriptors1(val);
  49. ensure("LLChannelDescriptors in() and out() functions Failed", (50 == channelDescriptors1.in() && 51 == channelDescriptors1.out()));
  50. }
  51. template<> template<>
  52. void buffer_object_t::test<2>()
  53. {
  54. LLSegment segment;
  55. ensure("LLSegment get functions failed", (0 == segment.getChannel() && NULL == segment.data() && 0 == segment.size()));
  56. segment.setChannel(50);
  57. ensure_equals("LLSegment setChannel() function failed", segment.getChannel(), 50);
  58. ensure("LLSegment isOnChannel() function failed", (TRUE == segment.isOnChannel(50)));
  59. }
  60. template<> template<>
  61. void buffer_object_t::test<3>()
  62. {
  63. S32 channel = 30;
  64. const char str[] = "SecondLife";
  65. S32 len = sizeof(str);
  66. LLSegment segment(channel, (U8*)str, len);
  67. ensure("LLSegment get functions failed", (30 == segment.getChannel() && len == segment.size() && (U8*)str == segment.data()));
  68. ensure_memory_matches("LLSegment::data() failed", segment.data(), segment.size(), (U8*)str, len);
  69. ensure("LLSegment isOnChannel() function failed", (TRUE == segment.isOnChannel(channel)));
  70. }
  71. template<> template<>
  72. void buffer_object_t::test<4>()
  73. {
  74. S32 channel = 50;
  75. S32 bigSize = 16384*2;
  76. char str[] = "SecondLife";
  77. S32 smallSize = sizeof(str);
  78. LLSegment segment;
  79. LLHeapBuffer buf; // use default size of DEFAULT_HEAP_BUFFER_SIZE = 16384
  80. S32 requestSize;
  81. requestSize = 16384-1;
  82. ensure("1. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
  83. // second request for remainign 1 byte
  84. requestSize = 1;
  85. ensure("2. LLHeapBuffer createSegment failed", (TRUE == buf.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
  86. // it should fail now.
  87. requestSize = 1;
  88. ensure("3. LLHeapBuffer createSegment failed", (FALSE == buf.createSegment(channel, requestSize, segment)));
  89. LLHeapBuffer buf1(bigSize);
  90. // requst for more than default size but less than total sizeit should fail now.
  91. requestSize = 16384 + 1;
  92. ensure("4. LLHeapBuffer createSegment failed", (TRUE == buf1.createSegment(channel, requestSize, segment)) && segment.size() == requestSize);
  93. LLHeapBuffer buf2((U8*) str, smallSize);
  94. requestSize = smallSize;
  95. ensure("5. LLHeapBuffer createSegment failed", (TRUE == buf2.createSegment(channel, requestSize, segment)) && segment.size() == requestSize && memcmp(segment.data(), (U8*) str, requestSize) == 0);
  96. requestSize = smallSize+1;
  97. ensure("6. LLHeapBuffer createSegment failed", (FALSE == buf2.createSegment(channel, requestSize, segment)));
  98. }
  99. //makeChannelConsumer()
  100. template<> template<>
  101. void buffer_object_t::test<5>()
  102. {
  103. LLChannelDescriptors inchannelDescriptors(20);
  104. LLChannelDescriptors outchannelDescriptors = LLBufferArray::makeChannelConsumer(inchannelDescriptors);
  105. ensure("LLBufferArray::makeChannelConsumer() function Failed", (21 == outchannelDescriptors.in()));
  106. }
  107. template<> template<>
  108. void buffer_object_t::test<6>()
  109. {
  110. LLBufferArray bufferArray;
  111. const char array[] = "SecondLife";
  112. S32 len = strlen(array);
  113. LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
  114. bufferArray.append(channelDescriptors.in(), (U8*)array, len);
  115. S32 count = bufferArray.countAfter(channelDescriptors.in(), NULL);
  116. ensure_equals("Appended size is:", count, len);
  117. }
  118. //append() and prepend()
  119. template<> template<>
  120. void buffer_object_t::test<7>()
  121. {
  122. LLBufferArray bufferArray;
  123. const char array[] = "SecondLife";
  124. S32 len = strlen(array);
  125. const char array1[] = "LindenLabs";
  126. S32 len1 = strlen(array1);
  127. std::string str(array1);
  128. str.append(array);
  129. LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
  130. bufferArray.append(channelDescriptors.in(), (U8*)array, len);
  131. bufferArray.prepend(channelDescriptors.in(), (U8*)array1, len1);
  132. char buf[100];
  133. S32 len2 = 20;
  134. bufferArray.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);
  135. ensure_equals("readAfter length failed", len2, 20);
  136. buf[len2] = '\0';
  137. ensure_equals("readAfter/prepend/append failed", buf, str);
  138. }
  139. //append()
  140. template<> template<>
  141. void buffer_object_t::test<8>()
  142. {
  143. LLBufferArray bufferArray;
  144. const char array[] = "SecondLife";
  145. S32 len = strlen(array);
  146. const char array1[] = "LindenLabs";
  147. S32 len1 = strlen(array1);
  148. std::string str(array);
  149. str.append(array1);
  150. LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
  151. bufferArray.append(channelDescriptors.in(), (U8*)array, len);
  152. bufferArray.append(channelDescriptors.in(), (U8*)array1, len1);
  153. char buf[100];
  154. S32 len2 = 20;
  155. bufferArray.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);
  156. ensure_equals("readAfter length failed", len2, 20);
  157. buf[len2] = '\0';
  158. ensure_equals("readAfter/append/append failed", buf, str);
  159. }
  160. template<> template<>
  161. void buffer_object_t::test<9>()
  162. {
  163. LLBufferArray bufferArray;
  164. const char array[] = "SecondLife";
  165. S32 len = strlen(array) + 1;
  166. std::string str(array);
  167. LLChannelDescriptors channelDescriptors = bufferArray.nextChannel();
  168. bufferArray.append(channelDescriptors.in(), (U8*)array, len);
  169. LLBufferArray bufferArray1;
  170. ensure("Contents are not copied and the source buffer is not empty", (1 == bufferArray1.takeContents(bufferArray)));
  171. char buf[100];
  172. S32 len2 = len;
  173. bufferArray1.readAfter(channelDescriptors.in(), NULL, (U8*)buf, len2);
  174. ensure_equals("takeContents failed to copy", buf, str);
  175. }
  176. //seek()
  177. template<> template<>
  178. void buffer_object_t::test<10>()
  179. {
  180. const char array[] = "SecondLife is a Virtual World";
  181. S32 len = strlen(array);
  182. LLBufferArray bufferArray;
  183. bufferArray.append(0, (U8*)array, len);
  184. char buf[255];
  185. S32 len1 = 16;
  186. U8* last = bufferArray.readAfter(0, 0, (U8*)buf, len1);
  187. buf[len1] = '\0';
  188. last = bufferArray.seek(0, last, -2);
  189. len1 = 15;
  190. last = bufferArray.readAfter(0, last, (U8*)buf, len1);
  191. buf[len1] = '\0';
  192. std::string str(buf);
  193. ensure_equals("Seek does'nt worked", str, std::string("a Virtual World"));
  194. }
  195. template<> template<>
  196. void buffer_object_t::test<11>()
  197. {
  198. const char array[] = "SecondLife is a Virtual World";
  199. S32 len = strlen(array);
  200. LLBufferArray bufferArray;
  201. bufferArray.append(0, (U8*)array, len);
  202. char buf[255];
  203. S32 len1 = 10;
  204. U8* last = bufferArray.readAfter(0, 0, (U8*)buf, len1);
  205. bufferArray.splitAfter(last);
  206. LLBufferArray::segment_iterator_t iterator = bufferArray.beginSegment();
  207. ++iterator;
  208. std::string str(((char*)(*iterator).data()), (*iterator).size());
  209. ensure_equals("Strings are not equal;splitAfter() operation failed", str, std::string(" is a Virtual World"));
  210. }
  211. //makeSegment()->eraseSegment()
  212. template<> template<>
  213. void buffer_object_t::test<12>()
  214. {
  215. LLBufferArray bufferArray;
  216. LLChannelDescriptors channelDescriptors;
  217. LLBufferArray::segment_iterator_t it;
  218. S32 length = 1000;
  219. it = bufferArray.makeSegment(channelDescriptors.out(), length);
  220. ensure("makeSegment() function failed", (it != bufferArray.endSegment()));
  221. ensure("eraseSegment() function failed", bufferArray.eraseSegment(it));
  222. ensure("eraseSegment() begin/end should now be same", bufferArray.beginSegment() == bufferArray.endSegment());
  223. }
  224. // constructSegmentAfter()
  225. template<> template<>
  226. void buffer_object_t::test<13>()
  227. {
  228. LLBufferArray bufferArray;
  229. LLBufferArray::segment_iterator_t it;
  230. LLSegment segment;
  231. LLBufferArray::segment_iterator_t end = bufferArray.endSegment();
  232. it = bufferArray.constructSegmentAfter(NULL, segment);
  233. ensure("constructSegmentAfter() function failed", (it == end));
  234. }
  235. }