v4color_tut.cpp

Go to the documentation of this file.
00001 
00035 #include <tut/tut.h>
00036 #include "linden_common.h"
00037 #include "lltut.h"
00038 #include "v4coloru.h"
00039 #include "llsd.h"
00040 #include "v3color.h"
00041 #include "v4color.h"
00042 
00043 
00044 namespace tut
00045 {
00046         struct v4color_data
00047         {
00048         };
00049         typedef test_group<v4color_data> v4color_test;
00050         typedef v4color_test::object v4color_object;
00051         tut::v4color_test v4color_testcase("v4color");
00052 
00053         template<> template<>
00054         void v4color_object::test<1>()
00055         {
00056                 LLColor4 llcolor4;
00057                 ensure("1:LLColor4:Fail to initialize ", ((0 == llcolor4.mV[VX]) && (0 == llcolor4.mV[VY]) && (0 == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW])));
00058 
00059                 F32 r = 0x20, g = 0xFFFF, b = 0xFF, a = 0xAF;
00060                 LLColor4 llcolor4a(r,g,b);
00061                 ensure("2:LLColor4:Fail to initialize ", ((r == llcolor4a.mV[VX]) && (g == llcolor4a.mV[VY]) && (b == llcolor4a.mV[VZ])&& (1.0f == llcolor4a.mV[VW])));
00062                 
00063                 LLColor4 llcolor4b(r,g,b,a);
00064                 ensure("3:LLColor4:Fail to initialize ", ((r == llcolor4b.mV[VX]) && (g == llcolor4b.mV[VY]) && (b == llcolor4b.mV[VZ])&& (a == llcolor4b.mV[VW])));
00065                 
00066                 const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f};
00067                 LLColor4 llcolor4c(vec);
00068                 ensure("4:LLColor4:Fail to initialize ", ((vec[0] == llcolor4c.mV[VX]) && (vec[1] == llcolor4c.mV[VY]) && (vec[2] == llcolor4c.mV[VZ])&& (vec[3] == llcolor4c.mV[VW])));                
00069                 
00070                 LLColor3 llcolor3(-2.23f,1.01f,42.3f);
00071                 F32 val = -.1f;
00072                 LLColor4 llcolor4d(llcolor3,val);
00073                 ensure("5:LLColor4:Fail to initialize ", ((llcolor3.mV[VX] == llcolor4d.mV[VX]) && (llcolor3.mV[VY] == llcolor4d.mV[VY]) && (llcolor3.mV[VZ] == llcolor4d.mV[VZ])&& (val == llcolor4d.mV[VW])));
00074 
00075                 LLSD sd = llcolor4d.getValue();
00076                 LLColor4 llcolor4e(sd);
00077                 ensure_equals("6:LLColor4:(LLSD) failed ", llcolor4d, llcolor4e);
00078                 
00079                 U8 r1 = 0xF2, g1 = 0xFA, b1 = 0xBF;
00080                 LLColor4U color4u(r1,g1,b1);
00081                 LLColor4 llcolor4g(color4u);
00082                 const F32 SCALE = 1.f/255.f;
00083                 F32 r2 = r1*SCALE, g2 = g1* SCALE, b2 = b1* SCALE;
00084                 ensure("7:LLColor4:Fail to initialize ", ((r2 == llcolor4g.mV[VX]) && (g2 == llcolor4g.mV[VY]) && (b2 == llcolor4g.mV[VZ])));
00085         }
00086 
00087         template<> template<>
00088         void v4color_object::test<2>()
00089         {
00090                 LLColor4 llcolor(1.0, 2.0, 3.0, 4.0);
00091                 LLSD llsd = llcolor.getValue();
00092                 LLColor4 llcolor4(llsd), llcolor4a;
00093                 llcolor4a.setValue(llsd);
00094                 ensure("setValue: failed", (llcolor4 == llcolor4a));
00095                 LLSD sd = llcolor4a.getValue();
00096                 LLColor4 llcolor4b(sd);
00097                 ensure("getValue: Failed ", (llcolor4b == llcolor4a));
00098         }
00099 
00100         template<> template<>
00101         void v4color_object::test<3>()
00102         {
00103                 F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0xAF;
00104                 LLColor4 llcolor4(r,g,b,a);
00105                 llcolor4.setToBlack();
00106                 ensure("setToBlack:Fail to set the black ", ((0 == llcolor4.mV[VX]) && (0 == llcolor4.mV[VY]) && (0 == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW])));
00107 
00108                 llcolor4.setToWhite();
00109                 ensure("setToWhite:Fail to set the white ", ((1.f == llcolor4.mV[VX]) && (1.f == llcolor4.mV[VY]) && (1.f == llcolor4.mV[VZ])&& (1.0f == llcolor4.mV[VW])));
00110         }
00111 
00112         template<> template<>
00113         void v4color_object::test<4>()
00114         {
00115                 F32 r = 0x20, g = 0xFFFF, b = 0xFF, a = 0xAF;
00116                 LLColor4 llcolor4;
00117                 llcolor4.setVec(r,g,b);
00118                 ensure("1:setVec:Fail to set the values ", ((r == llcolor4.mV[VX]) && (g == llcolor4.mV[VY]) && (b == llcolor4.mV[VZ])&& (1.f == llcolor4.mV[VW])));
00119 
00120                 llcolor4.setVec(r,g,b,a);
00121                 ensure("2:setVec:Fail to set the values ", ((r == llcolor4.mV[VX]) && (g == llcolor4.mV[VY]) && (b == llcolor4.mV[VZ])&& (a == llcolor4.mV[VW])));
00122 
00123                 LLColor4 llcolor4a; 
00124                 llcolor4a.setVec(llcolor4);
00125                 ensure_equals("3:setVec:Fail to set the values ", llcolor4a,llcolor4);
00126 
00127                 LLColor3 llcolor3(-2.23f,1.01f,42.3f);
00128                 llcolor4a.setVec(llcolor3);
00129                 ensure("4:setVec:Fail to set the values ", ((llcolor3.mV[VX] == llcolor4a.mV[VX]) && (llcolor3.mV[VY] == llcolor4a.mV[VY]) && (llcolor3.mV[VZ] == llcolor4a.mV[VZ])));
00130 
00131                 F32 val = -.33f;
00132                 llcolor4a.setVec(llcolor3,val);
00133                 ensure("4:setVec:Fail to set the values ", ((llcolor3.mV[VX] == llcolor4a.mV[VX]) && (llcolor3.mV[VY] == llcolor4a.mV[VY]) && (llcolor3.mV[VZ] == llcolor4a.mV[VZ]) && (val == llcolor4a.mV[VW])));
00134 
00135                 const F32 vec[4] = {.112f ,23.2f, -4.2f, -.0001f};
00136                 LLColor4 llcolor4c;
00137                 llcolor4c.setVec(vec);
00138                 ensure("5:setVec:Fail to initialize ", ((vec[0] == llcolor4c.mV[VX]) && (vec[1] == llcolor4c.mV[VY]) && (vec[2] == llcolor4c.mV[VZ])&& (vec[3] == llcolor4c.mV[VW])));          
00139 
00140                 U8 r1 = 0xF2, g1 = 0xFA, b1= 0xBF;
00141                 LLColor4U color4u(r1,g1,b1);
00142                 llcolor4.setVec(color4u);
00143                 const F32 SCALE = 1.f/255.f;
00144                 F32 r2 = r1*SCALE, g2 = g1* SCALE, b2 = b1* SCALE;
00145                 ensure("6:setVec:Fail to initialize ", ((r2 == llcolor4.mV[VX]) && (g2 == llcolor4.mV[VY]) && (b2 == llcolor4.mV[VZ])));
00146         }
00147 
00148         template<> template<>
00149         void v4color_object::test<5>()
00150         {
00151                 F32 alpha = 0xAF;
00152                 LLColor4 llcolor4;
00153                 llcolor4.setAlpha(alpha);
00154                 ensure("setAlpha:Fail to initialize ", (alpha == llcolor4.mV[VW]));
00155         }
00156 
00157         template<> template<>
00158         void v4color_object::test<6>()
00159         {
00160                 F32 r = 0x20, g = 0xFFFF, b = 0xFF;
00161                 LLColor4 llcolor4(r,g,b);
00162                 ensure("magVecSquared:Fail ", is_approx_equal(llcolor4.magVecSquared(), (r*r + g*g + b*b)));
00163                 ensure("magVec:Fail ", is_approx_equal(llcolor4.magVec(), fsqrtf(r*r + g*g + b*b)));
00164         }
00165 
00166         template<> template<>
00167         void v4color_object::test<7>()
00168         {
00169                 F32 r = 0x20, g = 0xFFFF, b = 0xFF;
00170                 LLColor4 llcolor4(r,g,b);
00171                 F32 vecMag = llcolor4.normVec();
00172                 F32 mag = fsqrtf(r*r + g*g + b*b);
00173                 F32 oomag = 1.f / mag;
00174                 F32 val1 = r * oomag, val2 = g * oomag, val3 = b * oomag;
00175                 ensure("1:normVec failed ", (is_approx_equal(val1, llcolor4.mV[0]) && is_approx_equal(val2, llcolor4.mV[1]) && is_approx_equal(val3, llcolor4.mV[2]) && is_approx_equal(vecMag, mag)));
00176         }
00177 
00178         template<> template<>
00179         void v4color_object::test<8>()
00180         {
00181                 LLColor4 llcolor4;
00182                 ensure("1:isOpaque failed ",(1 == llcolor4.isOpaque()));
00183                 F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 1.f;
00184                 llcolor4.setVec(r,g,b,a);
00185                 ensure("2:isOpaque failed ",(1 == llcolor4.isOpaque()));
00186                 a = 2.f;
00187                 llcolor4.setVec(r,g,b,a);
00188                 ensure("3:isOpaque failed ",(0 == llcolor4.isOpaque()));
00189         }
00190 
00191         template<> template<>
00192         void v4color_object::test<9>()
00193         {
00194                 F32 r = 0x20, g = 0xFFFF, b = 0xFF;
00195                 LLColor4 llcolor4(r,g,b);
00196                 ensure("1:operator [] failed",( r ==  llcolor4[0]));    
00197                 ensure("2:operator [] failed",( g ==  llcolor4[1]));
00198                 ensure("3:operator [] failed",( b ==  llcolor4[2]));
00199 
00200                 r = 0xA20, g = 0xFBFF, b = 0xFFF;
00201                 llcolor4.setVec(r,g,b);
00202                 F32 &ref1 = llcolor4[0];
00203                 ensure("4:operator [] failed",( ref1 ==  llcolor4[0]));
00204                 F32 &ref2 = llcolor4[1];
00205                 ensure("5:operator [] failed",( ref2 ==  llcolor4[1]));
00206                 F32 &ref3 = llcolor4[2];
00207                 ensure("6:operator [] failed",( ref3 ==  llcolor4[2]));
00208         }
00209 
00210         template<> template<>
00211         void v4color_object::test<10>()
00212         {
00213                 F32 r = 0x20, g = 0xFFFF, b = 0xFF;
00214                 LLColor3 llcolor3(r,g,b);
00215                 LLColor4 llcolor4a,llcolor4b;
00216                 llcolor4a = llcolor3;
00217                 ensure("Operator=:Fail to initialize ", ((llcolor3.mV[0] == llcolor4a.mV[VX]) && (llcolor3.mV[1] == llcolor4a.mV[VY]) && (llcolor3.mV[2] == llcolor4a.mV[VZ])));
00218                 LLSD sd = llcolor4a.getValue();
00219                 llcolor4b = sd;
00220                 ensure_equals("Operator= LLSD:Fail ", llcolor4a, llcolor4b);
00221         }
00222 
00223         template<> template<>
00224         void v4color_object::test<11>()
00225         {
00226                 F32 r = 0x20, g = 0xFFFF, b = 0xFF;
00227                 std::ostringstream stream1, stream2;
00228                 LLColor4 llcolor4a(r,g,b),llcolor4b;
00229                 stream1 << llcolor4a;
00230                 llcolor4b.setVec(r,g,b);
00231                 stream2 << llcolor4b;
00232                 ensure("operator << failed ", (stream1.str() == stream2.str()));        
00233         }
00234 
00235         template<> template<>
00236         void v4color_object::test<12>()
00237         {
00238                 F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF;
00239                 F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF;
00240                 LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c;
00241                 llcolor4c = llcolor4b + llcolor4a;
00242                 ensure("operator+:Fail to Add the values ",  (is_approx_equal(r1+r2,llcolor4c.mV[VX]) && is_approx_equal(g1+g2,llcolor4c.mV[VY]) && is_approx_equal(b1+b2,llcolor4c.mV[VZ])));
00243 
00244                 llcolor4b += llcolor4a;
00245                 ensure("operator+=:Fail to Add the values ",  (is_approx_equal(r1+r2,llcolor4b.mV[VX]) && is_approx_equal(g1+g2,llcolor4b.mV[VY]) && is_approx_equal(b1+b2,llcolor4b.mV[VZ])));
00246         }
00247 
00248         template<> template<>
00249         void v4color_object::test<13>()
00250         {
00251                 F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF;
00252                 F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF;
00253                 LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c;
00254                 llcolor4c = llcolor4a - llcolor4b;
00255                 ensure("operator-:Fail to subtract the values ",  (is_approx_equal(r1-r2,llcolor4c.mV[VX]) && is_approx_equal(g1-g2,llcolor4c.mV[VY]) && is_approx_equal(b1-b2,llcolor4c.mV[VZ])));
00256 
00257                 llcolor4a -= llcolor4b;
00258                 ensure("operator-=:Fail to subtract the values ",  (is_approx_equal(r1-r2,llcolor4a.mV[VX]) && is_approx_equal(g1-g2,llcolor4a.mV[VY]) && is_approx_equal(b1-b2,llcolor4a.mV[VZ])));
00259         }
00260 
00261         template<> template<>
00262         void v4color_object::test<14>()
00263         {
00264                 F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF;
00265                 F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF;
00266                 LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c;
00267                 llcolor4c = llcolor4a * llcolor4b;
00268                 ensure("1:operator*:Fail to multiply the values",  (is_approx_equal(r1*r2,llcolor4c.mV[VX]) && is_approx_equal(g1*g2,llcolor4c.mV[VY]) && is_approx_equal(b1*b2,llcolor4c.mV[VZ])));
00269                 
00270                 F32 mulVal = 3.33f;
00271                 llcolor4c = llcolor4a * mulVal;
00272                 ensure("2:operator*:Fail ",  (is_approx_equal(r1*mulVal,llcolor4c.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4c.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4c.mV[VZ])));
00273                 llcolor4c = mulVal * llcolor4a;
00274                 ensure("3:operator*:Fail to multiply the values",  (is_approx_equal(r1*mulVal,llcolor4c.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4c.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4c.mV[VZ])));
00275 
00276                 llcolor4a *= mulVal;
00277                 ensure("4:operator*=:Fail to multiply the values ",  (is_approx_equal(r1*mulVal,llcolor4a.mV[VX]) && is_approx_equal(g1*mulVal,llcolor4a.mV[VY]) && is_approx_equal(b1*mulVal,llcolor4a.mV[VZ])));
00278 
00279                 LLColor4 llcolor4d(r1,g1,b1),llcolor4e(r2,g2,b2);
00280                 llcolor4e *= llcolor4d;
00281                 ensure("5:operator*=:Fail to multiply the values ",  (is_approx_equal(r1*r2,llcolor4e.mV[VX]) && is_approx_equal(g1*g2,llcolor4e.mV[VY]) && is_approx_equal(b1*b2,llcolor4e.mV[VZ])));
00282         }
00283 
00284         template<> template<>
00285         void v4color_object::test<15>()
00286         {
00287                 F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0x30;
00288                 F32 div = 12.345f;
00289                 LLColor4 llcolor4a(r,g,b,a),llcolor4b;
00290                 llcolor4b = llcolor4a % div;//chnage only alpha value nor r,g,b;
00291                 ensure("1operator%:Fail ",  (is_approx_equal(r,llcolor4b.mV[VX]) && is_approx_equal(g,llcolor4b.mV[VY]) && is_approx_equal(b,llcolor4b.mV[VZ])&& is_approx_equal(div*a,llcolor4b.mV[VW])));
00292                 
00293                 llcolor4b = div % llcolor4a;
00294                 ensure("2operator%:Fail ",  (is_approx_equal(r,llcolor4b.mV[VX]) && is_approx_equal(g,llcolor4b.mV[VY]) && is_approx_equal(b,llcolor4b.mV[VZ])&& is_approx_equal(div*a,llcolor4b.mV[VW])));
00295 
00296                 llcolor4a %= div;
00297                 ensure("operator%=:Fail ",  (is_approx_equal(a*div,llcolor4a.mV[VW])));
00298         }
00299 
00300         template<> template<>
00301         void v4color_object::test<16>()
00302         {
00303                 F32 r = 0x20, g = 0xFFFF, b = 0xFF,a = 0x30;
00304                 LLColor4 llcolor4a(r,g,b,a),llcolor4b;
00305                 llcolor4b = llcolor4a;
00306                 ensure("1:operator== failed to ensure the equality ", (llcolor4b == llcolor4a));        
00307                 F32 r1 = 0x2, g1 = 0xFF, b1 = 0xFA;
00308                 LLColor3 llcolor3(r1,g1,b1);
00309                 llcolor4b = llcolor3;
00310                 ensure("2:operator== failed to ensure the equality ", (llcolor4b == llcolor3)); 
00311                 ensure("2:operator!= failed to ensure the equality ", (llcolor4a != llcolor3));
00312         }
00313 
00314         template<> template<>
00315         void v4color_object::test<17>()
00316         {
00317                 F32 r = 0x20, g = 0xFFFF, b = 0xFF;
00318                 LLColor4 llcolor4a(r,g,b),llcolor4b;
00319                 LLColor3 llcolor3 = vec4to3(llcolor4a);
00320                 ensure("vec4to3:Fail to convert vec4 to vec3 ",  (is_approx_equal(llcolor3.mV[VX],llcolor4a.mV[VX]) && is_approx_equal(llcolor3.mV[VY],llcolor4a.mV[VY]) && is_approx_equal(llcolor3.mV[VZ],llcolor4a.mV[VZ])));
00321                 llcolor4b = vec3to4(llcolor3);
00322                 ensure_equals("vec3to4:Fail to convert vec3 to vec4 ",  llcolor4b, llcolor4a);
00323         }
00324 
00325         template<> template<>
00326         void v4color_object::test<18>()
00327         {
00328                 F32 r1 = 0x20, g1 = 0xFFFF, b1 = 0xFF, val = 0x20;
00329                 F32 r2 = 0xABF, g2 = 0xFB, b2 = 0xFFF;
00330                 LLColor4 llcolor4a(r1,g1,b1),llcolor4b(r2,g2,b2),llcolor4c;
00331                 llcolor4c = lerp(llcolor4a,llcolor4b,val);
00332                 ensure("lerp:Fail ",  (is_approx_equal(r1 + (r2 - r1)* val,llcolor4c.mV[VX]) && is_approx_equal(g1 + (g2 - g1)* val,llcolor4c.mV[VY]) && is_approx_equal(b1 + (b2 - b1)* val,llcolor4c.mV[VZ])));
00333         }
00334 
00335         template<> template<>
00336         void v4color_object::test<19>()
00337         {
00338                 F32 r = 12.0f, g = -2.3f, b = 1.32f, a = 5.0f;
00339                 LLColor4 llcolor4a(r,g,b,a),llcolor4b;
00340                 const char *color = "red";
00341                 LLColor4::parseColor(color, &llcolor4b);
00342                 ensure_equals("1:parseColor() failed to parse the color value ", llcolor4b, LLColor4::red);
00343 
00344                 color = "12.0, -2.3, 1.32, 5.0";
00345                 LLColor4::parseColor(color, &llcolor4b);
00346                 llcolor4a = llcolor4a * (1.f / 255.f);
00347                 ensure_equals("2:parseColor() failed to parse the color value ",  llcolor4a,llcolor4b);
00348 
00349                 color = "yellow5";
00350                 llcolor4a.setVec(r,g,b);
00351                 LLColor4::parseColor(color, &llcolor4a);
00352                 ensure_equals("3:parseColor() failed to parse the color value ", llcolor4a, LLColor4::yellow5);
00353         }
00354 
00355         template<> template<>
00356         void v4color_object::test<20>()
00357         {
00358                 F32 r = 12.0f, g = -2.3f, b = 1.32f, a = 5.0f;
00359                 LLColor4 llcolor4a(r,g,b,a),llcolor4b;
00360                 const char *color = "12.0, -2.3, 1.32, 5.0";
00361                 LLColor4::parseColor4(color, &llcolor4b);
00362                 ensure_equals("parseColor4() failed to parse the color value ",  llcolor4a, llcolor4b);
00363         }
00364 }

Generated on Thu Jul 1 06:10:01 2010 for Second Life Viewer by  doxygen 1.4.7