351a54a06021e5c324ee21dc5afd185e0747a7d9
[mussa.git] / alg / test / test_color.cpp
1 #define BOOST_AUTO_TEST_MAIN
2 #include <boost/test/auto_unit_test.hpp>
3 #include <boost/test/floating_point_comparison.hpp>
4 #include <string>
5 #include <sstream>
6
7 #include <boost/archive/text_oarchive.hpp>
8 #include <boost/archive/text_iarchive.hpp>
9 #include <boost/archive/xml_oarchive.hpp>
10 #include <boost/archive/xml_iarchive.hpp>
11
12 #include "alg/color.hpp"
13
14 #include <iostream>
15
16 using namespace std;
17
18 BOOST_AUTO_TEST_CASE ( color )
19 {
20   const float tolerance = 1e-6;
21   const float zero = 0.0;
22   const float dotone = 0.1;
23   const float dottwo = 0.2;
24   const float dotthree = 0.3;
25   const float dotfour = 0.4;
26   Color c1;
27   BOOST_CHECK_CLOSE (c1.r(), zero, tolerance );
28   BOOST_CHECK_CLOSE (c1.g(), zero, tolerance );
29   BOOST_CHECK_CLOSE (c1.b(), zero, tolerance );
30   BOOST_CHECK_CLOSE (c1.a(), zero, tolerance );
31
32   Color c2(dotone, dottwo, dotthree, dotfour);
33   BOOST_CHECK_CLOSE (c2.r(), dotone, tolerance );
34   BOOST_CHECK_CLOSE (c2.g(), dottwo, tolerance );
35   BOOST_CHECK_CLOSE (c2.b(), dotthree, tolerance );
36   BOOST_CHECK_CLOSE (c2.a(), dotfour, tolerance );
37
38   Color c3(c2);
39   BOOST_CHECK_CLOSE (c3.r(), dotone, tolerance );
40   BOOST_CHECK_CLOSE (c3.g(), dottwo, tolerance );
41   BOOST_CHECK_CLOSE (c3.b(), dotthree, tolerance );
42   BOOST_CHECK_CLOSE (c3.a(), dotfour, tolerance );
43   BOOST_CHECK_EQUAL ( c2, c3 );
44
45   const float *colors = c3.get();
46   BOOST_CHECK_CLOSE (colors[Color::RedChannel   ], dotone, tolerance );
47   BOOST_CHECK_CLOSE (colors[Color::GreenChannel ], dottwo, tolerance );
48   BOOST_CHECK_CLOSE (colors[Color::BlueChannel  ], dotthree, tolerance );
49   BOOST_CHECK_CLOSE (colors[Color::AlphaChannel ], dotfour, tolerance );
50 }
51
52 /*
53 BOOST_AUTO_TEST_CASE( serialize_color )
54 {
55   const Color color1(1.0, 1.0, 1.0, 1.0);
56
57   std::ostringstream oss;
58   // allocate/deallocate serialization components
59   {
60     boost::archive::text_oarchive oarchive(oss);
61     oarchive << color1;
62   }
63   Color color2;
64   {
65     std::istringstream iss(oss.str());
66     boost::archive::text_iarchive iarchive(iss);
67     iarchive >> color2;
68   }
69   BOOST_CHECK_EQUAL(color1, color2);
70 }  
71
72 BOOST_AUTO_TEST_CASE( serialize_xml_color )
73 {
74   const Color color1(0.0, 0.5, 0.0, 0.0);
75
76   std::ostringstream oss;
77   // allocate/deallocate serialization components
78   {
79     boost::archive::xml_oarchive oarchive(oss);
80     oarchive << boost::serialization::make_nvp("color", color1);
81   }
82   //std::cout << "XML Color: " << oss.str() << std::endl;
83   Color color2;
84   {
85     std::istringstream iss(oss.str());
86     boost::archive::xml_iarchive iarchive(iss);
87     iarchive >> boost::serialization::make_nvp("color", color2);
88   }
89   BOOST_CHECK_EQUAL(color1, color2);
90 }
91 */