00001
00035 #include <tut/tut.h>
00036 #include "linden_common.h"
00037 #include "lltut.h"
00038 #include "llsd.h"
00039 #include "v4coloru.h"
00040
00041
00042 namespace tut
00043 {
00044 struct v4coloru_data
00045 {
00046 };
00047 typedef test_group<v4coloru_data> v4coloru_test;
00048 typedef v4coloru_test::object v4coloru_object;
00049 tut::v4coloru_test v4coloru_testcase("v4coloru");
00050
00051 template<> template<>
00052 void v4coloru_object::test<1>()
00053 {
00054 LLColor4U llcolor4u;
00055 ensure("1:LLColor4u:Fail to initialize ", ((0 == llcolor4u.mV[VX]) && (0 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
00056
00057 U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
00058 LLColor4U llcolor4u1(r,g,b);
00059 ensure("2:LLColor4u:Fail to initialize ", ((r == llcolor4u1.mV[VX]) && (g == llcolor4u1.mV[VY]) && (b == llcolor4u1.mV[VZ])&& (255 == llcolor4u1.mV[VW])));
00060
00061 LLColor4U llcolor4u2(r,g,b,a);
00062 ensure("3:LLColor4u:Fail to initialize ", ((r == llcolor4u2.mV[VX]) && (g == llcolor4u2.mV[VY]) && (b == llcolor4u2.mV[VZ])&& (a == llcolor4u2.mV[VW])));
00063
00064 const U8 vec[4] = {0x12,0xFF,0xAF,0x23};
00065 LLColor4U llcolor4u3(vec);
00066 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])));
00067
00068 LLSD sd = llcolor4u3.getValue();
00069 LLColor4U llcolor4u4(sd);
00070 ensure_equals("5:LLColor4u (LLSD) Failed ", llcolor4u4, llcolor4u3);
00071 }
00072
00073 template<> template<>
00074 void v4coloru_object::test<2>()
00075 {
00076 LLColor4U llcolor4ua(1, 2, 3, 4);
00077 LLSD sd = llcolor4ua.getValue();
00078 LLColor4U llcolor4u;
00079 llcolor4u.setValue(sd);
00080 ensure_equals("setValue(LLSD)/getValue Failed ", llcolor4u, llcolor4ua);
00081 }
00082
00083 template<> template<>
00084 void v4coloru_object::test<3>()
00085 {
00086 U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
00087 LLColor4U llcolor4u(r,g,b,a);
00088 llcolor4u.setToBlack();
00089 ensure("setToBlack:Fail to set black ", ((0 == llcolor4u.mV[VX]) && (0 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
00090
00091 llcolor4u.setToWhite();
00092 ensure("setToWhite:Fail to white ", ((255 == llcolor4u.mV[VX]) && (255 == llcolor4u.mV[VY]) && (255 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
00093 }
00094
00095 template<> template<>
00096 void v4coloru_object::test<4>()
00097 {
00098 U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
00099 LLColor4U llcolor4ua(r,g,b,a);
00100 LLSD sd = llcolor4ua.getValue();
00101 LLColor4U llcolor4u = sd;
00102 ensure_equals("Operator=(LLSD) Failed ", llcolor4u, llcolor4ua);
00103 }
00104
00105 template<> template<>
00106 void v4coloru_object::test<5>()
00107 {
00108 U8 r = 0x12, g = 0xFF, b = 0xAF, a = 0x23;
00109 LLColor4U llcolor4u;
00110 llcolor4u.setVec(r,g,b,a);
00111 ensure("1:setVec:Fail to set the values ", ((r == llcolor4u.mV[VX]) && (g == llcolor4u.mV[VY]) && (b == llcolor4u.mV[VZ])&& (a == llcolor4u.mV[VW])));
00112
00113 llcolor4u.setToBlack();
00114 llcolor4u.setVec(r,g,b);
00115 ensure("2:setVec:Fail to set the values ", ((r == llcolor4u.mV[VX]) && (g == llcolor4u.mV[VY]) && (b == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
00116
00117 LLColor4U llcolor4u1;
00118 llcolor4u1.setVec(llcolor4u);
00119 ensure_equals("3:setVec:Fail to set the values ", llcolor4u1,llcolor4u);
00120
00121 const U8 vec[4] = {0x12,0xFF,0xAF,0x23};
00122 LLColor4U llcolor4u2;
00123 llcolor4u2.setVec(vec);
00124 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])));
00125 }
00126
00127 template<> template<>
00128 void v4coloru_object::test<6>()
00129 {
00130 U8 alpha = 0x12;
00131 LLColor4U llcolor4u;
00132 llcolor4u.setAlpha(alpha);
00133 ensure("setAlpha:Fail to set alpha value ", (alpha == llcolor4u.mV[VW]));
00134 }
00135
00136 template<> template<>
00137 void v4coloru_object::test<7>()
00138 {
00139 U8 r = 0x12, g = 0xFF, b = 0xAF;
00140 LLColor4U llcolor4u(r,g,b);
00141 ensure("magVecSquared:Fail ", is_approx_equal(llcolor4u.magVecSquared(), (F32)(r*r + g*g + b*b)));
00142 ensure("magVec:Fail ", is_approx_equal(llcolor4u.magVec(), fsqrtf(r*r + g*g + b*b)));
00143 }
00144
00145 template<> template<>
00146 void v4coloru_object::test<8>()
00147 {
00148 U8 r = 0x12, g = 0xFF, b = 0xAF;
00149 std::ostringstream stream1, stream2;
00150 LLColor4U llcolor4u1(r,g,b),llcolor4u2;
00151 stream1 << llcolor4u1;
00152 llcolor4u2.setVec(r,g,b);
00153 stream2 << llcolor4u2;
00154 ensure("operator << failed ", (stream1.str() == stream2.str()));
00155 }
00156
00157 template<> template<>
00158 void v4coloru_object::test<9>()
00159 {
00160 U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
00161 U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
00162 LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
00163 llcolor4u3 = llcolor4u1 + llcolor4u2;
00164 ensure_equals(
00165 "1a.operator+:Fail to Add the values ",
00166 llcolor4u3.mV[VX],
00167 (U8)(r1+r2));
00168 ensure_equals(
00169 "1b.operator+:Fail to Add the values ",
00170 llcolor4u3.mV[VY],
00171 (U8)(g1+g2));
00172 ensure_equals(
00173 "1c.operator+:Fail to Add the values ",
00174 llcolor4u3.mV[VZ],
00175 (U8)(b1+b2));
00176
00177 llcolor4u2 += llcolor4u1;
00178 ensure_equals(
00179 "2a.operator+=:Fail to Add the values ",
00180 llcolor4u2.mV[VX],
00181 (U8)(r1+r2));
00182 ensure_equals(
00183 "2b.operator+=:Fail to Add the values ",
00184 llcolor4u2.mV[VY],
00185 (U8)(g1+g2));
00186 ensure_equals(
00187 "2c.operator+=:Fail to Add the values ",
00188 llcolor4u2.mV[VZ],
00189 (U8)(b1+b2));
00190 }
00191
00192 template<> template<>
00193 void v4coloru_object::test<10>()
00194 {
00195 U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
00196 U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
00197 LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
00198 llcolor4u3 = llcolor4u1 - llcolor4u2;
00199 ensure_equals(
00200 "1a. operator-:Fail to Add the values ",
00201 llcolor4u3.mV[VX],
00202 (U8)(r1-r2));
00203 ensure_equals(
00204 "1b. operator-:Fail to Add the values ",
00205 llcolor4u3.mV[VY],
00206 (U8)(g1-g2));
00207 ensure_equals(
00208 "1c. operator-:Fail to Add the values ",
00209 llcolor4u3.mV[VZ],
00210 (U8)(b1-b2));
00211
00212 llcolor4u1 -= llcolor4u2;
00213 ensure_equals(
00214 "2a. operator-=:Fail to Add the values ",
00215 llcolor4u1.mV[VX],
00216 (U8)(r1-r2));
00217 ensure_equals(
00218 "2b. operator-=:Fail to Add the values ",
00219 llcolor4u1.mV[VY],
00220 (U8)(g1-g2));
00221 ensure_equals(
00222 "2c. operator-=:Fail to Add the values ",
00223 llcolor4u1.mV[VZ],
00224 (U8)(b1-b2));
00225 }
00226
00227 template<> template<>
00228 void v4coloru_object::test<11>()
00229 {
00230 U8 r1 = 0x12, g1 = 0xFF, b1 = 0xAF;
00231 U8 r2 = 0x1C, g2 = 0x9A, b2 = 0x1B;
00232 LLColor4U llcolor4u1(r1,g1,b1), llcolor4u2(r2,g2,b2),llcolor4u3;
00233 llcolor4u3 = llcolor4u1 * llcolor4u2;
00234 ensure_equals(
00235 "1a. operator*:Fail to multiply the values",
00236 llcolor4u3.mV[VX],
00237 (U8)(r1*r2));
00238 ensure_equals(
00239 "1b. operator*:Fail to multiply the values",
00240 llcolor4u3.mV[VY],
00241 (U8)(g1*g2));
00242 ensure_equals(
00243 "1c. operator*:Fail to multiply the values",
00244 llcolor4u3.mV[VZ],
00245 (U8)(b1*b2));
00246
00247 U8 mulVal = 123;
00248 llcolor4u1 *= mulVal;
00249 ensure_equals(
00250 "2a. operator*=:Fail to multiply the values",
00251 llcolor4u1.mV[VX],
00252 (U8)(r1*mulVal));
00253 ensure_equals(
00254 "2b. operator*=:Fail to multiply the values",
00255 llcolor4u1.mV[VY],
00256 (U8)(g1*mulVal));
00257 ensure_equals(
00258 "2c. operator*=:Fail to multiply the values",
00259 llcolor4u1.mV[VZ],
00260 (U8)(b1*mulVal));
00261 }
00262
00263 template<> template<>
00264 void v4coloru_object::test<12>()
00265 {
00266 U8 r = 0x12, g = 0xFF, b = 0xAF;
00267 LLColor4U llcolor4u(r,g,b),llcolor4u1;
00268 llcolor4u1 = llcolor4u;
00269 ensure("operator== failed to ensure the equality ", (llcolor4u1 == llcolor4u));
00270 llcolor4u1.setToBlack();
00271 ensure("operator!= failed to ensure the equality ", (llcolor4u1 != llcolor4u));
00272 }
00273
00274 template<> template<>
00275 void v4coloru_object::test<13>()
00276 {
00277 U8 r = 0x12, g = 0xFF, b = 0xAF, a = 12;
00278 LLColor4U llcolor4u(r,g,b,a);
00279 U8 modVal = 45;
00280 llcolor4u %= modVal;
00281 ensure_equals("operator%=:Fail ", llcolor4u.mV[VW], (U8)(a * modVal));
00282 }
00283
00284 template<> template<>
00285 void v4coloru_object::test<14>()
00286 {
00287 U8 r = 0x12, g = 0xFF, b = 0xAF, a = 12;
00288 LLColor4U llcolor4u1(r,g,b,a);
00289 const char *color = "12, 23, 132, 50";
00290 LLColor4U::parseColor4U(color, &llcolor4u1);
00291 ensure("parseColor4U() failed to parse the color value ", ((12 == llcolor4u1.mV[VX]) && (23 == llcolor4u1.mV[VY]) && (132 == llcolor4u1.mV[VZ])&& (50 == llcolor4u1.mV[VW])));
00292
00293 color = "12, 23, 132";
00294 ensure("2:parseColor4U() failed to parse the color value ", (FALSE == LLColor4U::parseColor4U(color, &llcolor4u1)));
00295
00296 color = "12";
00297 ensure("2:parseColor4U() failed to parse the color value ", (FALSE == LLColor4U::parseColor4U(color, &llcolor4u1)));
00298 }
00299
00300 template<> template<>
00301 void v4coloru_object::test<15>()
00302 {
00303 U8 r = 12, g = 123, b = 3, a = 2;
00304 LLColor4U llcolor4u(r,g,b,a),llcolor4u1;
00305 const F32 fVal = 3.f;
00306 llcolor4u1 = llcolor4u.multAll(fVal);
00307 ensure("multAll:Fail to multiply ", (((U8)llround(r * fVal) == llcolor4u1.mV[VX]) && (U8)llround(g * fVal) == llcolor4u1.mV[VY]
00308 && ((U8)llround(b * fVal) == llcolor4u1.mV[VZ])&& ((U8)llround(a * fVal) == llcolor4u1.mV[VW])));
00309 }
00310
00311 template<> template<>
00312 void v4coloru_object::test<16>()
00313 {
00314 U8 r1 = 12, g1 = 123, b1 = 3, a1 = 2;
00315 U8 r2 = 23, g2 = 230, b2 = 124, a2 = 255;
00316 LLColor4U llcolor4u(r1,g1,b1,a1),llcolor4u1(r2,g2,b2,a2);
00317 llcolor4u1 = llcolor4u1.addClampMax(llcolor4u);
00318 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])));
00319
00320 r1 = 132, g1 = 3, b1 = 3, a1 = 2;
00321 r2 = 123, g2 = 230, b2 = 154, a2 = 25;
00322 LLColor4U llcolor4u2(r1,g1,b1,a1),llcolor4u3(r2,g2,b2,a2);
00323 llcolor4u3 = llcolor4u3.addClampMax(llcolor4u2);
00324 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])));
00325 }
00326
00327 template<> template<>
00328 void v4coloru_object::test<17>()
00329 {
00330 F32 r = 23.f, g = 12.32f, b = -12.3f;
00331 LLColor3 color3(r,g,b);
00332 LLColor4U llcolor4u;
00333 llcolor4u.setVecScaleClamp(color3);
00334 const S32 MAX_COLOR = 255;
00335 F32 color_scale_factor = MAX_COLOR/r;
00336 S32 r2 = llround(r * color_scale_factor);
00337 S32 g2 = llround(g * color_scale_factor);
00338 ensure("setVecScaleClamp():Fail to add the value ", ((r2 == llcolor4u.mV[VX]) && (g2 == llcolor4u.mV[VY]) && (0 == llcolor4u.mV[VZ])&& (255 == llcolor4u.mV[VW])));
00339 }
00340 }