c2687874e1d7ab0744f09418c021972db17ea8e0
[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 BOOST_AUTO_TEST_CASE( serialize_color )
53 {
54   const Color color1(1.0, 1.0, 1.0, 1.0);
55
56   std::ostringstream oss;
57   // allocate/deallocate serialization components
58   {
59     boost::archive::text_oarchive oarchive(oss);
60     oarchive << color1;
61   }
62   Color color2;
63   {
64     std::istringstream iss(oss.str());
65     boost::archive::text_iarchive iarchive(iss);
66     iarchive >> color2;
67   }
68   BOOST_CHECK_EQUAL(color1, color2);
69 }  
70
71 BOOST_AUTO_TEST_CASE( serialize_xml_color )
72 {
73   const Color color1(0.0, 0.5, 0.0, 0.0);
74
75   std::ostringstream oss;
76   // allocate/deallocate serialization components
77   {
78     boost::archive::xml_oarchive oarchive(oss);
79     oarchive << boost::serialization::make_nvp("color", color1);
80   }
81   //std::cout << "XML Color: " << oss.str() << std::endl;
82   Color color2;
83   {
84     std::istringstream iss(oss.str());
85     boost::archive::xml_iarchive iarchive(iss);
86     iarchive >> boost::serialization::make_nvp("color", color2);
87   }
88   BOOST_CHECK_EQUAL(color1, color2);
89 }