PageRenderTime 364ms CodeModel.GetById 348ms RepoModel.GetById 1ms app.codeStats 0ms

/indra/test/lldatapacker_tut.cpp

https://bitbucket.org/lindenlab/viewer-beta/
C++ | 570 lines | 482 code | 58 blank | 30 comment | 26 complexity | 3c82e7e8e006ebe3d510b493c87644ed MD5 | raw file
Possible License(s): LGPL-2.1
  1. /**
  2. * @file lldatapacker_tut.cpp
  3. * @author Adroit
  4. * @date 2007-02
  5. * @brief LLDataPacker 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 "lltut.h"
  30. #include "linden_common.h"
  31. #include "lldatapacker.h"
  32. #include "v4color.h"
  33. #include "v4coloru.h"
  34. #include "v2math.h"
  35. #include "v3math.h"
  36. #include "v4math.h"
  37. #include "llsdserialize.h"
  38. #define TEST_FILE_NAME "datapacker_test.txt"
  39. namespace tut
  40. {
  41. struct datapacker_test
  42. {
  43. };
  44. typedef test_group<datapacker_test> datapacker_test_t;
  45. typedef datapacker_test_t::object datapacker_test_object_t;
  46. tut::datapacker_test_t tut_datapacker_test("datapacker_test");
  47. //*********LLDataPackerBinaryBuffer
  48. template<> template<>
  49. void datapacker_test_object_t::test<1>()
  50. {
  51. U8 packbuf[128];
  52. F32 f_val1 = 44.44f, f_unpkval1;
  53. F32 f_val2 = 12344.443232f, f_unpkval2;
  54. F32 f_val3 = 44.4456789f, f_unpkval3;
  55. LLDataPackerBinaryBuffer lldp(packbuf,128);
  56. lldp.packFixed( f_val1, "linden_lab", FALSE, 8, 8);
  57. lldp.packFixed( f_val2, "linden_lab", FALSE, 14, 16);
  58. lldp.packFixed( f_val3, "linden_lab", FALSE, 8, 23);
  59. LLDataPackerBinaryBuffer lldp1(packbuf, lldp.getCurrentSize());
  60. lldp1.unpackFixed(f_unpkval1, "linden_lab", FALSE, 8, 8);
  61. lldp1.unpackFixed(f_unpkval2, "linden_lab", FALSE, 14, 16);
  62. lldp1.unpackFixed(f_unpkval3, "linden_lab", FALSE, 8, 23);
  63. ensure_approximately_equals("LLDataPackerBinaryBuffer::packFixed 8 failed", f_val1, f_unpkval1, 8);
  64. ensure_approximately_equals("LLDataPackerBinaryBuffer::packFixed 16 failed", f_val2, f_unpkval2, 16);
  65. ensure_approximately_equals("LLDataPackerBinaryBuffer::packFixed 23 failed", f_val3, f_unpkval3, 31);
  66. }
  67. template<> template<>
  68. void datapacker_test_object_t::test<2>()
  69. {
  70. U8 packbuf[1024];
  71. char str[] = "SecondLife is virtual World\0";
  72. char strBinary[] = "SecondLife is virtual World";
  73. char strBinaryFixed[] = "Fixed Data";
  74. S32 sizeBinaryFixed = sizeof(strBinaryFixed);
  75. U8 valU8 = 'C';
  76. U16 valU16 = 0xFFFF;
  77. U32 valU32 = 0xFFFFFFFF;
  78. S32 valS32 = -94967295;
  79. F32 valF32 = 4354355.44f ;
  80. LLColor4 llcol4(3.3f, 0, 4.4f, 5.5f);
  81. LLColor4U llcol4u(3, 128, 24, 33);
  82. LLVector2 llvec2(333.33f, 444.44f);
  83. LLVector3 llvec3(333.33f, 444.44f, 555.55f);
  84. LLVector4 llvec4(333.33f, 444.44f, 555.55f, 666.66f);
  85. LLUUID uuid;
  86. std::string unpkstr;
  87. char unpkstrBinary[256];
  88. char unpkstrBinaryFixed[256];
  89. S32 unpksizeBinary;
  90. U8 unpkvalU8;
  91. U16 unpkvalU16;
  92. U32 unpkvalU32;
  93. S32 unpkvalS32;
  94. F32 unpkvalF32;
  95. LLColor4 unpkllcol4;
  96. LLColor4U unpkllcol4u;
  97. LLVector2 unpkllvec2;
  98. LLVector3 unpkllvec3;
  99. LLVector4 unpkllvec4;
  100. LLUUID unpkuuid;
  101. LLDataPackerBinaryBuffer lldp(packbuf,1024);
  102. lldp.packString(str , "linden_lab_str");
  103. lldp.packBinaryData((U8*)strBinary, sizeof(strBinary), "linden_lab_bd");
  104. lldp.packBinaryDataFixed((U8*)strBinaryFixed, sizeBinaryFixed, "linden_lab_bdf");
  105. lldp.packU8(valU8,"linden_lab_u8");
  106. lldp.packU16(valU16,"linden_lab_u16");
  107. lldp.packU32(valU32, "linden_lab_u32");
  108. lldp.packS32(valS32, "linden_lab_s32");
  109. lldp.packF32(valF32, "linden_lab_f32");
  110. lldp.packColor4(llcol4, "linden_lab_col4");
  111. lldp.packColor4U(llcol4u, "linden_lab_col4u");
  112. lldp.packVector2(llvec2, "linden_lab_vec2");
  113. lldp.packVector3(llvec3, "linden_lab_vec3");
  114. lldp.packVector4(llvec4, "linden_lab_vec4");
  115. uuid.generate();
  116. lldp.packUUID(uuid, "linden_lab_uuid");
  117. S32 cur_size = lldp.getCurrentSize();
  118. LLDataPackerBinaryBuffer lldp1(packbuf, cur_size);
  119. lldp1.unpackString(unpkstr , "linden_lab_str");
  120. lldp1.unpackBinaryData((U8*)unpkstrBinary, unpksizeBinary, "linden_lab_bd");
  121. lldp1.unpackBinaryDataFixed((U8*)unpkstrBinaryFixed, sizeBinaryFixed, "linden_lab_bdf");
  122. lldp1.unpackU8(unpkvalU8,"linden_lab_u8");
  123. lldp1.unpackU16(unpkvalU16,"linden_lab_u16");
  124. lldp1.unpackU32(unpkvalU32, "linden_lab_u32");
  125. lldp1.unpackS32(unpkvalS32, "linden_lab_s32");
  126. lldp1.unpackF32(unpkvalF32, "linden_lab_f32");
  127. lldp1.unpackColor4(unpkllcol4, "linden_lab_col4");
  128. lldp1.unpackColor4U(unpkllcol4u, "linden_lab_col4u");
  129. lldp1.unpackVector2(unpkllvec2, "linden_lab_vec2");
  130. lldp1.unpackVector3(unpkllvec3, "linden_lab_vec3");
  131. lldp1.unpackVector4(unpkllvec4, "linden_lab_vec4");
  132. lldp1.unpackUUID(unpkuuid, "linden_lab_uuid");
  133. ensure("LLDataPackerBinaryBuffer::packString failed", strcmp(str, unpkstr.c_str()) == 0);
  134. ensure("LLDataPackerBinaryBuffer::packBinaryData failed", strcmp(strBinary, unpkstrBinary) == 0);
  135. ensure("LLDataPackerBinaryBuffer::packBinaryDataFixed failed", strcmp(strBinaryFixed, unpkstrBinaryFixed) == 0);
  136. ensure_equals("LLDataPackerBinaryBuffer::packU8 failed", valU8, unpkvalU8);
  137. ensure_equals("LLDataPackerBinaryBuffer::packU16 failed", valU16, unpkvalU16);
  138. ensure_equals("LLDataPackerBinaryBuffer::packU32 failed", valU32, unpkvalU32);
  139. ensure_equals("LLDataPackerBinaryBuffer::packS32 failed", valS32, unpkvalS32);
  140. ensure("LLDataPackerBinaryBuffer::packF32 failed", is_approx_equal(valF32, unpkvalF32));
  141. ensure_equals("LLDataPackerBinaryBuffer::packColor4 failed", llcol4, unpkllcol4);
  142. ensure_equals("LLDataPackerBinaryBuffer::packColor4U failed", llcol4u, unpkllcol4u);
  143. ensure_equals("LLDataPackerBinaryBuffer::packVector2 failed", llvec2, unpkllvec2);
  144. ensure_equals("LLDataPackerBinaryBuffer::packVector3 failed", llvec3, unpkllvec3);
  145. ensure_equals("LLDataPackerBinaryBuffer::packVector4 failed", llvec4, unpkllvec4);
  146. ensure_equals("LLDataPackerBinaryBuffer::packUUID failed", uuid, unpkuuid);
  147. }
  148. template<> template<>
  149. void datapacker_test_object_t::test<3>()
  150. {
  151. U8 packbuf[128];
  152. char str[] = "SecondLife is virtual World";
  153. S32 strSize = sizeof(str); // include '\0'
  154. LLDataPackerBinaryBuffer lldp(packbuf, 128);
  155. lldp.packString(str , "linden_lab");
  156. ensure("LLDataPackerBinaryBuffer: current size is wrong", strSize == lldp.getCurrentSize());
  157. ensure("LLDataPackerBinaryBuffer: buffer size is wrong", 128 == lldp.getBufferSize());
  158. lldp.reset();
  159. ensure("LLDataPackerBinaryBuffer::reset failed",0 == lldp.getCurrentSize());
  160. }
  161. template<> template<>
  162. void datapacker_test_object_t::test<4>()
  163. {
  164. U8* packbuf = new U8[128];
  165. char str[] = "SecondLife is virtual World";
  166. LLDataPackerBinaryBuffer lldp(packbuf, 128);
  167. lldp.packString(str , "linden_lab");
  168. lldp.freeBuffer();
  169. ensure("LLDataPackerBinaryBuffer.freeBuffer failed" , 0 == lldp.getBufferSize());
  170. }
  171. template<> template<>
  172. void datapacker_test_object_t::test<5>()
  173. {
  174. U8 buf[] = "SecondLife is virtual World";
  175. S32 size = sizeof(buf);
  176. LLDataPackerBinaryBuffer lldp(buf, size);
  177. U8 new_buf[] = "Its Amazing";
  178. size = sizeof(new_buf);
  179. lldp.assignBuffer(new_buf, size);
  180. ensure("LLDataPackerBinaryBuffer::assignBuffer failed" , ((lldp.getBufferSize() == size) && (0 == lldp.getCurrentSize()))) ;
  181. }
  182. template<> template<>
  183. void datapacker_test_object_t::test<6>()
  184. {
  185. U8 packbuf[128];
  186. char str[] = "SecondLife is virtual World";
  187. LLDataPackerBinaryBuffer lldp(packbuf, 128);
  188. lldp.packString(str , "linden_lab");
  189. U8 new_buffer[128];
  190. std::string unpkbuf;
  191. LLDataPackerBinaryBuffer lldp1(new_buffer,128);
  192. lldp1 = lldp;
  193. lldp1.unpackString(unpkbuf, "linden_lab");
  194. ensure("1. LLDataPackerBinaryBuffer::operator= failed" , lldp1.getBufferSize() == lldp.getBufferSize());
  195. ensure_equals("2.LLDataPackerBinaryBuffer::operator= failed", str,unpkbuf);
  196. }
  197. //*********LLDataPackerAsciiBuffer
  198. template<> template<>
  199. void datapacker_test_object_t::test<7>()
  200. {
  201. char packbuf[128];
  202. F32 f_val = 44.44f, f_unpkval;
  203. LLDataPackerAsciiBuffer lldp(packbuf,128);
  204. lldp.packFixed( f_val, "linden_lab", FALSE, 8, 8);
  205. LLDataPackerAsciiBuffer lldp1(packbuf, lldp.getCurrentSize());
  206. lldp1.unpackFixed(f_unpkval, "linden_lab", FALSE, 8, 8);
  207. ensure_approximately_equals("LLDataPackerAsciiBuffer::packFixed failed", f_val, f_unpkval, 8);
  208. }
  209. template<> template<>
  210. void datapacker_test_object_t::test<8>()
  211. {
  212. char packbuf[1024];
  213. char str[] = "SecondLife is virtual World\0";
  214. char strBinary[] = "SecondLife is virtual World";
  215. char strBinaryFixed[] = "Fixed Data";
  216. S32 sizeBinaryFixed = sizeof(strBinaryFixed);
  217. U8 valU8 = 'C';
  218. U16 valU16 = 0xFFFF;
  219. U32 valU32 = 0xFFFFFFFF;
  220. S32 valS32 = -94967295;
  221. F32 valF32 = 4354355.44f ;
  222. LLColor4 llcol4(3.3f, 0, 4.4f, 5.5f);
  223. LLColor4U llcol4u(3, 128, 24, 33);
  224. LLVector2 llvec2(333.33f, 444.44f);
  225. LLVector3 llvec3(333.33f, 444.44f, 555.55f);
  226. LLVector4 llvec4(4354355.44f, 444.44f, 555.55f, 666.66f);
  227. LLUUID uuid;
  228. std::string unpkstr;
  229. char unpkstrBinary[256];
  230. char unpkstrBinaryFixed[256];
  231. S32 unpksizeBinary;
  232. U8 unpkvalU8;
  233. U16 unpkvalU16;
  234. U32 unpkvalU32;
  235. S32 unpkvalS32;
  236. F32 unpkvalF32;
  237. LLColor4 unpkllcol4;
  238. LLColor4U unpkllcol4u;
  239. LLVector2 unpkllvec2;
  240. LLVector3 unpkllvec3;
  241. LLVector4 unpkllvec4;
  242. LLUUID unpkuuid;
  243. LLDataPackerAsciiBuffer lldp(packbuf,1024);
  244. lldp.packString(str , "linden_lab_str");
  245. lldp.packBinaryData((U8*)strBinary, sizeof(strBinary), "linden_lab_bd");
  246. lldp.packBinaryDataFixed((U8*)strBinaryFixed, sizeBinaryFixed, "linden_lab_bdf");
  247. lldp.packU8(valU8,"linden_lab_u8");
  248. lldp.packU16(valU16,"linden_lab_u16");
  249. lldp.packU32(valU32, "linden_lab_u32");
  250. lldp.packS32(valS32, "linden_lab_s32");
  251. lldp.packF32(valF32, "linden_lab_f32");
  252. lldp.packColor4(llcol4, "linden_lab_col4");
  253. lldp.packColor4U(llcol4u, "linden_lab_col4u");
  254. lldp.packVector2(llvec2, "linden_lab_vec2");
  255. lldp.packVector3(llvec3, "linden_lab_vec3");
  256. lldp.packVector4(llvec4, "linden_lab_vec4");
  257. uuid.generate();
  258. lldp.packUUID(uuid, "linden_lab_uuid");
  259. S32 cur_size = lldp.getCurrentSize();
  260. LLDataPackerAsciiBuffer lldp1(packbuf, cur_size);
  261. lldp1.unpackString(unpkstr , "linden_lab_str");
  262. lldp1.unpackBinaryData((U8*)unpkstrBinary, unpksizeBinary, "linden_lab_bd");
  263. lldp1.unpackBinaryDataFixed((U8*)unpkstrBinaryFixed, sizeBinaryFixed, "linden_lab_bdf");
  264. lldp1.unpackU8(unpkvalU8,"linden_lab_u8");
  265. lldp1.unpackU16(unpkvalU16,"linden_lab_u16");
  266. lldp1.unpackU32(unpkvalU32, "linden_lab_u32");
  267. lldp1.unpackS32(unpkvalS32, "linden_lab_s32");
  268. lldp1.unpackF32(unpkvalF32, "linden_lab_f32");
  269. lldp1.unpackColor4(unpkllcol4, "linden_lab_col4");
  270. lldp1.unpackColor4U(unpkllcol4u, "linden_lab_col4u");
  271. lldp1.unpackVector2(unpkllvec2, "linden_lab_vec2");
  272. lldp1.unpackVector3(unpkllvec3, "linden_lab_vec3");
  273. lldp1.unpackVector4(unpkllvec4, "linden_lab_vec4");
  274. lldp1.unpackUUID(unpkuuid, "linden_lab_uuid");
  275. ensure("LLDataPackerAsciiBuffer::packString failed", strcmp(str, unpkstr.c_str()) == 0);
  276. ensure("LLDataPackerAsciiBuffer::packBinaryData failed", strcmp(strBinary, unpkstrBinary) == 0);
  277. ensure("LLDataPackerAsciiBuffer::packBinaryDataFixed failed", strcmp(strBinaryFixed, unpkstrBinaryFixed) == 0);
  278. ensure_equals("LLDataPackerAsciiBuffer::packU8 failed", valU8, unpkvalU8);
  279. ensure_equals("LLDataPackerAsciiBuffer::packU16 failed", valU16, unpkvalU16);
  280. ensure_equals("LLDataPackerAsciiBuffer::packU32 failed", valU32, unpkvalU32);
  281. ensure_equals("LLDataPackerAsciiBuffer::packS32 failed", valS32, unpkvalS32);
  282. ensure("LLDataPackerAsciiBuffer::packF32 failed", is_approx_equal(valF32, unpkvalF32));
  283. ensure_equals("LLDataPackerAsciiBuffer::packColor4 failed", llcol4, unpkllcol4);
  284. ensure_equals("LLDataPackerAsciiBuffer::packColor4U failed", llcol4u, unpkllcol4u);
  285. ensure_equals("LLDataPackerAsciiBuffer::packVector2 failed", llvec2, unpkllvec2);
  286. ensure_equals("LLDataPackerAsciiBuffer::packVector3 failed", llvec3, unpkllvec3);
  287. ensure_equals("LLDataPackerAsciiBuffer::packVector4 failed", llvec4, unpkllvec4);
  288. ensure_equals("LLDataPackerAsciiBuffer::packUUID failed", uuid, unpkuuid);
  289. }
  290. template<> template<>
  291. void datapacker_test_object_t::test<9>()
  292. {
  293. char* packbuf = new char[128];
  294. char str[] = "SecondLife is virtual World";
  295. LLDataPackerAsciiBuffer lldp(packbuf, 128);
  296. lldp.packString(str , "linden_lab");
  297. lldp.freeBuffer();
  298. ensure("LLDataPackerAsciiBuffer::freeBuffer failed" , 0 == lldp.getBufferSize());
  299. }
  300. template<> template<>
  301. void datapacker_test_object_t::test<10>()
  302. {
  303. char buf[] = "SecondLife is virtual World";
  304. S32 size = sizeof(buf);
  305. LLDataPackerAsciiBuffer lldp(buf, size);
  306. char new_buf[] = "Its Amazing";
  307. size = sizeof(new_buf);
  308. lldp.assignBuffer(new_buf, size);
  309. ensure("LLDataPackerAsciiBuffer::assignBuffer failed" , ((lldp.getBufferSize() == size) && (1 == lldp.getCurrentSize()))) ;
  310. }
  311. //*********LLDataPackerAsciiFile
  312. template<> template<>
  313. void datapacker_test_object_t::test<11>()
  314. {
  315. F32 f_val = 44.44f, f_unpkval;
  316. LLFILE* fp = LLFile::fopen(TEST_FILE_NAME, "w+");
  317. if(!fp)
  318. {
  319. llerrs << "File couldnt be open" <<llendl;
  320. return;
  321. }
  322. LLDataPackerAsciiFile lldp(fp,2);
  323. lldp.packFixed( f_val, "linden_lab", FALSE, 8, 8);
  324. fflush(fp);
  325. fseek(fp,0,SEEK_SET);
  326. LLDataPackerAsciiFile lldp1(fp,2);
  327. lldp1.unpackFixed(f_unpkval, "linden_lab", FALSE, 8, 8);
  328. fclose(fp);
  329. ensure_approximately_equals("LLDataPackerAsciiFile::packFixed failed", f_val, f_unpkval, 8);
  330. }
  331. template<> template<>
  332. void datapacker_test_object_t::test<12>()
  333. {
  334. char str[] = "SecondLife is virtual World\0";
  335. char strBinary[] = "SecondLife is virtual World";
  336. char strBinaryFixed[] = "Fixed Data";
  337. S32 sizeBinaryFixed = sizeof(strBinaryFixed);
  338. U8 valU8 = 'C';
  339. U16 valU16 = 0xFFFF;
  340. U32 valU32 = 0xFFFFFFFF;
  341. S32 valS32 = -94967295;
  342. F32 valF32 = 4354355.44f ;
  343. LLColor4 llcol4(3.3f, 0, 4.4f, 5.5f);
  344. LLColor4U llcol4u(3, 128, 24, 33);
  345. LLVector2 llvec2(333.33f, 444.44f);
  346. LLVector3 llvec3(333.33f, 444.44f, 555.55f);
  347. LLVector4 llvec4(333.33f, 444.44f, 555.55f, 666.66f);
  348. LLUUID uuid;
  349. std::string unpkstr;
  350. char unpkstrBinary[256];
  351. char unpkstrBinaryFixed[256];
  352. S32 unpksizeBinary;
  353. U8 unpkvalU8;
  354. U16 unpkvalU16;
  355. U32 unpkvalU32;
  356. S32 unpkvalS32;
  357. F32 unpkvalF32;
  358. LLColor4 unpkllcol4;
  359. LLColor4U unpkllcol4u;
  360. LLVector2 unpkllvec2;
  361. LLVector3 unpkllvec3;
  362. LLVector4 unpkllvec4;
  363. LLUUID unpkuuid;
  364. LLFILE* fp = LLFile::fopen(TEST_FILE_NAME,"w+");
  365. if(!fp)
  366. {
  367. llerrs << "File couldnt be open" <<llendl;
  368. return;
  369. }
  370. LLDataPackerAsciiFile lldp(fp,2);
  371. lldp.packString(str , "linden_lab_str");
  372. lldp.packBinaryData((U8*)strBinary, sizeof(strBinary), "linden_lab_bd");
  373. lldp.packBinaryDataFixed((U8*)strBinaryFixed, sizeBinaryFixed, "linden_lab_bdf");
  374. lldp.packU8(valU8,"linden_lab_u8");
  375. lldp.packU16(valU16,"linden_lab_u16");
  376. lldp.packU32(valU32, "linden_lab_u32");
  377. lldp.packS32(valS32, "linden_lab_s32");
  378. lldp.packF32(valF32, "linden_lab_f32");
  379. lldp.packColor4(llcol4, "linden_lab_col4");
  380. lldp.packColor4U(llcol4u, "linden_lab_col4u");
  381. lldp.packVector2(llvec2, "linden_lab_vec2");
  382. lldp.packVector3(llvec3, "linden_lab_vec3");
  383. lldp.packVector4(llvec4, "linden_lab_vec4");
  384. uuid.generate();
  385. lldp.packUUID(uuid, "linden_lab_uuid");
  386. fflush(fp);
  387. fseek(fp,0,SEEK_SET);
  388. LLDataPackerAsciiFile lldp1(fp,2);
  389. lldp1.unpackString(unpkstr , "linden_lab_str");
  390. lldp1.unpackBinaryData((U8*)unpkstrBinary, unpksizeBinary, "linden_lab_bd");
  391. lldp1.unpackBinaryDataFixed((U8*)unpkstrBinaryFixed, sizeBinaryFixed, "linden_lab_bdf");
  392. lldp1.unpackU8(unpkvalU8,"linden_lab_u8");
  393. lldp1.unpackU16(unpkvalU16,"linden_lab_u16");
  394. lldp1.unpackU32(unpkvalU32, "linden_lab_u32");
  395. lldp1.unpackS32(unpkvalS32, "linden_lab_s32");
  396. lldp1.unpackF32(unpkvalF32, "linden_lab_f32");
  397. lldp1.unpackColor4(unpkllcol4, "linden_lab_col4");
  398. lldp1.unpackColor4U(unpkllcol4u, "linden_lab_col4u");
  399. lldp1.unpackVector2(unpkllvec2, "linden_lab_vec2");
  400. lldp1.unpackVector3(unpkllvec3, "linden_lab_vec3");
  401. lldp1.unpackVector4(unpkllvec4, "linden_lab_vec4");
  402. lldp1.unpackUUID(unpkuuid, "linden_lab_uuid");
  403. fclose(fp);
  404. ensure("LLDataPackerAsciiFile::packString failed", strcmp(str, unpkstr.c_str()) == 0);
  405. ensure("LLDataPackerAsciiFile::packBinaryData failed", strcmp(strBinary, unpkstrBinary) == 0);
  406. ensure("LLDataPackerAsciiFile::packBinaryDataFixed failed", strcmp(strBinaryFixed, unpkstrBinaryFixed) == 0);
  407. ensure_equals("LLDataPackerAsciiFile::packU8 failed", valU8, unpkvalU8);
  408. ensure_equals("LLDataPackerAsciiFile::packU16 failed", valU16, unpkvalU16);
  409. ensure_equals("LLDataPackerAsciiFile::packU32 failed", valU32, unpkvalU32);
  410. ensure_equals("LLDataPackerAsciiFile::packS32 failed", valS32, unpkvalS32);
  411. ensure("LLDataPackerAsciiFile::packF32 failed", is_approx_equal(valF32, unpkvalF32));
  412. ensure_equals("LLDataPackerAsciiFile::packColor4 failed", llcol4, unpkllcol4);
  413. ensure_equals("LLDataPackerAsciiFile::packColor4U failed", llcol4u, unpkllcol4u);
  414. ensure_equals("LLDataPackerAsciiFile::packVector2 failed", llvec2, unpkllvec2);
  415. ensure_equals("LLDataPackerAsciiFile::packVector3 failed", llvec3, unpkllvec3);
  416. ensure_equals("LLDataPackerAsciiFile::packVector4 failed", llvec4, unpkllvec4);
  417. ensure_equals("LLDataPackerAsciiFile::packUUID failed", uuid, unpkuuid);
  418. }
  419. template<> template<>
  420. void datapacker_test_object_t::test<13>()
  421. {
  422. F32 f_val = 44.44f, f_unpkval;
  423. std::ostringstream ostr;
  424. LLDataPackerAsciiFile lldp(ostr,2);
  425. lldp.packFixed( f_val, "linden_lab", FALSE, 8, 8);
  426. std::istringstream istr(ostr.str());
  427. LLDataPackerAsciiFile lldp1(istr,2);
  428. lldp1.unpackFixed(f_unpkval, "linden_lab", FALSE, 8, 8);
  429. ensure_approximately_equals("LLDataPackerAsciiFile::packFixed (iostring) failed", f_val, f_unpkval, 8);
  430. }
  431. template<> template<>
  432. void datapacker_test_object_t::test<14>()
  433. {
  434. char str[] = "SecondLife is virtual World\0";
  435. char strBinary[] = "SecondLife is virtual World";
  436. char strBinaryFixed[] = "Fixed Data";
  437. S32 sizeBinaryFixed = sizeof(strBinaryFixed);
  438. U8 valU8 = 'C';
  439. U16 valU16 = 0xFFFF;
  440. U32 valU32 = 0xFFFFFFFF;
  441. S32 valS32 = -94967295;
  442. F32 valF32 = 4354355.44f ;
  443. LLColor4 llcol4(3.3f, 0, 4.4f, 5.5f);
  444. LLColor4U llcol4u(3, 128, 24, 33);
  445. LLVector2 llvec2(3333333.33f, 444.333344f);
  446. LLVector3 llvec3(3323233.33f, 444.4324f, 555.553232f);
  447. LLVector4 llvec4(333.33233f, 444.4323234f, 55323225.55f, 6323236.66f);
  448. LLUUID uuid;
  449. std::string unpkstr;
  450. char unpkstrBinary[256];
  451. char unpkstrBinaryFixed[256];
  452. S32 unpksizeBinary;
  453. U8 unpkvalU8;
  454. U16 unpkvalU16;
  455. U32 unpkvalU32;
  456. S32 unpkvalS32;
  457. F32 unpkvalF32;
  458. LLColor4 unpkllcol4;
  459. LLColor4U unpkllcol4u;
  460. LLVector2 unpkllvec2;
  461. LLVector3 unpkllvec3;
  462. LLVector4 unpkllvec4;
  463. LLUUID unpkuuid;
  464. std::ostringstream ostr;
  465. LLDataPackerAsciiFile lldp(ostr,2);
  466. lldp.packString(str , "linden_lab_str");
  467. lldp.packBinaryData((U8*)strBinary, sizeof(strBinary), "linden_lab_bd");
  468. lldp.packBinaryDataFixed((U8*)strBinaryFixed, sizeBinaryFixed, "linden_lab_bdf");
  469. lldp.packU8(valU8,"linden_lab_u8");
  470. lldp.packU16(valU16,"linden_lab_u16");
  471. lldp.packU32(valU32, "linden_lab_u32");
  472. lldp.packS32(valS32, "linden_lab_s32");
  473. lldp.packF32(valF32, "linden_lab_f32");
  474. lldp.packColor4(llcol4, "linden_lab_col4");
  475. lldp.packColor4U(llcol4u, "linden_lab_col4u");
  476. lldp.packVector2(llvec2, "linden_lab_vec2");
  477. lldp.packVector3(llvec3, "linden_lab_vec3");
  478. lldp.packVector4(llvec4, "linden_lab_vec4");
  479. uuid.generate();
  480. lldp.packUUID(uuid, "linden_lab_uuid");
  481. std::istringstream istr(ostr.str());
  482. LLDataPackerAsciiFile lldp1(istr,2);
  483. lldp1.unpackString(unpkstr , "linden_lab_str");
  484. lldp1.unpackBinaryData((U8*)unpkstrBinary, unpksizeBinary, "linden_lab_bd");
  485. lldp1.unpackBinaryDataFixed((U8*)unpkstrBinaryFixed, sizeBinaryFixed, "linden_lab_bdf");
  486. lldp1.unpackU8(unpkvalU8,"linden_lab_u8");
  487. lldp1.unpackU16(unpkvalU16,"linden_lab_u16");
  488. lldp1.unpackU32(unpkvalU32, "linden_lab_u32");
  489. lldp1.unpackS32(unpkvalS32, "linden_lab_s32");
  490. lldp1.unpackF32(unpkvalF32, "linden_lab_f32");
  491. lldp1.unpackColor4(unpkllcol4, "linden_lab_col4");
  492. lldp1.unpackColor4U(unpkllcol4u, "linden_lab_col4u");
  493. lldp1.unpackVector2(unpkllvec2, "linden_lab_vec2");
  494. lldp1.unpackVector3(unpkllvec3, "linden_lab_vec3");
  495. lldp1.unpackVector4(unpkllvec4, "linden_lab_vec4");
  496. lldp1.unpackUUID(unpkuuid, "linden_lab_uuid");
  497. ensure("LLDataPackerAsciiFile::packString (iostring) failed", strcmp(str, unpkstr.c_str()) == 0);
  498. ensure("LLDataPackerAsciiFile::packBinaryData (iostring) failed", strcmp(strBinary, unpkstrBinary) == 0);
  499. ensure("LLDataPackerAsciiFile::packBinaryDataFixed (iostring) failed", strcmp(strBinaryFixed, unpkstrBinaryFixed) == 0);
  500. ensure_equals("LLDataPackerAsciiFile::packU8 (iostring) failed", valU8, unpkvalU8);
  501. ensure_equals("LLDataPackerAsciiFile::packU16 (iostring) failed", valU16, unpkvalU16);
  502. ensure_equals("LLDataPackerAsciiFile::packU32 (iostring) failed", valU32, unpkvalU32);
  503. ensure_equals("LLDataPackerAsciiFile::packS32 (iostring) failed", valS32, unpkvalS32);
  504. ensure("LLDataPackerAsciiFile::packF32 (iostring) failed", is_approx_equal(valF32, unpkvalF32));
  505. ensure_equals("LLDataPackerAsciiFile::packColor4 (iostring) failed", llcol4, unpkllcol4);
  506. ensure_equals("LLDataPackerAsciiFile::packColor4U (iostring) failed", llcol4u, unpkllcol4u);
  507. ensure_equals("LLDataPackerAsciiFile::packVector2 (iostring) failed", llvec2, unpkllvec2);
  508. ensure_equals("LLDataPackerAsciiFile::packVector3 (iostring) failed", llvec3, unpkllvec3);
  509. ensure_equals("LLDataPackerAsciiFile::packVector4 (iostring) failed", llvec4, unpkllvec4);
  510. ensure_equals("LLDataPackerAsciiFile::packUUID (iostring) failed", uuid, unpkuuid);
  511. }
  512. }