• R/O
  • SSH
  • HTTPS

iris-fmw: Commit


Commit MetaInfo

Revision257 (tree)
Time2012-01-11 22:53:07
Authorshirayanagi

Log Message

YUV 更新
iutest v0.13.0.1
gtest 互換性強化

Change Summary

Incremental Difference

--- trunk/framework/sample/Windows/unittest/src/container_test/test_color.cpp (revision 256)
+++ trunk/framework/sample/Windows/unittest/src/container_test/test_color.cpp (nonexistent)
@@ -1,65 +0,0 @@
1-//======================================================================
2-//-----------------------------------------------------------------------
3-/**
4- * @file test_color.cpp
5- * @brief FndColor テスト ファイル
6- *
7- * @author t.sirayanagi
8- * @version 1.0
9- *
10- * @par copyright
11- * Copyright (C) 2010 Takazumi Shirayanagi\n
12- * The new BSD License is applied to this software.
13- * see iris_LICENSE.txt
14-*/
15-//-----------------------------------------------------------------------
16-//======================================================================
17-#define _FILE_test_color_CPP_
18-
19-//======================================================================
20-// include
21-#include "unit/gt/gt_inchead.h"
22-#include "fnd/image/FndColor.h"
23-#include "iris_using.h"
24-
25-TEST(FndColorTest, Construct)
26-{
27- for( int i=0; i < 10000; ++i )
28- {
29- int R = rand() & 0xFF;
30- int G = rand() & 0xFF;
31- int B = rand() & 0xFF;
32- COLORREF color = RGB(R, G, B);
33- CCOLORREF clrref = color;
34- ASSERT_EQ( R, clrref.r() );
35- ASSERT_EQ( G, clrref.g() );
36- ASSERT_EQ( B, clrref.b() );
37- ASSERT_EQ( 0, clrref.a() );
38- }
39-}
40-
41-TEST(FndColorTest, Copy)
42-{
43- COLORREF color = RGB(0xFF, 0xCC, 0x66);
44- CCOLORREF clr1 = color;
45- CBGRA8888 clr2 = clr1;
46- CRGBA8888 clr3 = clr2;
47-
48- IrisFColor fclr1 = (IrisFColor)clr1;
49- IrisFColor fclr2 = (IrisFColor)clr2;
50- IrisFColor fclr3 = (IrisFColor)clr3;
51- ASSERT_FLOAT_EQ( 1.0f, fclr1.r );
52- ASSERT_FLOAT_EQ( 0.8f, fclr1.g );
53- ASSERT_FLOAT_EQ( 0.4f, fclr1.b );
54- ASSERT_FLOAT_EQ( 0.0f, fclr1.a );
55-
56- ASSERT_FLOAT_EQ( 1.0f, fclr2.r );
57- ASSERT_FLOAT_EQ( 0.8f, fclr2.g );
58- ASSERT_FLOAT_EQ( 0.4f, fclr2.b );
59- ASSERT_FLOAT_EQ( 1.0f, fclr2.a );
60-
61- ASSERT_FLOAT_EQ( 1.0f, fclr3.r );
62- ASSERT_FLOAT_EQ( 0.8f, fclr3.g );
63- ASSERT_FLOAT_EQ( 0.4f, fclr3.b );
64- ASSERT_FLOAT_EQ( 1.0f, fclr3.a );
65-}
--- trunk/framework/sample/Windows/unittest/src/fnd_image_test/test_yuv.cpp (nonexistent)
+++ trunk/framework/sample/Windows/unittest/src/fnd_image_test/test_yuv.cpp (revision 257)
@@ -0,0 +1,42 @@
1+//======================================================================
2+//-----------------------------------------------------------------------
3+/**
4+ * @file test_yuv.cpp
5+ * @brief FndYuv テスト ファイル
6+ *
7+ * @author t.sirayanagi
8+ * @version 1.0
9+ *
10+ * @par copyright
11+ * Copyright (C) 2012 Takazumi Shirayanagi\n
12+ * The new BSD License is applied to this software.
13+ * see iris_LICENSE.txt
14+*/
15+//-----------------------------------------------------------------------
16+//======================================================================
17+#define _FILE_test_color_CPP_
18+
19+//======================================================================
20+// include
21+#include "unit/gt/gt_inchead.h"
22+#include "fnd/image/FndYUV.h"
23+#include "iris_using.h"
24+
25+typedef testing::Types< CYCbCr<>, CYPbPr<> > YUVTypeParams;
26+
27+template<typename YUV>
28+class FndYUVTest : public testing::TestWithParam<YUV>
29+{
30+};
31+
32+TYPED_TEST_CASE(FndYUVTest, YUVTypeParams);
33+
34+TYPED_TEST(FndYUVTest, toRGB)
35+{
36+ ParamType yuv(CCOLORREF(0x33, 0xFF, 0xFF));
37+ CCOLORREF color = yuv;
38+ ASSERT_NEAR(0x33, color.r(), 10);
39+ ASSERT_NEAR(0xFF, color.g(), 10);
40+ ASSERT_NEAR(0xFF, color.b(), 10);
41+}
42+
--- trunk/framework/sample/Windows/unittest/src/fnd_image_test/test_color.cpp (nonexistent)
+++ trunk/framework/sample/Windows/unittest/src/fnd_image_test/test_color.cpp (revision 257)
@@ -0,0 +1,65 @@
1+//======================================================================
2+//-----------------------------------------------------------------------
3+/**
4+ * @file test_color.cpp
5+ * @brief FndColor テスト ファイル
6+ *
7+ * @author t.sirayanagi
8+ * @version 1.0
9+ *
10+ * @par copyright
11+ * Copyright (C) 2010 Takazumi Shirayanagi\n
12+ * The new BSD License is applied to this software.
13+ * see iris_LICENSE.txt
14+*/
15+//-----------------------------------------------------------------------
16+//======================================================================
17+#define _FILE_test_color_CPP_
18+
19+//======================================================================
20+// include
21+#include "unit/gt/gt_inchead.h"
22+#include "fnd/image/FndColor.h"
23+#include "iris_using.h"
24+
25+TEST(FndColorTest, Construct)
26+{
27+ for( int i=0; i < 10000; ++i )
28+ {
29+ int R = rand() & 0xFF;
30+ int G = rand() & 0xFF;
31+ int B = rand() & 0xFF;
32+ COLORREF color = RGB(R, G, B);
33+ CCOLORREF clrref = color;
34+ ASSERT_EQ( R, clrref.r() );
35+ ASSERT_EQ( G, clrref.g() );
36+ ASSERT_EQ( B, clrref.b() );
37+ ASSERT_EQ( 0, clrref.a() );
38+ }
39+}
40+
41+TEST(FndColorTest, Copy)
42+{
43+ COLORREF color = RGB(0xFF, 0xCC, 0x66);
44+ CCOLORREF clr1 = color;
45+ CBGRA8888 clr2 = clr1;
46+ CRGBA8888 clr3 = clr2;
47+
48+ IrisFColor fclr1 = (IrisFColor)clr1;
49+ IrisFColor fclr2 = (IrisFColor)clr2;
50+ IrisFColor fclr3 = (IrisFColor)clr3;
51+ ASSERT_FLOAT_EQ( 1.0f, fclr1.r );
52+ ASSERT_FLOAT_EQ( 0.8f, fclr1.g );
53+ ASSERT_FLOAT_EQ( 0.4f, fclr1.b );
54+ ASSERT_FLOAT_EQ( 0.0f, fclr1.a );
55+
56+ ASSERT_FLOAT_EQ( 1.0f, fclr2.r );
57+ ASSERT_FLOAT_EQ( 0.8f, fclr2.g );
58+ ASSERT_FLOAT_EQ( 0.4f, fclr2.b );
59+ ASSERT_FLOAT_EQ( 1.0f, fclr2.a );
60+
61+ ASSERT_FLOAT_EQ( 1.0f, fclr3.r );
62+ ASSERT_FLOAT_EQ( 0.8f, fclr3.g );
63+ ASSERT_FLOAT_EQ( 0.4f, fclr3.b );
64+ ASSERT_FLOAT_EQ( 1.0f, fclr3.a );
65+}
--- trunk/framework/src/fnd/image/FndColor.h (revision 256)
+++ trunk/framework/src/fnd/image/FndColor.h (revision 257)
@@ -8,7 +8,7 @@
88 * @version 1.0
99 *
1010 * @par copyright
11- * Copyright (C) 2010-2011 Takazumi Shirayanagi\n
11+ * Copyright (C) 2010-2012 Takazumi Shirayanagi\n
1212 * The new BSD License is applied to this software.
1313 * see iris_LICENSE.txt
1414 */
@@ -29,8 +29,8 @@
2929
3030 //======================================================================
3131 // declare
32-template<typename _TN, int _RBITS, int _GBITS, int _BBITS, int _ABITS
33- , int _RSHIFT, int _GSHIFT, int _BSHIFT, int _ASHIFT>
32+template<typename TN_, int RBITS_, int GBITS_, int BBITS_, int ABITS_
33+ , int RSHIFT_, int GSHIFT_, int BSHIFT_, int ASHIFT_>
3434 class CColor;
3535
3636 //======================================================================
@@ -65,39 +65,39 @@
6565 /**
6666 * @brief 整数カラーテンプレート
6767 * @details (@ref section_autoexp_CColor "autoexp")
68- * @tparam _TN = RGBAの数値を保持する型
69- * @tparam _RBITS = R 値のbit数
70- * @tparam _GBITS = G 値のbit数
71- * @tparam _BBITS = B 値のbit数
72- * @tparam _ABITS = A 値のbit数
73- * @tparam _RSHIFT = R 値への右シフト数
74- * @tparam _GSHIFT = G 値への右シフト数
75- * @tparam _BSHIFT = B 値への右シフト数
76- * @tparam _ASHIFT = A 値への右シフト数
68+ * @tparam TN_ = RGBAの数値を保持する型
69+ * @tparam RBITS_ = R 値のbit数
70+ * @tparam GBITS_ = G 値のbit数
71+ * @tparam BBITS_ = B 値のbit数
72+ * @tparam ABITS_ = A 値のbit数
73+ * @tparam RSHIFT_ = R 値への右シフト数
74+ * @tparam GSHIFT_ = G 値への右シフト数
75+ * @tparam BSHIFT_ = B 値への右シフト数
76+ * @tparam ASHIFT_ = A 値への右シフト数
7777 */
78-template<typename _TN, int _RBITS, int _GBITS, int _BBITS, int _ABITS
79- , int _RSHIFT, int _GSHIFT, int _BSHIFT, int _ASHIFT>
78+template<typename TN_, int RBITS_, int GBITS_, int BBITS_, int ABITS_
79+ , int RSHIFT_, int GSHIFT_, int BSHIFT_, int ASHIFT_>
8080 class CColor : public IIrisObject
8181 {
82- typedef CColor<_TN, _RBITS, _GBITS, _BBITS, _ABITS, _RSHIFT, _GSHIFT, _BSHIFT, _ASHIFT> _Myt;
82+ typedef CColor<TN_, RBITS_, GBITS_, BBITS_, ABITS_, RSHIFT_, GSHIFT_, BSHIFT_, ASHIFT_> _Myt;
8383 public:
8484 typedef enum
8585 {
86- BSZ_R = _RBITS, //!< R 値のbit数
87- BSZ_G = _GBITS, //!< G 値のbit数
88- BSZ_B = _BBITS, //!< B 値のbit数
89- BSZ_A = _ABITS, //!< A 値のbit数
86+ BSZ_R = RBITS_, //!< R 値のbit数
87+ BSZ_G = GBITS_, //!< G 値のbit数
88+ BSZ_B = BBITS_, //!< B 値のbit数
89+ BSZ_A = ABITS_, //!< A 値のbit数
9090 BSZ_ALL = BSZ_R + BSZ_G + BSZ_B + BSZ_A //!< 総bit数
9191 } BITSIZE;
9292 typedef enum
9393 {
94- SFT_R = _RSHIFT, //!< R 値への右シフト数
95- SFT_G = _GSHIFT, //!< G 値への右シフト数
96- SFT_B = _BSHIFT, //!< B 値への右シフト数
97- SFT_A = _ASHIFT //!< A 値への右シフト数
94+ SFT_R = RSHIFT_, //!< R 値への右シフト数
95+ SFT_G = GSHIFT_, //!< G 値への右シフト数
96+ SFT_B = BSHIFT_, //!< B 値への右シフト数
97+ SFT_A = ASHIFT_ //!< A 値への右シフト数
9898 } SHIFT;
9999
100- typedef _TN value_type; //!< RGBAの数値を保持する型
100+ typedef TN_ value_type; //!< RGBAの数値を保持する型
101101 typedef typename int_least_type<BSZ_R>::UInt value_type_r;
102102 typedef typename int_least_type<BSZ_G>::UInt value_type_g;
103103 typedef typename int_least_type<BSZ_B>::UInt value_type_b;
@@ -117,7 +117,7 @@
117117 */
118118 CColor(void) : m_col(0) {}
119119 CColor(value_type col) : m_col(col) {}
120- CColor(value_type_r _r, value_type_g _g, value_type_b _b, value_type_a _a) : m_col(0) { r(_r); g(_g); b(_b); a(_a); }
120+ CColor(value_type_r _r, value_type_g _g, value_type_b _b, value_type_a _a=0) : m_col(0) { r(_r); g(_g); b(_b); a(_a); }
121121 CColor(const IrisFColor& fcol) : m_col(0) { copy(fcol); }
122122
123123 template<typename _OTN, int _ORBITS, int _OGBITS, int _OBBITS, int _OABITS
@@ -175,7 +175,7 @@
175175 */
176176 value_type_r r(void) const { return (value_type_r)((m_col >> SFT_R) & max_r()); }
177177 value_type_g g(void) const { return (value_type_g)((m_col >> SFT_G) & max_g()); }
178- value_type_g b(void) const { return (value_type_b)((m_col >> SFT_B) & max_b()); }
178+ value_type_b b(void) const { return (value_type_b)((m_col >> SFT_B) & max_b()); }
179179 value_type_a a(void) const { return (value_type_a)((m_col >> SFT_A) & max_a()); }
180180 /**
181181 * @}
@@ -187,7 +187,7 @@
187187 */
188188 void r(value_type_r v) { value_type max = (value_type)max_r(); m_col &= ~(max << SFT_R); m_col |= ((v > max ? max : (value_type)v)) << SFT_R; }
189189 void g(value_type_g v) { value_type max = (value_type)max_g(); m_col &= ~(max << SFT_G); m_col |= ((v > max ? max : (value_type)v)) << SFT_G; }
190- void b(value_type_g v) { value_type max = (value_type)max_b(); m_col &= ~(max << SFT_B); m_col |= ((v > max ? max : (value_type)v)) << SFT_B; }
190+ void b(value_type_b v) { value_type max = (value_type)max_b(); m_col &= ~(max << SFT_B); m_col |= ((v > max ? max : (value_type)v)) << SFT_B; }
191191 void a(value_type_a v) { value_type max = (value_type)max_a(); m_col &= ~(max << SFT_A); m_col |= ((v > max ? max : (value_type)v)) << SFT_A; }
192192
193193 template<typename _OTN, int _ORBITS, int _OGBITS, int _OBBITS, int _OABITS
--- trunk/framework/src/fnd/image/FndYUV.h (revision 256)
+++ trunk/framework/src/fnd/image/FndYUV.h (revision 257)
@@ -8,7 +8,7 @@
88 * @version 1.0
99 *
1010 * @par copyright
11- * Copyright (C) 2011 Takazumi Shirayanagi\n
11+ * Copyright (C) 2011-2012 Takazumi Shirayanagi\n
1212 * The new BSD License is applied to this software.
1313 * see iris_LICENSE.txt
1414 */
@@ -20,6 +20,7 @@
2020 //======================================================================
2121 // include
2222 #include "FndColor.h"
23+#include "../../ml/iml_math.hpp"
2324
2425 namespace iris {
2526 namespace fnd
@@ -26,29 +27,132 @@
2627 {
2728
2829 //======================================================================
30+// struct
31+typedef struct tagYUV_PARAM
32+{
33+ struct {
34+ f32 r;
35+ f32 g;
36+ f32 b;
37+ } y, u, v;
38+ f32 rv;
39+ f32 gu, gv;
40+ f32 bu;
41+} YUV_PARAM;
42+
43+struct ITU_R_BT601 : public YUV_PARAM
44+{
45+ ITU_R_BT601(void)
46+ {
47+ y.r = 0.29891f;
48+ y.g = 0.58661f;
49+ y.b = 0.11448f;
50+ u.r = -0.16784f;
51+ u.g = -0.33126f;
52+ u.b = 0.5f;
53+ v.r = 0.5f;
54+ v.g = -0.41869f;
55+ v.b = -0.08131f;
56+
57+ rv = 1.402f;
58+ gu = -0.34414f;
59+ gv = -0.71414f;
60+ bu = 1.772f;
61+ }
62+};
63+
64+struct ITU_R_BT709 : public YUV_PARAM
65+{
66+ ITU_R_BT709(void)
67+ {
68+ y.r = 0.2126f;
69+ y.g = 0.7152f;
70+ y.b = 0.0722f;
71+ u.r = -0.1146f;
72+ u.g = -0.3854f;
73+ u.b = 0.5f;
74+ v.r = 0.5f;
75+ v.g = -0.4542f;
76+ v.b = -0.0458f;
77+
78+ rv = 1.5748f;
79+ gu = -0.1873f;
80+ gv = -0.4681f;
81+ bu = 1.8556f;
82+ }
83+};
84+
85+//======================================================================
86+// declare
87+template<int YRANGE_, int CRANGE_>class CYPbPr;
88+template<int YRANGE_, int CRANGE_>class CYCbCr;
89+
90+//======================================================================
2991 // class
3092 /**
31- * @brief YUV カラークラス
93+ * @brief YCbCr カラークラス
94+ * @tparam PARAM_ = 変換パラメータ
95+ * @tparam YRANGE_ = Y の範囲
96+ * @tparam CRANGE_ = Cb,Cr の範囲
3297 */
33-class CYUV : public IIrisObject
98+template<typename PARAM_, int YRANGE_=219, int CRANGE_=224>
99+class CYCbCrBase
34100 {
35101 public:
36- f32 m_y;
37- f32 m_u;
38- f32 m_v;
102+ static const int BITSIZE = 8;
103+
104+ typedef typename int_least_type<BITSIZE>::UInt value_type; //!< YUV 各成分の型
105+ typedef PARAM_ param_type;
106+
107+private:
108+ static const value_type YRANGE = YRANGE_;
109+ static const value_type CRANGE = CRANGE_;
110+ static const value_type LOWER = (256 - YRANGE) / 2;
111+ static const value_type BIAS = 1u<<(BITSIZE-1);
112+
113+private:
114+ value_type m_y;
115+ value_type m_u;
116+ value_type m_v;
117+
118+ static const param_type s_param;
119+
39120 public:
40121 /**
41122 * @brief コンストラクタ
42123 * @{
43124 */
44- CYUV(void) : m_y(0), m_u(0), m_v(0) {}
45- CYUV(f32 y, f32 u, f32 v) : m_y(y), m_u(u), m_v(v) {}
46- CYUV(const IrisFColor& col) { cast_from_fcolor(col); }
125+ CYCbCrBase(void) : m_y(0), m_u(0), m_v(0) {}
126+ CYCbCrBase(value_type y, value_type u, value_type v) : m_y(y), m_u(u), m_v(v) {}
127+ CYCbCrBase(const IrisFColor& fcol) : m_y(0), m_u(0), m_v(0) { cast_from_fcolor(fcol); }
47128 /**
48129 * @}
49130 */
50131
51132 public:
133+ /**
134+ * @name 各成分の取得
135+ * @{
136+ */
137+ value_type y(void) const { return m_y; }
138+ value_type u(void) const { return m_u; }
139+ value_type v(void) const { return m_v; }
140+ /**
141+ * @}
142+ */
143+
144+ /**
145+ * @name 各成分の設定
146+ * @{
147+ */
148+ void y(value_type v) { m_y = v; }
149+ void u(value_type v) { m_u = v; }
150+ void v(value_type v) { m_v = v; }
151+ /**
152+ * @}
153+ */
154+
155+public:
52156 operator IrisFColor (void) const { IrisFColor col; cast_to_fcolor(col); return col; }
53157
54158 protected:
@@ -58,15 +162,21 @@
58162 */
59163 void cast_from_fcolor(const IrisFColor& col)
60164 {
61- m_y = col.r * 0.29891f + col.g * 0.58661f + col.b * 0.11448f;
62- m_u = col.r * -0.16784f - col.g * 0.33126f + col.b * 0.5f;
63- m_v = col.r * 0.5f - col.g * 0.41869f - col.b * 0.08131f;
165+ f32 y = col.r * s_param.y.r + col.g * s_param.y.g + col.b * s_param.y.b;
166+ f32 u = col.r * s_param.u.r + col.g * s_param.u.g + col.b * s_param.u.b;
167+ f32 v = col.r * s_param.v.r + col.g * s_param.v.g + col.b * s_param.v.b;
168+ m_y = static_cast<value_type>(y * YRANGE + LOWER);
169+ m_u = static_cast<value_type>(u * CRANGE + BIAS);
170+ m_v = static_cast<value_type>(v * CRANGE + BIAS);
64171 }
65172 void cast_to_fcolor(IrisFColor& col) const
66173 {
67- col.r = m_y + 1.402f * m_v;
68- col.g = m_y - 0.34414f * m_u - 0.71414f * m_v;
69- col.b = m_y + 1.772f * m_u;
174+ value_type y = (m_y - LOWER);
175+ int u = static_cast<int>(m_u) - BIAS;
176+ int v = static_cast<int>(m_v) - BIAS;
177+ col.r = (y + s_param.rv * v) / YRANGE;
178+ col.g = (y + s_param.gu * u + s_param.gv * v) / CRANGE;
179+ col.b = (y + s_param.bu * u) / CRANGE;
70180 }
71181 /**
72182 * @}
@@ -73,6 +183,47 @@
73183 */
74184 };
75185
186+template<typename PARAM_, int YRANGE_, int CRANGE_>
187+const PARAM_ CYCbCrBase<PARAM_, YRANGE_, CRANGE_>::s_param;
188+
189+/**
190+ * @brief YCbCr (SD)
191+*/
192+template<int YRANGE_=219, int CRANGE_=224>
193+class CYCbCr : public CYCbCrBase<ITU_R_BT601, YRANGE_, CRANGE_>
194+{
195+public:
196+ /**
197+ * @brief コンストラクタ
198+ * @{
199+ */
200+ CYCbCr(void) {}
201+ CYCbCr(value_type y, value_type u, value_type v) : CYCbCrBase(y, u, v) {}
202+ CYCbCr(const IrisFColor& fcol) : CYCbCrBase(fcol) {}
203+ /**
204+ * @}
205+ */
206+};
207+
208+/**
209+ * @brief YCbCr (HD)
210+*/
211+template<int YRANGE_=219, int CRANGE_=224>
212+class CYPbPr : public CYCbCrBase<ITU_R_BT709, YRANGE_, CRANGE_>
213+{
214+public:
215+ /**
216+ * @brief コンストラクタ
217+ * @{
218+ */
219+ CYPbPr(void) {}
220+ CYPbPr(value_type y, value_type u, value_type v) : CYCbCrBase(y, u, v) {}
221+ CYPbPr(const IrisFColor& fcol) : CYCbCrBase(fcol) {}
222+ /**
223+ * @}
224+ */
225+};
226+
76227 } // end of namespace fnd
77228 } // end of namespace iris
78229
--- trunk/framework/testsuite/iutest/include/iutest_ver.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/iutest_ver.h (revision 257)
@@ -22,17 +22,17 @@
2222
2323 //======================================================================
2424 // define
25-#define IUTEST_VER 0x00130000 //!< iutest version 0.13.0.0
25+#define IUTEST_VER 0x00130001 //!< iutest version 0.13.0.1
2626 #define IUTEST_MAJORVER 0x00
2727 #define IUTEST_MINORVER 0x13
2828 #define IUTEST_BUILD 0x00
29-#define IUTEST_REVISION 0x00
29+#define IUTEST_REVISION 0x01
3030
3131 /**
3232 * @file iutest_ver.h
3333 * @par release note
3434 <ul>
35- <li>v0.13.0.0
35+ <li>v0.13.0.1
3636 <ul>
3737 <li>googletest との相互互換対応</li>
3838 </ul>
--- trunk/framework/testsuite/iutest/include/iutest_body.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/iutest_body.h (revision 257)
@@ -8,7 +8,7 @@
88 * @version 1.0
99 *
1010 * @par copyright
11- * Copyright (C) 2011 Takazumi Shirayanagi\n
11+ * Copyright (C) 2011-2012 Takazumi Shirayanagi\n
1212 * The new BSD License is applied to this software.
1313 * see LICENSE
1414 */
@@ -68,6 +68,9 @@
6868 }
6969
7070 protected:
71+
72+#if IUTEST_HAS_GENRAND
73+
7174 /**
7275 * @brief 乱数の生成
7376 * @note 乱数シードは --iutest_random_seed で指定した値になります。
@@ -77,6 +80,8 @@
7780 /** @ref genrand */
7881 unsigned int genrand(unsigned int max) { return m_random.genrand(max); }
7982
83+#endif
84+
8085 protected:
8186 virtual void SetUp(void) {} //!< 実行前処理
8287 virtual void Body(void) = 0; //!< テスト実装部
@@ -143,7 +148,9 @@
143148 friend class UnitTest;
144149
145150 detail::iuITestInfoMediator* m_test_info;
151+#if IUTEST_HAS_GENRAND
146152 detail::iuRandom m_random;
153+#endif
147154 };
148155
149156 template<typename DMY>
--- trunk/framework/testsuite/iutest/include/gtest/iutest_switch.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/gtest/iutest_switch.h (revision 257)
@@ -110,11 +110,16 @@
110110 #undef REGISTER_TYPED_TEST_CASE_P
111111 #undef INSTANTIATE_TYPED_TEST_CASE_P
112112
113+#undef GTEST_HAS_DEATH_TEST
113114 #undef GTEST_HAS_PARAM_TEST
114115 #undef GTEST_HAS_COMBINE
115116 #undef GTEST_HAS_TYPED_TEST
116117 #undef GTEST_HAS_TYPED_TEST_P
117118
119+#undef GTEST_HAS_EXCEPTIONS
120+#undef GTEST_HAS_RTTI
121+#undef GTEST_HAS_SEH
122+
118123 #ifdef GTEST_OS_CYGWIN
119124 # undef GTEST_OS_CYGWIN
120125 #endif
@@ -130,6 +135,9 @@
130135 # undef GTEST_OS_WINDOWS_DESKTOP
131136 # endif
132137 #endif
138+#ifdef GTEST_OS_MAC
139+# undef GTEST_OS_MAC
140+#endif
133141 #ifdef GTEST_OS_LINUX
134142 # undef GTEST_OS_LINUX
135143 # ifdef GTEST_OS_LINUX_ANDROID
@@ -136,8 +144,12 @@
136144 # undef GTEST_OS_LINUX_ANDROID
137145 # endif
138146 #endif
147+#ifdef IUTEST_OS_NACL
148+# undef IUTEST_OS_NACL
149+#endif
139150
140151 #undef GTEST_ATTRIBUTE_UNUSED_
152+#undef GTEST_AMBIGUOUS_ELSE_BLOCKER_
141153 #endif
142154
143155 #define RUN_ALL_TESTS IUTEST_RUN_ALL_TESTS
@@ -237,11 +249,16 @@
237249 #define INSTANTIATE_TYPED_TEST_CASE_P IUTEST_INSTANTIATE_TYPED_TEST_CASE_P
238250
239251
252+#define GTEST_HAS_DEATH_TEST 0
240253 #define GTEST_HAS_PARAM_TEST IUTEST_HAS_PARAM_TEST
241254 #define GTEST_HAS_COMBINE IUTEST_HAS_COMBINE
242255 #define GTEST_HAS_TYPED_TEST IUTEST_HAS_TYPED_TEST
243256 #define GTEST_HAS_TYPED_TEST_P IUTEST_HAS_TYPED_TEST_P
244257
258+#define GTEST_HAS_EXCEPTIONS IUTEST_HAS_EXCEPTIONS
259+#define GTEST_HAS_RTTI IUTEST_HAS_RTTI
260+#define GTEST_HAS_SEH IUTEST_HAS_SEH
261+
245262 #ifdef IUTEST_OS_CYGWIN
246263 # define GTEST_OS_CYGWIN IUTEST_OS_CYGWIN
247264 #endif
@@ -257,6 +274,9 @@
257274 # define GTEST_OS_WINDOWS_DESKTOP IUTEST_OS_WINDOWS_DESKTOP
258275 # endif
259276 #endif
277+#ifdef IUTEST_OS_MAC
278+# define GTEST_OS_MAC IUTEST_OS_MAC
279+#endif
260280 #ifdef IUTEST_OS_LINUX
261281 # define GTEST_OS_LINUX IUTEST_OS_LINUX
262282 # ifdef IUTEST_OS_LINUX_ANDROID
@@ -263,8 +283,12 @@
263283 # define GTEST_OS_LINUX_ANDROID IUTEST_OS_LINUX_ANDROID
264284 # endif
265285 #endif
286+#ifdef IUTEST_OS_NACL
287+# define GTEST_OS_NACL IUTEST_OS_NACL
288+#endif
266289
267-#define GTEST_ATTRIBUTE_UNUSED_ IUTEST_ATTRIBUTE_UNUSED_
290+#define GTEST_ATTRIBUTE_UNUSED_ IUTEST_ATTRIBUTE_UNUSED_
291+#define GTEST_AMBIGUOUS_ELSE_BLOCKER_ IUTEST_AMBIGUOUS_ELSE_BLOCKER_
268292
269293 #ifndef GTEST_INCLUDE_GTEST_GTEST_H_
270294
@@ -389,9 +413,12 @@
389413 #undef IUTEST_HAS_COMBINE
390414 #undef IUTEST_HAS_TYPED_TEST
391415 #undef IUTEST_HAS_TYPED_TEST_P
392-#undef IUTEST_HAS_PRED_FORMAT_OR
393416 #undef IUTEST_HAS_GENRAND
394417
418+#undef IUTEST_HAS_EXCEPTIONS
419+#undef IUTEST_HAS_RTTI
420+#undef IUTEST_HAS_SEH
421+
395422 #undef IUTEST_INIT
396423
397424 #undef IUTEST_SUPPRESS_UNREACHABLE_CODE_WARNING
@@ -411,16 +438,22 @@
411438 # undef IUTEST_OS_WINDOWS_DESKTOP
412439 # endif
413440 #endif
441+#ifdef IUTEST_OS_MAC
442+# undef IUTEST_OS_MAC
443+#endif
414444 #ifdef IUTEST_OS_LINUX
415445 # undef IUTEST_OS_LINUX
416446 # ifdef IUTEST_OS_LINUX_ANDROID
417447 # undef IUTEST_OS_LINUX_ANDROID
418448 # endif
449+#endif
450+#ifdef IUTEST_OS_NACL
451+# undef IUTEST_OS_NACL
452+#endif
419453
420454 #undef IUTEST_ATTRIBUTE_UNUSED_
421-#endif
455+#undef IUTEST_AMBIGUOUS_ELSE_BLOCKER_
422456
423-#undef GTEST_ATTRIBUTE_UNUSED_
424457 #endif
425458
426459 #define IUTEST_RUN_ALL_TESTS RUN_ALL_TESTS
@@ -530,10 +563,15 @@
530563 #define IUTEST_HAS_TYPED_TEST_P GTEST_HAS_TYPED_TEST_P
531564 #define IUTEST_HAS_GENRAND 0
532565
566+#define IUTEST_HAS_EXCEPTIONS GTEST_HAS_EXCEPTIONS
567+#define IUTEST_HAS_RTTI GTEST_HAS_RTTI
568+#define IUTEST_HAS_SEH GTEST_HAS_SEH
569+
533570 #ifdef GTEST_OS_CYGWIN
534571 # define IUTEST_OS_CYGWIN GTEST_OS_CYGWIN
535572 #endif
536573 #ifdef GTEST_OS_WINDOWS
574+# include <windows.h>
537575 # define IUTEST_OS_WINDOWS GTEST_OS_WINDOWS
538576 # ifdef GTEST_OS_WINDOWS_MOBILE
539577 # define IUTEST_OS_WINDOWS_MOBILE GTEST_OS_WINDOWS_MOBILE
@@ -544,8 +582,10 @@
544582 # ifdef GTEST_OS_WINDOWS_DESKTOP
545583 # define IUTEST_OS_WINDOWS_DESKTOP GTEST_OS_WINDOWS_DESKTOP
546584 # endif
547-# include <windows.h>
548585 #endif
586+#ifdef GTEST_OS_MAC
587+# define IUTEST_OS_MAC GTEST_OS_MAC
588+#endif
549589 #ifdef GTEST_OS_LINUX
550590 # define IUTEST_OS_LINUX GTEST_OS_LINUX
551591 # ifdef GTEST_OS_LINUX_ANDROID
@@ -552,8 +592,12 @@
552592 # define IUTEST_OS_LINUX_ANDROID GTEST_OS_LINUX_ANDROID
553593 # endif
554594 #endif
595+#ifdef GTEST_OS_NACL
596+# define IUTEST_OS_NACL GTEST_OS_NACL
597+#endif
555598
556-#define IUTEST_ATTRIBUTE_UNUSED_ GTEST_ATTRIBUTE_UNUSED_
599+#define IUTEST_ATTRIBUTE_UNUSED_ GTEST_ATTRIBUTE_UNUSED_
600+#define IUTEST_AMBIGUOUS_ELSE_BLOCKER_ GTEST_AMBIGUOUS_ELSE_BLOCKER_
557601
558602 #define IUTEST_INIT testing::InitGoogleTest
559603
--- trunk/framework/testsuite/iutest/include/iutest_assertion.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/iutest_assertion.h (revision 257)
@@ -125,7 +125,7 @@
125125 {
126126 IUTEST_DO_BREAK();
127127 OnFixed(fixed);
128-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
128+#if IUTEST_HAS_EXCEPTIONS
129129 if( TestFlag::IsEnableFlag(TestFlag::THROW_ON_FAILURE) )
130130 {
131131 if( m_tr.result() == eTestResultFatalFailure ) throw eTestResultFatalFailure;
--- trunk/framework/testsuite/iutest/include/iutest.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/iutest.h (revision 257)
@@ -31,13 +31,16 @@
3131 #define IUTEST_PRINTF
3232 // get time millisecond
3333 #define IUTEST_GetMillisec() 0
34-// not supported exception
35-#define IUTEST_NOT_SUPPORT_EXCEPTION
3634 // not supported stl str(ing)stream
3735 #define IUTEST_NOT_SUPPORT_STLSTREAM
3836 // using strstream
3937 #define IUTEST_USING_STRSTREAM
4038
39+// supported option
40+#define IUTEST_HAS_EXCEPTIONS 1
41+#define IUTEST_HAS_RTTI 1
42+#define IUTEST_HAS_SEH 0
43+
4144 // stdio file
4245 #define IUTEST_NOT_SUPPORT_STDFILE
4346 // not supported time function
@@ -283,7 +286,7 @@
283286 # define IUTEST_ASSERT_HRESULT_FAILED(hr) IIUT_ASSERT_HRESULT_FAILED_(hr)
284287 #endif
285288
286-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
289+#if IUTEST_HAS_EXCEPTIONS
287290
288291 /**
289292 * @ingroup IUTEST_ASSERT_
@@ -439,7 +442,7 @@
439442 # define IUTEST_EXPECT_HRESULT_FAILED(hr) IIUT_EXPECT_HRESULT_FAILED_(hr)
440443 #endif
441444
442-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
445+#if IUTEST_HAS_EXCEPTIONS
443446
444447 /**
445448 * @ingroup IUTEST_EXPECT_
--- trunk/framework/testsuite/iutest/include/iutest_defs.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/iutest_defs.h (revision 257)
@@ -19,36 +19,6 @@
1919
2020 //======================================================================
2121 // include
22-#if defined(__CYGWIN__)
23-# define IUTEST_OS_CYGWIN 1
24-# include <sys/time.h>
25-# define IUTEST_SUPPORT_GETTIMEOFDAY 1
26-#elif defined(_WIN32)
27-# define IUTEST_OS_WINDOWS 1
28-# include <windows.h>
29-# if _MSC_VER > 1400
30-# define IUTEST_HAS_STRUCTED_EXCEPTION 1
31-# endif
32-# if defined(_WIN32_WCE)
33-# define IUTEST_OS_WINDOWS_MOBILE 1
34-# elif defined(__MINGW__) || defined(__MINGW32__)
35-# define IUTEST_OS_WINDOWS_MINGW 1
36-# else
37-# define IUTEST_OS_WINDOWS_DESKTOP 1
38-# endif
39-#elif defined(__linux__)
40-# define IUTEST_OS_LINUX 1
41-# ifdef ANDROID
42-# define IUTEST_OS_LINUX_ANDROID 1
43-# endif
44-#elif defined(__BORLANDC__)
45-# define IUTEST_HAS_STRUCTED_EXCEPTION 1
46-#endif
47-
48-#ifndef IUTEST_HAS_STRUCTED_EXCEPTION
49-# define IUTEST_HAS_STRUCTED_EXCEPTION 0
50-#endif
51-
5222 #include <stdio.h>
5323 #include "internal/iutest_compiler.h"
5424
@@ -56,10 +26,6 @@
5626 #include "internal/iutest_debug.h"
5727 #endif
5828
59-#if defined(IUTEST_ENABLE_RTTI)
60-#include <typeinfo>
61-#endif
62-
6329 // vprintf
6430 #ifndef IUTEST_VPRINTF
6531 # define IUTEST_VPRINTF(f, a) vprintf(f, a)
@@ -94,31 +60,34 @@
9460 # define IUTEST_MBS_CODE IUTEST_MBS_CODE_UTF8
9561 #endif
9662
97-// attribute
98-#if defined(__GNUC__) && !defined(COMPILER_ICC)
99-# define IUTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))
100-#else
101-# define IUTEST_ATTRIBUTE_UNUSED_
63+// support
64+#ifndef IUTEST_HAS_PARAM_TEST
65+# define IUTEST_HAS_PARAM_TEST 1
10266 #endif
67+#ifndef IUTEST_HAS_TYPED_TEST
68+# define IUTEST_HAS_TYPED_TEST 1
69+#endif
10370
104-// support
105-#define IUTEST_HAS_PARAM_TEST 1
106-#define IUTEST_HAS_TYPED_TEST 1
71+#ifndef IUTEST_HAS_TYPED_TEST_P
72+# if IUTEST_HAS_TYPED_TEST
73+# define IUTEST_HAS_TYPED_TEST_P 1
74+# else
75+# define IUTEST_HAS_TYPED_TEST_P 0
76+# endif
77+#endif
10778
108-#if IUTEST_HAS_TYPED_TEST
109-# define IUTEST_HAS_TYPED_TEST_P 1
110-#else
111-# define IUTEST_HAS_TYPED_TEST_P 0
79+#ifndef IUTEST_HAS_COMBINE
80+# if IUTEST_HAS_PARAM_TEST && defined(IUTEST_HAS_TR1_TUPLE)
81+# define IUTEST_HAS_COMBINE 1
82+# else
83+# define IUTEST_HAS_COMBINE 0
84+# endif
11285 #endif
11386
114-#if IUTEST_HAS_PARAM_TEST && defined(IUTEST_HAS_TR1_TUPLE)
115-# define IUTEST_HAS_COMBINE 1
116-#else
117-# define IUTEST_HAS_COMBINE 0
87+#ifndef IUTEST_HAS_GENRAND
88+# define IUTEST_HAS_GENRAND 1 //!< テストごとの genrand 関数が使用可能かどうか
11889 #endif
11990
120-#define IUTEST_HAS_GENRAND 1 //!< テストごとの genrand 関数が使用可能かどうか
121-
12291 namespace iutest
12392 {
12493
@@ -181,6 +150,9 @@
181150 RawType fv;
182151 };
183152 public:
153+ static const Int kMaxUlps = 4;
154+
155+public:
184156 floating_point(RawType f)
185157 {
186158 m_v.fv = f;
@@ -192,11 +164,10 @@
192164 */
193165 bool AlmostEquals(const _Myt& rhs) const
194166 {
195- const Int abs_val = 4;
196167 const Int v1 = m_v.iv < 0 ? ~m_v.iv + 1 : m_v.iv;
197168 const Int v2 = rhs.m_v.iv < 0 ? ~rhs.m_v.iv + 1 : rhs.m_v.iv;
198169 const Int diff = (v1 > v2) ? v1 - v2 : v2 - v1;
199- if( diff <= abs_val ) return true;
170+ if( diff <= kMaxUlps ) return true;
200171 return false;
201172 }
202173
--- trunk/framework/testsuite/iutest/include/iutest_core.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/iutest_core.h (revision 257)
@@ -137,7 +137,7 @@
137137 void TestProgramStart(void)
138138 {
139139 #if 0
140-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION) && defined(_MSC_VER) && IUTEST_HAS_STRUCTED_EXCEPTION
140+#if IUTEST_HAS_EXCEPTIONS && defined(_MSC_VER) && IUTEST_HAS_SEH
141141 // /EHa オプションが必要
142142 if( TestFlag::IsEnableFlag(TestFlag::CATCH_EXCEPTION) )
143143 {
--- trunk/framework/testsuite/iutest/include/internal/iutest_exception.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/internal/iutest_exception.h (revision 257)
@@ -19,7 +19,9 @@
1919
2020 //======================================================================
2121 // include
22-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
22+#include "../iutest_defs.h"
23+
24+#if IUTEST_HAS_EXCEPTIONS
2325 #include "iutest_string.h"
2426 #include <exception>
2527
@@ -49,7 +51,7 @@
4951 } // end of namespace detail
5052 } // end of namespace iutest
5153
52-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION) && defined(_MSC_VER)
54+#if IUTEST_HAS_EXCEPTIONS && IUTEST_HAS_SEH
5355 #include <iomanip>
5456
5557 namespace iutest {
--- trunk/framework/testsuite/iutest/include/internal/iutest_compiler.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/internal/iutest_compiler.h (revision 257)
@@ -8,7 +8,7 @@
88 * @version 1.0
99 *
1010 * @par copyright
11- * Copyright (C) 2011 Takazumi Shirayanagi\n
11+ * Copyright (C) 2011-2012 Takazumi Shirayanagi\n
1212 * The new BSD License is applied to this software.
1313 * see LICENSE
1414 */
@@ -23,21 +23,60 @@
2323 //======================================================================
2424 // define
2525
26+// os
27+#if defined(__CYGWIN__)
28+# define IUTEST_OS_CYGWIN 1
29+# include <sys/time.h>
30+# define IUTEST_SUPPORT_GETTIMEOFDAY 1
31+#elif defined(_WIN32)
32+# define IUTEST_OS_WINDOWS 1
33+# include <windows.h>
34+# if defined(_WIN32_WCE)
35+# define IUTEST_OS_WINDOWS_MOBILE 1
36+# elif defined(__MINGW__) || defined(__MINGW32__)
37+# define IUTEST_OS_WINDOWS_MINGW 1
38+# else
39+# define IUTEST_OS_WINDOWS_DESKTOP 1
40+# endif
41+#elif defined(__APPLE__)
42+# define IUTEST_OS_MAC 1
43+#elif defined(__linux__)
44+# define IUTEST_OS_LINUX 1
45+# ifdef ANDROID
46+# define IUTEST_OS_LINUX_ANDROID 1
47+# endif
48+#elif defined __native_client__
49+# define IUTEST_OS_NACL 1
50+#endif
51+
52+// attribute
53+#ifndef IUTEST_ATTRIBUTE_UNUSED_
54+# if defined(__GNUC__) && !defined(COMPILER_ICC)
55+# define IUTEST_ATTRIBUTE_UNUSED_ __attribute__ ((unused))
56+# else
57+# define IUTEST_ATTRIBUTE_UNUSED_
58+# endif
59+#endif
60+
61+
62+
2663 // constexpr
27-#if !defined(IUTEST_NO_CONSTEXPR)
64+#if !defined(IUTEST_HAS_CONSTEXPR)
2865 # if defined(__GNUC__)
29-# if (__GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 6))
30-# define IUTEST_NO_CONSTEXPR
66+# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
67+# define IUTEST_HAS_CONSTEXPR 1
3168 # endif
3269 # elif defined(_MSC_VER)
33-# define IUTEST_NO_CONSTEXPR
3470 # elif defined(__MWERKS__)
35-# define IUTEST_NO_CONSTEXPR
3671 # else
3772 # endif
3873 #endif
3974
40-#ifdef IUTEST_NO_CONSTEXPR
75+#ifndef IUTEST_HAS_CONSTEXPR
76+# define IUTEST_HAS_CONSTEXPR 0
77+#endif
78+
79+#if IUTEST_HAS_CONSTEXPR
4180 # ifndef constexpr
4281 # define constexpr const
4382 # endif
@@ -44,62 +83,93 @@
4483 #endif
4584
4685 // exceptions
47-#if !defined(IUTEST_NO_EXCEPTION)
48-# if defined(__GNUC__)
86+#if !defined(IUTEST_HAS_EXCEPTIONS)
87+# if defined(_MSC_VER)
88+# define IUTEST_HAS_EXCEPTIONS 1
89+# elif defined(__GNUC__)
4990 # if !defined(__EXCEPTIONS)
50-# define IUTEST_NO_EXCEPTION
91+# define IUTEST_HAS_EXCEPTIONS 1
5192 # endif
5293 # elif defined(__MWERKS__)
53-# if !__option(exceptions)
54-# define IUTEST_NO_EXCEPTION
94+# if __option(exceptions)
95+# define IUTEST_HAS_EXCEPTIONS 1
5596 # endif
5697 # endif
5798 #endif
5899
59-#ifdef IUTEST_NO_EXCEPTION
60-# define IUTEST_NOT_SUPPORT_EXCEPTION
100+#ifndef IUTEST_HAS_EXCEPTIONS
101+# define IUTEST_HAS_EXCEPTIONS 0
61102 #endif
62103
63-// rtti
64-#if defined(_MSC_VER)
65-# ifdef _CPPRTTI
66-# define IUTEST_ENABLE_RTTI 1
104+#if !defined(IUTEST_HAS_SEH)
105+# if defined(_WIN32)
106+# if _MSC_VER > 1400
107+# define IUTEST_HAS_SEH 1
108+# endif
109+# elif defined(__BORLANDC__)
110+# define IUTEST_HAS_SEH 1
67111 # endif
68-#elif defined(__MWERKS__)
69-# if __option(RTTI)
70-# define IUTEST_ENABLE_RTTI 1
71-# endif
72-#elif defined(__GNUC__)
73-# ifdef __RTTI
74-# define IUTEST_ENABLE_RTTI 1
75-# endif
76112 #endif
77113
78-// tuple
79-#if defined(_MSC_VER)
80-# if (_MSC_VER >= 1500)
81-# define IUTEST_HAS_TR1_TUPLE 1
114+#ifndef IUTEST_HAS_SEH
115+# define IUTEST_HAS_SEH 0
116+#endif
117+
118+// rtti
119+#if !defined(IUTEST_HAS_RTTI)
120+# if defined(_MSC_VER)
121+# ifdef _CPPRTTI
122+# define IUTEST_HAS_RTTI 1
123+# endif
124+# elif defined(__MWERKS__)
125+# if __option(RTTI)
126+# define IUTEST_HAS_RTTI 1
127+# endif
128+# elif defined(__GNUC__)
129+# ifdef __RTTI
130+# define IUTEST_HAS_RTTI 1
131+# endif
132+# ifdef __GXX_RTTI
133+# define IUTEST_HAS_RTTI 1
134+# endif
135+# elif defined(__IBMCPP__)
136+# if (__IBMCPP__ >= 900)
137+# define IUTEST_HAS_RTTI 1
138+# endif
82139 # endif
83-#elif defined(__GNUC__)
84-# if (!defined(__CUDACC__) && !defined(__ARMCC_VERSION) && (__GNUC__ >= 4))
85-# define IUTEST_HAS_TR1_TUPLE 1
86-# endif
87140 #endif
88141
89-#ifdef IUTEST_HAS_TR1_TUPLE
142+#ifndef IUTEST_HAS_RTTI
143+# define IUTEST_HAS_RTTI 0
144+#endif
90145
91-#if defined(IUTEST_USE_OWN_TR1_TUPLE)
92-# include "iutest_tuple.h"
93-#else
94-
95-#if (defined(__GNUC__) && (__GNUC__ >= 4))
96-# include <tr1/tuple>
97-#else
98-# include <tuple>
146+#if IUTEST_HAS_RTTI
147+# include <typeinfo>
99148 #endif
100149
150+// tuple
151+#if !defined(IUTEST_HAS_TR1_TUPLE)
152+# if defined(_MSC_VER)
153+# if (_MSC_VER >= 1500)
154+# define IUTEST_HAS_TR1_TUPLE 1
155+# endif
156+# elif defined(__GNUC__)
157+# if (!defined(__CUDACC__) && !defined(__ARMCC_VERSION) && (__GNUC__ >= 4))
158+# define IUTEST_HAS_TR1_TUPLE 1
159+# endif
160+# endif
101161 #endif
102162
163+#ifdef IUTEST_HAS_TR1_TUPLE
164+# if defined(IUTEST_USE_OWN_TR1_TUPLE)
165+# include "iutest_tuple.h"
166+# else
167+# if (defined(__GNUC__) && (__GNUC__ >= 4))
168+# include <tr1/tuple>
169+# else
170+# include <tuple>
171+# endif
172+# endif
103173 #endif
104174
105175 #endif
--- trunk/framework/testsuite/iutest/include/internal/iutest_internal.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/internal/iutest_internal.h (revision 257)
@@ -80,19 +80,19 @@
8080 * @biref 比較検証マクロ
8181 */
8282 #define IUTEST_TEST_ASSERT_(expression, on_failure) \
83- IUTEST_AMBIGUOUS_ELSE_BLOCKER \
83+ IUTEST_AMBIGUOUS_ELSE_BLOCKER_ \
8484 if( const iutest::AssertionResult tr = (expression) ) \
8585 ; \
8686 else \
8787 on_failure(tr.message())
8888
89-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
89+#if IUTEST_HAS_EXCEPTIONS
9090 /**
9191 * @internal
9292 * @brief throw テスト用マクロ
9393 */
9494 #define IUTEST_TEST_THROW_(statement, expected_exception, on_failure) \
95- IUTEST_AMBIGUOUS_ELSE_BLOCKER \
95+ IUTEST_AMBIGUOUS_ELSE_BLOCKER_ \
9696 if( const char* msg = "" ) { \
9797 try { \
9898 IUTEST_SUPPRESS_UNREACHABLE_CODE_WARNING((void)statement); \
@@ -114,7 +114,7 @@
114114 * @brief any throw テスト用マクロ
115115 */
116116 #define IUTEST_TEST_ANY_THROW_(statement, on_failure) \
117- IUTEST_AMBIGUOUS_ELSE_BLOCKER \
117+ IUTEST_AMBIGUOUS_ELSE_BLOCKER_ \
118118 if( iutest::detail::AlwaysTrue() ) { \
119119 try { \
120120 (void)statement; \
@@ -130,7 +130,7 @@
130130 * @brief no throw テスト用マクロ
131131 */
132132 #define IUTEST_TEST_NO_THROW_(statement, on_failure) \
133- IUTEST_AMBIGUOUS_ELSE_BLOCKER \
133+ IUTEST_AMBIGUOUS_ELSE_BLOCKER_ \
134134 if( iutest::detail::AlwaysTrue() ) { \
135135 try { \
136136 (void)statement; \
@@ -222,7 +222,7 @@
222222 #define IIUT_ASSERT_HRESULT_SUCCEEDED_(hr) IUTEST_TEST_HRESULT_SUCCEEDED(hr, IUTEST_ASSERT_FAILURE)
223223 #define IIUT_ASSERT_HRESULT_FAILED_(hr) IUTEST_TEST_HRESULT_FAILED(hr, IUTEST_ASSERT_FAILURE)
224224
225-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
225+#if IUTEST_HAS_EXCEPTIONS
226226
227227 #define IIUT_ASSERT_THROW(statement, expected_exception) IUTEST_TEST_THROW_(statement, expected_exception, IUTEST_ASSERT_FAILURE)
228228 #define IIUT_ASSERT_ANY_THROW(statement) IUTEST_TEST_ANY_THROW_(statement, IUTEST_ASSERT_FAILURE)
@@ -262,7 +262,7 @@
262262 #define IIUT_EXPECT_HRESULT_SUCCEEDED_(hr) IUTEST_TEST_HRESULT_SUCCEEDED(hr, IUTEST_EXPECT_FAILURE)
263263 #define IIUT_EXPECT_HRESULT_FAILED_(hr) IUTEST_TEST_HRESULT_FAILED(hr, IUTEST_EXPECT_FAILURE)
264264
265-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
265+#if IUTEST_HAS_EXCEPTIONS
266266
267267 #define IIUT_EXPECT_THROW(statement, expected_exception) IUTEST_TEST_THROW_(statement, expected_exception, IUTEST_EXPECT_FAILURE)
268268 #define IIUT_EXPECT_ANY_THROW(statement) IUTEST_TEST_ANY_THROW_(statement, IUTEST_EXPECT_FAILURE)
--- trunk/framework/testsuite/iutest/include/internal/iutest_internal_defs.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/internal/iutest_internal_defs.h (revision 257)
@@ -24,17 +24,14 @@
2424
2525 //======================================================================
2626 // define
27-#define IUTEST_PP_DISALLOW_COPY_AND_ASSIGN(TypeName) \
28- TypeName( const TypeName& ); \
29- TypeName& operator = ( const TypeName& )
3027
3128 /**
3229 * @brief 曖昧な else 文の警告抑制
3330 */
3431 #ifdef __INTEL_COMPILER
35-# define IUTEST_AMBIGUOUS_ELSE_BLOCKER
32+# define IUTEST_AMBIGUOUS_ELSE_BLOCKER_
3633 #else
37-# define IUTEST_AMBIGUOUS_ELSE_BLOCKER switch(iutest::detail::AlwaysZero()) case 0: default:
34+# define IUTEST_AMBIGUOUS_ELSE_BLOCKER_ switch(iutest::detail::AlwaysZero()) case 0: default:
3835 #endif
3936
4037 #define IUTEST_SUPPRESS_UNREACHABLE_CODE_WARNING(statement) if( iutest::detail::AlwaysTrue() ) statement
--- trunk/framework/testsuite/iutest/include/internal/iutest_pp.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/internal/iutest_pp.h (revision 257)
@@ -18,8 +18,12 @@
1818 #define INCG_IRIS_iutest_pp_H_E8F72184_9C72_4e74_B581_A1F51F291F3A_
1919
2020 //======================================================================
21-// include
21+// define
2222
23+#define IUTEST_PP_DISALLOW_COPY_AND_ASSIGN(TypeName) \
24+ TypeName( const TypeName& ); \
25+ TypeName& operator = ( const TypeName& )
26+
2327 #define IUTEST_PP_TOSTRING(z_) IUTEST_PP_TOSTRING_(z_)
2428 #define IUTEST_PP_TOSTRING_(z__) #z__
2529
--- trunk/framework/testsuite/iutest/include/iutest_info.h (revision 256)
+++ trunk/framework/testsuite/iutest/include/iutest_info.h (revision 257)
@@ -8,7 +8,7 @@
88 * @version 1.0
99 *
1010 * @par copyright
11- * Copyright (C) 2011 Takazumi Shirayanagi\n
11+ * Copyright (C) 2011-2012 Takazumi Shirayanagi\n
1212 * The new BSD License is applied to this software.
1313 * see LICENSE
1414 */
@@ -93,7 +93,7 @@
9393 // テスト開始
9494 TestEnv::event_listeners().OnTestStart(*this);
9595
96-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
96+#if IUTEST_HAS_EXCEPTIONS
9797 if( TestFlag::IsEnableFlag(TestFlag::CATCH_EXCEPTION) )
9898 {
9999 detail::auto_ptr<Test> p = m_factory->Create();
@@ -100,7 +100,7 @@
100100 try
101101 {
102102 sw.start();
103-#if IUTEST_HAS_STRUCTED_EXCEPTION
103+#if IUTEST_HAS_SEH
104104 RunOnMSC(p);
105105 #else
106106 p->Run(&m_mediator);
@@ -187,7 +187,7 @@
187187
188188 private:
189189
190-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION) && IUTEST_HAS_STRUCTED_EXCEPTION
190+#if IUTEST_HAS_EXCEPTIONS && IUTEST_HAS_SEH
191191 static int ShouldProcessSEH(DWORD code)
192192 {
193193 bool should_handle = true;
--- trunk/framework/testsuite/iutest/samples/main.cpp (revision 256)
+++ trunk/framework/testsuite/iutest/samples/main.cpp (revision 257)
@@ -385,7 +385,7 @@
385385 /**
386386 * 例外アサーション
387387 */
388-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
388+#if IUTEST_HAS_EXCEPTIONS
389389
390390 static void Exception(int i)
391391 {
@@ -578,7 +578,7 @@
578578 IUTEST_EXPECT_PRED_FORMAT5(iuutil::CmpHelperOR<iuutil::CmpHelper::EQ>::Comp, 100, 3, 2, 0, 1);
579579 }
580580
581-#if !defined(IUTEST_NOT_SUPPORT_EXCEPTION)
581+#if IUTEST_HAS_EXCEPTIONS
582582 IUTEST(TestExpectFailure, Exception)
583583 {
584584 IUTEST_EXPECT_THROW(Exception(0), int);
Show on old repository browser