00001
00034 #include <tut/tut.h>
00035 #include "linden_common.h"
00036 #include "lltut.h"
00037 #include "v3color.h"
00038
00039
00040 namespace tut
00041 {
00042 struct v3color_data
00043 {
00044 };
00045 typedef test_group<v3color_data> v3color_test;
00046 typedef v3color_test::object v3color_object;
00047 tut::v3color_test v3color_testcase("v3color");
00048
00049 template<> template<>
00050 void v3color_object::test<1>()
00051 {
00052 LLColor3 llcolor3;
00053 ensure("1:LLColor3:Fail to initialize ", (0.0f == llcolor3.mV[0]) && (0.0f == llcolor3.mV[1]) && (0.0f == llcolor3.mV[2]));
00054 F32 r = 2.0f, g = 3.2f, b = 1.f;
00055 F32 v1,v2,v3;
00056 LLColor3 llcolor3a(r,g,b);
00057 ensure("2:LLColor3:Fail to initialize " ,(2.0f == llcolor3a.mV[0]) && (3.2f == llcolor3a.mV[1]) && (1.f == llcolor3a.mV[2]));
00058
00059 const F32 vec[3] = {2.0f, 3.2f,1.f};
00060 LLColor3 llcolor3b(vec);
00061 ensure("3:LLColor3:Fail to initialize " ,(2.0f == llcolor3b.mV[0]) && (3.2f == llcolor3b.mV[1]) && (1.f == llcolor3b.mV[2]));
00062 char* str = "561122";
00063 LLColor3 llcolor3c(str);
00064 v1 = (F32)86.0f/255.0f;
00065 v2 = (F32)17.0f/255.0f;
00066 v3 = (F32)34.0f/255.f;
00067 ensure("4:LLColor3:Fail to initialize " ,(v1 == llcolor3c.mV[0]) && (v2 == llcolor3c.mV[1]) && (v3 == llcolor3c.mV[2]));
00068 }
00069
00070 template<> template<>
00071 void v3color_object::test<2>()
00072 {
00073 LLColor3 llcolor3;
00074 llcolor3.setToBlack();
00075 ensure("setToBlack:Fail to set black ", ((llcolor3.mV[0] == 0.f) && (llcolor3.mV[1] == 0.f) && (llcolor3.mV[2] == 0.f)));
00076 llcolor3.setToWhite();
00077 ensure("setToWhite:Fail to set white ", ((llcolor3.mV[0] == 1.f) && (llcolor3.mV[1] == 1.f) && (llcolor3.mV[2] == 1.f)));
00078 }
00079
00080 template<> template<>
00081 void v3color_object::test<3>()
00082 {
00083 F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
00084 LLColor3 llcolor3, llcolor3a;
00085 llcolor3.setVec(r,g,b);
00086 ensure("1:setVec(r,g,b) Fail ",((r == llcolor3.mV[0]) && (g == llcolor3.mV[1]) && (b == llcolor3.mV[2])));
00087 llcolor3a.setVec(llcolor3);
00088 ensure_equals("2:setVec(LLColor3) Fail ", llcolor3,llcolor3a);
00089 F32 vec[3] = {1.2324f, 2.45634f, .234563f};
00090 llcolor3.setToBlack();
00091 llcolor3.setVec(vec);
00092 ensure("3:setVec(F32*) Fail ",((vec[0] == llcolor3.mV[0]) && (vec[1] == llcolor3.mV[1]) && (vec[2] == llcolor3.mV[2])));
00093 }
00094
00095 template<> template<>
00096 void v3color_object::test<4>()
00097 {
00098 F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
00099 LLColor3 llcolor3(r,g,b);
00100 ensure("magVecSquared:Fail ", is_approx_equal(llcolor3.magVecSquared(), (r*r + g*g + b*b)));
00101 ensure("magVec:Fail ", is_approx_equal(llcolor3.magVec(), fsqrtf(r*r + g*g + b*b)));
00102 }
00103
00104 template<> template<>
00105 void v3color_object::test<5>()
00106 {
00107 F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
00108 F32 val1, val2,val3;
00109 LLColor3 llcolor3(r,g,b);
00110 F32 vecMag = llcolor3.normVec();
00111 F32 mag = fsqrtf(r*r + g*g + b*b);
00112 F32 oomag = 1.f / mag;
00113 val1 = r * oomag;
00114 val2 = g * oomag;
00115 val3 = b * oomag;
00116 ensure("1:normVec failed ", (is_approx_equal(val1, llcolor3.mV[0]) && is_approx_equal(val2, llcolor3.mV[1]) && is_approx_equal(val3, llcolor3.mV[2]) && is_approx_equal(vecMag, mag)));
00117 r = .000000000f, g = 0.f, b = 0.0f;
00118 llcolor3.setVec(r,g,b);
00119 vecMag = llcolor3.normVec();
00120 ensure("2:normVec failed should be 0. ", (0. == llcolor3.mV[0] && 0. == llcolor3.mV[1] && 0. == llcolor3.mV[2] && vecMag == 0.));
00121 }
00122
00123 template<> template<>
00124 void v3color_object::test<6>()
00125 {
00126 F32 r = 2.3436212f, g = -1231.f, b = .7849321232f;
00127 std::ostringstream stream1, stream2;
00128 LLColor3 llcolor3(r,g,b),llcolor3a;
00129 stream1 << llcolor3;
00130 llcolor3a.setVec(r,g,b);
00131 stream2 << llcolor3a;
00132 ensure("operator << failed ", (stream1.str() == stream2.str()));
00133 }
00134
00135 template<> template<>
00136 void v3color_object::test<7>()
00137 {
00138 F32 r = 2.3436212f, g = -1231.f, b = .7849321232f;
00139 LLColor3 llcolor3(r,g,b),llcolor3a;
00140 llcolor3a = llcolor3;
00141 ensure("operator == failed ", (llcolor3a == llcolor3));
00142 }
00143
00144 template<> template<>
00145 void v3color_object::test<8>()
00146 {
00147 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00148 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b;
00149 llcolor3b = llcolor3 + llcolor3a ;
00150 ensure("1:operator+ failed",is_approx_equal(r1+r2 ,llcolor3b.mV[0]) && is_approx_equal(g1+g2,llcolor3b.mV[1])&& is_approx_equal(b1+b2,llcolor3b.mV[2]));
00151 r1 = -.235f, g1 = -24.32f, b1 = 2.13f, r2 = -2.3f, g2 = 1.f, b2 = 34.21f;
00152 llcolor3.setVec(r1,g1,b1);
00153 llcolor3a.setVec(r2,g2,b2);
00154 llcolor3b = llcolor3 + llcolor3a;
00155 ensure("2:operator+ failed",is_approx_equal(r1+r2 ,llcolor3b.mV[0]) && is_approx_equal(g1+g2,llcolor3b.mV[1])&& is_approx_equal(b1+b2,llcolor3b.mV[2]));
00156 }
00157
00158 template<> template<>
00159 void v3color_object::test<9>()
00160 {
00161 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00162 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b;
00163 llcolor3b = llcolor3 - llcolor3a ;
00164 ensure("1:operator- failed",is_approx_equal(r1-r2 ,llcolor3b.mV[0]) && is_approx_equal(g1-g2,llcolor3b.mV[1])&& is_approx_equal(b1-b2,llcolor3b.mV[2]));
00165 r1 = -.235f, g1 = -24.32f, b1 = 2.13f, r2 = -2.3f, g2 = 1.f, b2 = 34.21f;
00166 llcolor3.setVec(r1,g1,b1);
00167 llcolor3a.setVec(r2,g2,b2);
00168 llcolor3b = llcolor3 - llcolor3a;
00169 ensure("2:operator- failed",is_approx_equal(r1-r2 ,llcolor3b.mV[0]) && is_approx_equal(g1-g2,llcolor3b.mV[1])&& is_approx_equal(b1-b2,llcolor3b.mV[2]));
00170 }
00171
00172 template<> template<>
00173 void v3color_object::test<10>()
00174 {
00175 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00176 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2),llcolor3b;
00177 llcolor3b = llcolor3 * llcolor3a;
00178 ensure("1:operator* failed",is_approx_equal(r1*r2 ,llcolor3b.mV[0]) && is_approx_equal(g1*g2,llcolor3b.mV[1])&& is_approx_equal(b1*b2,llcolor3b.mV[2]));
00179 llcolor3a.setToBlack();
00180 F32 mulVal = 4.332f;
00181 llcolor3a = llcolor3 * mulVal;
00182 ensure("2:operator* failed",is_approx_equal(r1*mulVal ,llcolor3a.mV[0]) && is_approx_equal(g1*mulVal,llcolor3a.mV[1])&& is_approx_equal(b1*mulVal,llcolor3a.mV[2]));
00183 llcolor3a.setToBlack();
00184 llcolor3a = mulVal * llcolor3;
00185 ensure("3:operator* failed",is_approx_equal(r1*mulVal ,llcolor3a.mV[0]) && is_approx_equal(g1*mulVal,llcolor3a.mV[1])&& is_approx_equal(b1*mulVal,llcolor3a.mV[2]));
00186 }
00187
00188 template<> template<>
00189 void v3color_object::test<11>()
00190 {
00191 F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
00192 LLColor3 llcolor3(r,g,b),llcolor3a;
00193 llcolor3a = -llcolor3;
00194 ensure("operator- failed ", (-llcolor3a == llcolor3));
00195 }
00196
00197 template<> template<>
00198 void v3color_object::test<12>()
00199 {
00200 F32 r = 2.3436212f, g = 1231.f, b = 4.7849321232f;
00201 LLColor3 llcolor3(r,g,b),llcolor3a(r,g,b);
00202 ensure_equals("1:operator== failed",llcolor3a,llcolor3);
00203 r = 13.3436212f, g = -11.f, b = .7849321232f;
00204 llcolor3.setVec(r,g,b);
00205 llcolor3a.setVec(r,g,b);
00206 ensure_equals("2:operator== failed",llcolor3a,llcolor3);
00207 }
00208
00209 template<> template<>
00210 void v3color_object::test<13>()
00211 {
00212 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00213 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
00214 ensure("1:operator!= failed",(llcolor3 != llcolor3a));
00215 llcolor3.setToBlack();
00216 llcolor3a.setVec(llcolor3);
00217 ensure("2:operator!= failed", ( FALSE == (llcolor3a != llcolor3)));
00218 }
00219
00220 template<> template<>
00221 void v3color_object::test<14>()
00222 {
00223 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00224 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
00225 llcolor3a += llcolor3;
00226 ensure("1:operator+= failed",is_approx_equal(r1+r2 ,llcolor3a.mV[0]) && is_approx_equal(g1+g2,llcolor3a.mV[1])&& is_approx_equal(b1+b2,llcolor3a.mV[2]));
00227 llcolor3.setVec(r1,g1,b1);
00228 llcolor3a.setVec(r2,g2,b2);
00229 llcolor3a += llcolor3;
00230 ensure("2:operator+= failed",is_approx_equal(r1+r2 ,llcolor3a.mV[0]) && is_approx_equal(g1+g2,llcolor3a.mV[1])&& is_approx_equal(b1+b2,llcolor3a.mV[2]));
00231 }
00232
00233 template<> template<>
00234 void v3color_object::test<15>()
00235 {
00236 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00237 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
00238 llcolor3a -= llcolor3;
00239 ensure("1:operator-= failed", is_approx_equal(r2-r1, llcolor3a.mV[0]));
00240 ensure("2:operator-= failed", is_approx_equal(g2-g1, llcolor3a.mV[1]));
00241 ensure("3:operator-= failed", is_approx_equal(b2-b1, llcolor3a.mV[2]));
00242 llcolor3.setVec(r1,g1,b1);
00243 llcolor3a.setVec(r2,g2,b2);
00244 llcolor3a -= llcolor3;
00245 ensure("4:operator-= failed", is_approx_equal(r2-r1, llcolor3a.mV[0]));
00246 ensure("5:operator-= failed", is_approx_equal(g2-g1, llcolor3a.mV[1]));
00247 ensure("6:operator-= failed", is_approx_equal(b2-b1, llcolor3a.mV[2]));
00248 }
00249
00250 template<> template<>
00251 void v3color_object::test<16>()
00252 {
00253 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00254 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
00255 llcolor3a *= llcolor3;
00256 ensure("1:operator*= failed",is_approx_equal(r1*r2 ,llcolor3a.mV[0]) && is_approx_equal(g1*g2,llcolor3a.mV[1])&& is_approx_equal(b1*b2,llcolor3a.mV[2]));
00257 F32 mulVal = 4.332f;
00258 llcolor3 *=mulVal;
00259 ensure("2:operator*= failed",is_approx_equal(r1*mulVal ,llcolor3.mV[0]) && is_approx_equal(g1*mulVal,llcolor3.mV[1])&& is_approx_equal(b1*mulVal,llcolor3.mV[2]));
00260 }
00261
00262 template<> template<>
00263 void v3color_object::test<17>()
00264 {
00265 F32 r = 2.3436212f, g = -1231.f, b = .7849321232f;
00266 LLColor3 llcolor3(r,g,b);
00267 llcolor3.clamp();
00268 ensure("1:clamp:Fail to clamp " ,(1.0f == llcolor3.mV[0]) && (0.f == llcolor3.mV[1]) && (b == llcolor3.mV[2]));
00269 r = -2.3436212f, g = -1231.f, b = 67.7849321232f;
00270 llcolor3.setVec(r,g,b);
00271 llcolor3.clamp();
00272 ensure("2:clamp:Fail to clamp " ,(0.f == llcolor3.mV[0]) && (0.f == llcolor3.mV[1]) && (1.f == llcolor3.mV[2]));
00273 }
00274
00275 template<> template<>
00276 void v3color_object::test<18>()
00277 {
00278 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00279 F32 val = 2.3f,val1,val2,val3;
00280 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
00281 val1 = r1 + (r2 - r1)* val;
00282 val2 = g1 + (g2 - g1)* val;
00283 val3 = b1 + (b2 - b1)* val;
00284 LLColor3 llcolor3b = lerp(llcolor3,llcolor3a,val);
00285 ensure("lerp failed ", ((val1 ==llcolor3b.mV[0])&& (val2 ==llcolor3b.mV[1]) && (val3 ==llcolor3b.mV[2])));
00286 }
00287
00288 template<> template<>
00289 void v3color_object::test<19>()
00290 {
00291 F32 r1 =1.f, g1 = 2.f,b1 = 1.2f, r2 = -2.3f, g2 = 1.11f, b2 = 1234.234f;
00292 LLColor3 llcolor3(r1,g1,b1),llcolor3a(r2,g2,b2);
00293 F32 val = distVec(llcolor3,llcolor3a);
00294 ensure("distVec failed ", is_approx_equal(fsqrtf((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val));
00295
00296 F32 val1 = distVec_squared(llcolor3,llcolor3a);
00297 ensure("distVec_squared failed ", is_approx_equal(((r1-r2)*(r1-r2) + (g1-g2)*(g1-g2) + (b1-b2)*(b1-b2)) ,val1));
00298 }
00299
00300 template<> template<>
00301 void v3color_object::test<20>()
00302 {
00303 F32 r1 = 1.02223f, g1 = 22222.212f, b1 = 122222.00002f;
00304 LLColor3 llcolor31(r1,g1,b1);
00305
00306 LLSD sd = llcolor31.getValue();
00307 LLColor3 llcolor32;
00308 llcolor32.setValue(sd);
00309 ensure_equals("LLColor3::setValue/getValue failed", llcolor31, llcolor32);
00310
00311 LLColor3 llcolor33(sd);
00312 ensure_equals("LLColor3(LLSD) failed", llcolor31, llcolor33);
00313 }
00314 }