v4coloru_test.cpp
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:11k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file v4coloru_test.cpp
  3.  * @author Adroit
  4.  * @date 2007-03
  5.  * @brief v4coloru test cases.
  6.  *
  7.  * $LicenseInfo:firstyear=2007&license=viewergpl$
  8.  * 
  9.  * Copyright (c) 2007-2010, Linden Research, Inc.
  10.  * 
  11.  * Second Life Viewer Source Code
  12.  * The source code in this file ("Source Code") is provided by Linden Lab
  13.  * to you under the terms of the GNU General Public License, version 2.0
  14.  * ("GPL"), unless you have obtained a separate licensing agreement
  15.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  16.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  17.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  18.  * 
  19.  * There are special exceptions to the terms and conditions of the GPL as
  20.  * it is applied to this Source Code. View the full text of the exception
  21.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  22.  * online at
  23.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  24.  * 
  25.  * By copying, modifying or distributing this software, you acknowledge
  26.  * that you have read and understood your obligations described above,
  27.  * and agree to abide by those obligations.
  28.  * 
  29.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  30.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  31.  * COMPLETENESS OR PERFORMANCE.
  32.  * $/LicenseInfo$
  33.  */
  34. #include "linden_common.h"
  35. #include "../test/lltut.h"
  36. #include "llsd.h"
  37. #include "../v4coloru.h"
  38. namespace tut
  39. {
  40. struct v4coloru_data
  41. {
  42. };
  43. typedef test_group<v4coloru_data> v4coloru_test;
  44. typedef v4coloru_test::object v4coloru_object;
  45. tut::v4coloru_test v4coloru_testcase("v4coloru");
  46. template<> template<>
  47. void v4coloru_object::test<1>()
  48. {
  49. LLColor4U llcolor4u;
  50. ensure("1:LLColor4u:Fail to initialize ", ((0 == llcolor4u.mV[VX]) && (0 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
  51. U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
  52. LLColor4U llcolor4u1(r,g,b);
  53. ensure("2:LLColor4u:Fail to initialize ", ((r == llcolor4u1.mV[VX]) && (g == llcolor4u1.mV[VY]) && (b == llcolor4u1.mV[VZ])&& (255 == llcolor4u1.mV[VW])));
  54. LLColor4U llcolor4u2(r,g,b,a);
  55. ensure("3:LLColor4u:Fail to initialize ", ((r == llcolor4u2.mV[VX]) && (g == llcolor4u2.mV[VY]) && (b == llcolor4u2.mV[VZ])&& (a == llcolor4u2.mV[VW])));
  56. const U8 vec[4] = {0x12,0xFF,0xAF,0x23};
  57. LLColor4U llcolor4u3(vec);
  58. ensure("4:LLColor4u:Fail to initialize ", ((vec[0] == llcolor4u3.mV[VX]) && (vec[1] == llcolor4u3.mV[VY]) && (vec[2] == llcolor4u3.mV[VZ])&& (vec[3] == llcolor4u3.mV[VW])));
  59. LLSD sd = llcolor4u3.getValue();
  60. LLColor4U llcolor4u4(sd);
  61. ensure_equals("5:LLColor4u (LLSD) Failed ", llcolor4u4, llcolor4u3);
  62. }
  63. template<> template<>
  64. void v4coloru_object::test<2>()
  65. {
  66. LLColor4U llcolor4ua(1, 2, 3, 4);
  67. LLSD sd = llcolor4ua.getValue();
  68. LLColor4U llcolor4u;
  69. llcolor4u.setValue(sd);
  70. ensure_equals("setValue(LLSD)/getValue Failed ", llcolor4u, llcolor4ua);
  71. }
  72. template<> template<>
  73. void v4coloru_object::test<3>()
  74. {
  75. U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
  76. LLColor4U llcolor4u(r,g,b,a);
  77. llcolor4u.setToBlack();
  78. ensure("setToBlack:Fail to set black ", ((0 == llcolor4u.mV[VX]) && (0 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
  79. llcolor4u.setToWhite();
  80. ensure("setToWhite:Fail to white ", ((255 == llcolor4u.mV[VX]) && (255 == llcolor4u.mV[VY]) && (255 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
  81. }
  82. template<> template<>
  83. void v4coloru_object::test<4>()
  84. {
  85. U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
  86. LLColor4U llcolor4ua(r,g,b,a);
  87. LLSD sd = llcolor4ua.getValue();
  88. LLColor4U llcolor4u = (LLColor4U)sd;
  89. ensure_equals("Operator=(LLSD) Failed ",  llcolor4u, llcolor4ua);
  90. }
  91. template<> template<>
  92. void v4coloru_object::test<5>()
  93. {
  94. U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
  95. LLColor4U llcolor4u;
  96. llcolor4u.setVec(r,g,b,a);
  97. ensure("1:setVec:Fail to set the values ", ((r == llcolor4u.mV[VX]) && (g == llcolor4u.mV[VY]) && (b == llcolor4u.mV[VZ])&& (a == llcolor4u.mV[VW])));
  98. llcolor4u.setToBlack();
  99. llcolor4u.setVec(r,g,b);
  100. ensure("2:setVec:Fail to set the values ", ((r == llcolor4u.mV[VX]) && (g == llcolor4u.mV[VY]) && (b == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
  101. LLColor4U llcolor4u1;
  102. llcolor4u1.setVec(llcolor4u);
  103. ensure_equals("3:setVec:Fail to set the values ", llcolor4u1,llcolor4u);
  104. const U8 vec[4] = {0x12,0xFF,0xAF,0x23};
  105. LLColor4U llcolor4u2;
  106. llcolor4u2.setVec(vec);
  107. ensure("4:setVec:Fail to set the values ", ((vec[0] == llcolor4u2.mV[VX]) && (vec[1] == llcolor4u2.mV[VY]) && (vec[2] == llcolor4u2.mV[VZ])&& (vec[3] == llcolor4u2.mV[VW])));
  108. }
  109. template<> template<>
  110. void v4coloru_object::test<6>()
  111. {
  112. U8 alpha = 0x12;
  113. LLColor4U llcolor4u;
  114. llcolor4u.setAlpha(alpha);
  115. ensure("setAlpha:Fail to set alpha value ", (alpha == llcolor4u.mV[VW]));
  116. }
  117. template<> template<>
  118. void v4coloru_object::test<7>()
  119. {
  120. U8 r = 0x12, g = 0xFF, b = 0xAF;
  121. LLColor4U llcolor4u(r,g,b);
  122. ensure("magVecSquared:Fail ", is_approx_equal(llcolor4u.magVecSquared(), (F32)(r*r + g*g + b*b)));
  123. ensure("magVec:Fail ", is_approx_equal(llcolor4u.magVec(), fsqrtf(r*r + g*g + b*b)));
  124. }
  125. template<> template<>
  126. void v4coloru_object::test<8>()
  127. {
  128. U8 r = 0x12, g = 0xFF, b = 0xAF;
  129. std::ostringstream stream1, stream2;
  130. LLColor4U llcolor4u1(r,g,b),llcolor4u2;
  131. stream1 << llcolor4u1;
  132. llcolor4u2.setVec(r,g,b);
  133. stream2 << llcolor4u2;
  134. ensure("operator << failed ", (stream1.str() == stream2.str()));
  135. }
  136. template<> template<>
  137. void v4coloru_object::test<9>()
  138. {
  139. U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
  140. U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
  141. LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
  142. llcolor4u3 = llcolor4u1 + llcolor4u2;
  143. ensure_equals(
  144. "1a.operator+:Fail to Add the values ",
  145. llcolor4u3.mV[VX],
  146. (U8)(r1+r2));
  147. ensure_equals(
  148. "1b.operator+:Fail to Add the values ",
  149. llcolor4u3.mV[VY],
  150. (U8)(g1+g2));
  151. ensure_equals(
  152. "1c.operator+:Fail to Add the values ",
  153. llcolor4u3.mV[VZ],
  154. (U8)(b1+b2));
  155. llcolor4u2 += llcolor4u1;
  156. ensure_equals(
  157. "2a.operator+=:Fail to Add the values ",
  158. llcolor4u2.mV[VX],
  159. (U8)(r1+r2));
  160. ensure_equals(
  161. "2b.operator+=:Fail to Add the values ",
  162. llcolor4u2.mV[VY],
  163. (U8)(g1+g2));
  164. ensure_equals(
  165. "2c.operator+=:Fail to Add the values ",
  166. llcolor4u2.mV[VZ],
  167. (U8)(b1+b2));
  168. }
  169. template<> template<>
  170. void v4coloru_object::test<10>()
  171. {
  172. U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
  173. U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
  174. LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
  175. llcolor4u3 = llcolor4u1 - llcolor4u2;
  176. ensure_equals(
  177. "1a. operator-:Fail to Add the values ",
  178. llcolor4u3.mV[VX],
  179. (U8)(r1-r2));
  180. ensure_equals(
  181. "1b. operator-:Fail to Add the values ",
  182. llcolor4u3.mV[VY],
  183. (U8)(g1-g2));
  184. ensure_equals(
  185. "1c. operator-:Fail to Add the values ",
  186. llcolor4u3.mV[VZ],
  187. (U8)(b1-b2));
  188. llcolor4u1 -= llcolor4u2;
  189. ensure_equals(
  190. "2a. operator-=:Fail to Add the values ",
  191. llcolor4u1.mV[VX],
  192. (U8)(r1-r2));
  193. ensure_equals(
  194. "2b. operator-=:Fail to Add the values ",
  195. llcolor4u1.mV[VY],
  196. (U8)(g1-g2));
  197. ensure_equals(
  198. "2c. operator-=:Fail to Add the values ",
  199. llcolor4u1.mV[VZ],
  200. (U8)(b1-b2));
  201. }
  202. template<> template<>
  203. void v4coloru_object::test<11>()
  204. {
  205. U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
  206. U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
  207. LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
  208. llcolor4u3 = llcolor4u1 * llcolor4u2;
  209. ensure_equals(
  210. "1a. operator*:Fail to multiply the values",
  211. llcolor4u3.mV[VX],
  212. (U8)(r1*r2));
  213. ensure_equals(
  214. "1b. operator*:Fail to multiply the values",
  215. llcolor4u3.mV[VY],
  216. (U8)(g1*g2));
  217. ensure_equals(
  218. "1c. operator*:Fail to multiply the values",
  219. llcolor4u3.mV[VZ],
  220. (U8)(b1*b2));
  221. U8 mulVal = 123;
  222. llcolor4u1 *= mulVal;
  223. ensure_equals(
  224. "2a. operator*=:Fail to multiply the values",
  225. llcolor4u1.mV[VX],
  226. (U8)(r1*mulVal));
  227. ensure_equals(
  228. "2b. operator*=:Fail to multiply the values",
  229. llcolor4u1.mV[VY],
  230. (U8)(g1*mulVal));
  231. ensure_equals(
  232. "2c. operator*=:Fail to multiply the values",
  233. llcolor4u1.mV[VZ],
  234. (U8)(b1*mulVal));
  235. }
  236. template<> template<>
  237. void v4coloru_object::test<12>()
  238. {
  239. U8 r = 0x12, g = 0xFF, b = 0xAF;
  240. LLColor4U llcolor4u(r,g,b),llcolor4u1;
  241. llcolor4u1 = llcolor4u;
  242. ensure("operator== failed to ensure the equality ", (llcolor4u1 == llcolor4u));
  243. llcolor4u1.setToBlack();
  244. ensure("operator!= failed to ensure the equality ", (llcolor4u1 != llcolor4u));
  245. }
  246. template<> template<>
  247. void v4coloru_object::test<13>()
  248. {
  249. U8 r = 0x12, g = 0xFF, b = 0xAF, a = 12;
  250. LLColor4U llcolor4u(r,g,b,a);
  251. U8 modVal = 45;
  252. llcolor4u %= modVal;
  253. ensure_equals("operator%=:Fail ", llcolor4u.mV[VW], (U8)(a * modVal));
  254. }
  255. template<> template<>
  256. void v4coloru_object::test<14>()
  257. {
  258. U8 r = 0x12, g = 0xFF, b = 0xAF, a = 12;
  259. LLColor4U llcolor4u1(r,g,b,a);
  260. std::string color("12, 23, 132, 50");
  261. LLColor4U::parseColor4U(color, &llcolor4u1);
  262. ensure("parseColor4U() failed to parse the color value ", ((12 == llcolor4u1.mV[VX]) && (23 == llcolor4u1.mV[VY]) && (132 == llcolor4u1.mV[VZ])&& (50 == llcolor4u1.mV[VW])));
  263. color = "12, 23, 132";
  264. ensure("2:parseColor4U() failed to parse the color value ",  (FALSE == LLColor4U::parseColor4U(color, &llcolor4u1)));
  265. color = "12";
  266. ensure("2:parseColor4U() failed to parse the color value ",  (FALSE == LLColor4U::parseColor4U(color, &llcolor4u1)));
  267. }
  268. template<> template<>
  269. void v4coloru_object::test<15>()
  270. {
  271. U8 r = 12, g = 123, b = 3, a = 2;
  272. LLColor4U llcolor4u(r,g,b,a),llcolor4u1;
  273. const F32 fVal = 3.f;
  274. llcolor4u1 = llcolor4u.multAll(fVal);
  275. ensure("multAll:Fail to multiply ", (((U8)llround(r * fVal) == llcolor4u1.mV[VX]) && (U8)llround(g * fVal) == llcolor4u1.mV[VY]
  276. && ((U8)llround(b * fVal) == llcolor4u1.mV[VZ])&& ((U8)llround(a * fVal) == llcolor4u1.mV[VW])));
  277. }
  278. template<> template<>
  279. void v4coloru_object::test<16>()
  280. {
  281. U8 r1 = 12, g1 = 123, b1 = 3, a1 = 2;
  282. U8 r2 = 23, g2 = 230, b2 = 124, a2 = 255;
  283. LLColor4U llcolor4u(r1,g1,b1,a1),llcolor4u1(r2,g2,b2,a2);
  284. llcolor4u1 = llcolor4u1.addClampMax(llcolor4u);
  285. ensure("1:addClampMax():Fail to add the value ",  ((r1+r2 == llcolor4u1.mV[VX]) && (255 == llcolor4u1.mV[VY]) && (b1+b2 == llcolor4u1.mV[VZ])&& (255 == llcolor4u1.mV[VW])));
  286. r1 = 132, g1 = 3, b1 = 3, a1 = 2;
  287. r2 = 123, g2 = 230, b2 = 154, a2 = 25;
  288. LLColor4U llcolor4u2(r1,g1,b1,a1),llcolor4u3(r2,g2,b2,a2);
  289. llcolor4u3 = llcolor4u3.addClampMax(llcolor4u2);
  290. ensure("2:addClampMax():Fail to add the value ",  ((255 == llcolor4u3.mV[VX]) && (g1+g2 == llcolor4u3.mV[VY]) && (b1+b2 == llcolor4u3.mV[VZ])&& (a1+a2 == llcolor4u3.mV[VW])));
  291. }
  292. template<> template<>
  293. void v4coloru_object::test<17>()
  294. {
  295. F32 r = 23.f, g = 12.32f, b = -12.3f;
  296. LLColor3 color3(r,g,b);
  297. LLColor4U llcolor4u;
  298. llcolor4u.setVecScaleClamp(color3);
  299. const S32 MAX_COLOR = 255;
  300. F32 color_scale_factor = MAX_COLOR/r;
  301. S32 r2 = llround(r * color_scale_factor);
  302. S32 g2 = llround(g * color_scale_factor);
  303. ensure("setVecScaleClamp():Fail to add the value ",  ((r2 == llcolor4u.mV[VX]) && (g2 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
  304. }
  305. }