rice 3.0.0 → 4.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (238) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +121 -0
  3. data/CONTRIBUTORS.md +19 -0
  4. data/Gemfile +3 -0
  5. data/README.md +44 -1025
  6. data/Rakefile +95 -12
  7. data/include/rice/rice.hpp +7766 -0
  8. data/include/rice/stl.hpp +1113 -0
  9. data/lib/mkmf-rice.rb +127 -0
  10. data/lib/version.rb +3 -0
  11. data/rice/Address_Registration_Guard.ipp +75 -32
  12. data/rice/Address_Registration_Guard_defn.hpp +60 -56
  13. data/rice/Arg.hpp +80 -4
  14. data/rice/Arg.ipp +51 -0
  15. data/rice/Constructor.hpp +12 -14
  16. data/rice/Data_Object.ipp +234 -107
  17. data/rice/Data_Object_defn.hpp +77 -117
  18. data/rice/Data_Type.hpp +1 -2
  19. data/rice/Data_Type.ipp +251 -295
  20. data/rice/Data_Type_defn.hpp +175 -243
  21. data/rice/Director.hpp +11 -6
  22. data/rice/Enum.hpp +54 -104
  23. data/rice/Enum.ipp +104 -230
  24. data/rice/Exception.hpp +2 -8
  25. data/rice/Exception.ipp +65 -0
  26. data/rice/Exception_defn.hpp +46 -47
  27. data/rice/Identifier.hpp +28 -28
  28. data/rice/Identifier.ipp +23 -27
  29. data/rice/Return.hpp +39 -0
  30. data/rice/Return.ipp +33 -0
  31. data/rice/detail/Exception_Handler.ipp +22 -62
  32. data/rice/detail/Exception_Handler_defn.hpp +76 -91
  33. data/rice/detail/Iterator.hpp +18 -88
  34. data/rice/detail/Iterator.ipp +47 -0
  35. data/rice/detail/Jump_Tag.hpp +21 -0
  36. data/rice/detail/MethodInfo.hpp +44 -0
  37. data/rice/detail/MethodInfo.ipp +78 -0
  38. data/rice/detail/NativeAttribute.hpp +53 -0
  39. data/rice/detail/NativeAttribute.ipp +83 -0
  40. data/rice/detail/NativeFunction.hpp +69 -0
  41. data/rice/detail/NativeFunction.ipp +248 -0
  42. data/rice/detail/RubyFunction.hpp +39 -0
  43. data/rice/detail/RubyFunction.ipp +92 -0
  44. data/rice/detail/Type.hpp +29 -0
  45. data/rice/detail/Type.ipp +138 -0
  46. data/rice/detail/TypeRegistry.hpp +50 -0
  47. data/rice/detail/TypeRegistry.ipp +106 -0
  48. data/rice/detail/Wrapper.hpp +51 -0
  49. data/rice/detail/Wrapper.ipp +151 -0
  50. data/rice/detail/default_allocation_func.hpp +8 -19
  51. data/rice/detail/default_allocation_func.ipp +9 -8
  52. data/rice/detail/from_ruby.hpp +2 -37
  53. data/rice/detail/from_ruby.ipp +1020 -46
  54. data/rice/detail/from_ruby_defn.hpp +38 -0
  55. data/rice/detail/function_traits.hpp +124 -0
  56. data/rice/detail/method_data.hpp +23 -15
  57. data/rice/detail/method_data.ipp +53 -0
  58. data/rice/detail/rice_traits.hpp +116 -0
  59. data/rice/detail/ruby.hpp +9 -46
  60. data/rice/detail/to_ruby.hpp +3 -17
  61. data/rice/detail/to_ruby.ipp +409 -31
  62. data/rice/detail/to_ruby_defn.hpp +48 -0
  63. data/rice/forward_declares.ipp +82 -0
  64. data/rice/global_function.hpp +16 -20
  65. data/rice/global_function.ipp +8 -17
  66. data/rice/rice.hpp +59 -0
  67. data/rice/ruby_mark.hpp +5 -3
  68. data/rice/ruby_try_catch.hpp +4 -4
  69. data/rice/stl.hpp +11 -0
  70. data/sample/callbacks/extconf.rb +3 -0
  71. data/sample/callbacks/sample_callbacks.cpp +10 -13
  72. data/sample/enum/extconf.rb +3 -0
  73. data/sample/enum/sample_enum.cpp +3 -17
  74. data/sample/enum/test.rb +2 -2
  75. data/sample/inheritance/animals.cpp +8 -24
  76. data/sample/inheritance/extconf.rb +3 -0
  77. data/sample/inheritance/test.rb +1 -1
  78. data/sample/map/extconf.rb +3 -0
  79. data/sample/map/map.cpp +10 -18
  80. data/sample/map/test.rb +1 -1
  81. data/test/embed_ruby.cpp +18 -5
  82. data/test/ext/t1/extconf.rb +3 -0
  83. data/test/ext/t1/t1.cpp +1 -3
  84. data/test/ext/t2/extconf.rb +3 -0
  85. data/test/ext/t2/t2.cpp +1 -1
  86. data/test/extconf.rb +23 -0
  87. data/test/ruby/test_callbacks_sample.rb +28 -0
  88. data/test/ruby/test_multiple_extensions.rb +18 -0
  89. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  90. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  91. data/test/test_Address_Registration_Guard.cpp +23 -10
  92. data/test/test_Array.cpp +129 -73
  93. data/test/test_Attribute.cpp +147 -0
  94. data/test/test_Builtin_Object.cpp +34 -14
  95. data/test/test_Class.cpp +149 -275
  96. data/test/test_Constructor.cpp +10 -9
  97. data/test/test_Data_Object.cpp +133 -192
  98. data/test/test_Data_Type.cpp +322 -252
  99. data/test/test_Director.cpp +54 -41
  100. data/test/test_Enum.cpp +228 -103
  101. data/test/test_Exception.cpp +5 -6
  102. data/test/test_Hash.cpp +31 -30
  103. data/test/test_Identifier.cpp +4 -5
  104. data/test/test_Inheritance.cpp +221 -0
  105. data/test/test_Iterator.cpp +161 -0
  106. data/test/test_Jump_Tag.cpp +1 -1
  107. data/test/test_Keep_Alive.cpp +161 -0
  108. data/test/test_Memory_Management.cpp +2 -4
  109. data/test/test_Module.cpp +167 -110
  110. data/test/test_Object.cpp +41 -21
  111. data/test/test_Ownership.cpp +275 -0
  112. data/test/test_Self.cpp +205 -0
  113. data/test/test_Stl_Optional.cpp +90 -0
  114. data/test/test_Stl_Pair.cpp +144 -0
  115. data/test/test_Stl_SmartPointer.cpp +200 -0
  116. data/test/test_Stl_String.cpp +74 -0
  117. data/test/test_Stl_Vector.cpp +652 -0
  118. data/test/test_String.cpp +1 -2
  119. data/test/test_Struct.cpp +29 -39
  120. data/test/test_Symbol.cpp +1 -2
  121. data/test/test_To_From_Ruby.cpp +249 -285
  122. data/test/test_global_functions.cpp +39 -19
  123. data/test/unittest.hpp +0 -4
  124. metadata +70 -141
  125. data/Doxyfile +0 -2268
  126. data/Makefile.am +0 -26
  127. data/Makefile.in +0 -931
  128. data/README.mingw +0 -8
  129. data/aclocal.m4 +0 -1085
  130. data/ax_cxx_compile_stdcxx.m4 +0 -951
  131. data/bootstrap +0 -8
  132. data/config.guess +0 -1421
  133. data/config.sub +0 -1807
  134. data/configure +0 -7792
  135. data/configure.ac +0 -55
  136. data/depcomp +0 -791
  137. data/doxygen.ac +0 -314
  138. data/doxygen.am +0 -186
  139. data/extconf.rb +0 -70
  140. data/install-sh +0 -501
  141. data/missing +0 -215
  142. data/post-autoconf.rb +0 -22
  143. data/post-automake.rb +0 -28
  144. data/rice/Address_Registration_Guard.cpp +0 -22
  145. data/rice/Arg_impl.hpp +0 -129
  146. data/rice/Arg_operators.cpp +0 -21
  147. data/rice/Arg_operators.hpp +0 -19
  148. data/rice/Array.hpp +0 -214
  149. data/rice/Array.ipp +0 -256
  150. data/rice/Builtin_Object.hpp +0 -8
  151. data/rice/Builtin_Object.ipp +0 -50
  152. data/rice/Builtin_Object_defn.hpp +0 -50
  153. data/rice/Class.cpp +0 -57
  154. data/rice/Class.hpp +0 -8
  155. data/rice/Class.ipp +0 -6
  156. data/rice/Class_defn.hpp +0 -84
  157. data/rice/Data_Type.cpp +0 -54
  158. data/rice/Data_Type_fwd.hpp +0 -12
  159. data/rice/Director.cpp +0 -13
  160. data/rice/Exception.cpp +0 -54
  161. data/rice/Exception_Base.hpp +0 -8
  162. data/rice/Exception_Base.ipp +0 -13
  163. data/rice/Exception_Base_defn.hpp +0 -27
  164. data/rice/Hash.hpp +0 -230
  165. data/rice/Hash.ipp +0 -329
  166. data/rice/Identifier.cpp +0 -8
  167. data/rice/Jump_Tag.hpp +0 -24
  168. data/rice/Makefile.am +0 -121
  169. data/rice/Makefile.in +0 -884
  170. data/rice/Module.cpp +0 -84
  171. data/rice/Module.hpp +0 -8
  172. data/rice/Module.ipp +0 -6
  173. data/rice/Module_defn.hpp +0 -88
  174. data/rice/Module_impl.hpp +0 -281
  175. data/rice/Module_impl.ipp +0 -345
  176. data/rice/Object.cpp +0 -169
  177. data/rice/Object.hpp +0 -8
  178. data/rice/Object.ipp +0 -33
  179. data/rice/Object_defn.hpp +0 -214
  180. data/rice/Require_Guard.hpp +0 -21
  181. data/rice/String.cpp +0 -89
  182. data/rice/String.hpp +0 -91
  183. data/rice/Struct.cpp +0 -117
  184. data/rice/Struct.hpp +0 -162
  185. data/rice/Struct.ipp +0 -26
  186. data/rice/Symbol.cpp +0 -25
  187. data/rice/Symbol.hpp +0 -66
  188. data/rice/Symbol.ipp +0 -44
  189. data/rice/config.hpp +0 -47
  190. data/rice/config.hpp.in +0 -46
  191. data/rice/detail/Arguments.hpp +0 -118
  192. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  193. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
  194. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  195. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
  196. data/rice/detail/Caster.hpp +0 -103
  197. data/rice/detail/Not_Copyable.hpp +0 -25
  198. data/rice/detail/Wrapped_Function.hpp +0 -33
  199. data/rice/detail/cfp.hpp +0 -24
  200. data/rice/detail/cfp.ipp +0 -51
  201. data/rice/detail/check_ruby_type.cpp +0 -27
  202. data/rice/detail/check_ruby_type.hpp +0 -23
  203. data/rice/detail/creation_funcs.hpp +0 -37
  204. data/rice/detail/creation_funcs.ipp +0 -36
  205. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  206. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  207. data/rice/detail/demangle.cpp +0 -56
  208. data/rice/detail/demangle.hpp +0 -19
  209. data/rice/detail/env.hpp +0 -11
  210. data/rice/detail/method_data.cpp +0 -92
  211. data/rice/detail/node.hpp +0 -13
  212. data/rice/detail/protect.cpp +0 -29
  213. data/rice/detail/protect.hpp +0 -34
  214. data/rice/detail/ruby_version_code.hpp +0 -6
  215. data/rice/detail/ruby_version_code.hpp.in +0 -6
  216. data/rice/detail/st.hpp +0 -22
  217. data/rice/detail/win32.hpp +0 -16
  218. data/rice/detail/wrap_function.hpp +0 -66
  219. data/rice/protect.hpp +0 -38
  220. data/rice/protect.ipp +0 -1134
  221. data/rice/rubypp.rb +0 -97
  222. data/rice/to_from_ruby.hpp +0 -8
  223. data/rice/to_from_ruby.ipp +0 -418
  224. data/rice/to_from_ruby_defn.hpp +0 -70
  225. data/ruby/Makefile.am +0 -1
  226. data/ruby/Makefile.in +0 -628
  227. data/ruby/lib/Makefile.am +0 -3
  228. data/ruby/lib/Makefile.in +0 -506
  229. data/ruby/lib/mkmf-rice.rb.in +0 -217
  230. data/ruby/lib/version.rb +0 -3
  231. data/ruby.ac +0 -135
  232. data/sample/Makefile.am +0 -53
  233. data/sample/Makefile.in +0 -495
  234. data/test/Makefile.am +0 -73
  235. data/test/Makefile.in +0 -1219
  236. data/test/ext/Makefile.am +0 -41
  237. data/test/ext/Makefile.in +0 -483
  238. data/test/test_rice.rb +0 -45
@@ -1,9 +1,7 @@
1
1
  #include "unittest.hpp"
2
2
  #include "embed_ruby.hpp"
3
- #include "rice/to_from_ruby.hpp"
4
- #include "rice/String.hpp"
5
- #include "rice/Array.hpp"
6
- #include "rice/Hash.hpp"
3
+ #include <rice/rice.hpp>
4
+
7
5
  #include <limits>
8
6
  #include <cmath>
9
7
 
@@ -19,411 +17,377 @@ SETUP(To_From_Ruby)
19
17
  TESTCASE(object_to_ruby)
20
18
  {
21
19
  Object o(rb_str_new2("foo"));
22
- ASSERT_EQUAL(o.value(), to_ruby(o).value());
20
+ ASSERT_EQUAL(o.value(), detail::to_ruby(o));
23
21
  }
24
22
 
25
23
  TESTCASE(object_from_ruby)
26
24
  {
27
25
  Object o(rb_str_new2("foo"));
28
- ASSERT_EQUAL(o.value(), from_ruby<Object>(o).value());
26
+ ASSERT_EQUAL(o, detail::From_Ruby<Object>().convert(o));
29
27
  }
30
28
 
31
29
  TESTCASE(short_to_ruby)
32
30
  {
33
- ASSERT_EQUAL(INT2NUM(0), to_ruby((short)0).value());
34
- ASSERT_EQUAL(INT2NUM(-1), to_ruby((short)-1).value());
35
- ASSERT_EQUAL(INT2NUM(1), to_ruby((short)1).value());
36
- ASSERT_EQUAL(
37
- Object(INT2NUM(std::numeric_limits<short>::min())),
38
- to_ruby(std::numeric_limits<short>::min()));
39
- ASSERT_EQUAL(
40
- Object(INT2NUM(std::numeric_limits<short>::max())),
41
- to_ruby(std::numeric_limits<short>::max()));
31
+ ASSERT_EQUAL(INT2NUM(0), detail::to_ruby((short)0));
32
+ ASSERT_EQUAL(INT2NUM(-1), detail::to_ruby((short)-1));
33
+ ASSERT_EQUAL(INT2NUM(1), detail::to_ruby((short)1));
34
+ ASSERT_EQUAL(INT2NUM(std::numeric_limits<short>::min()),
35
+ detail::to_ruby(std::numeric_limits<short>::min()));
36
+ ASSERT_EQUAL(INT2NUM(std::numeric_limits<short>::max()),
37
+ detail::to_ruby(std::numeric_limits<short>::max()));
42
38
  }
43
39
 
44
40
  TESTCASE(short_from_ruby)
45
41
  {
46
- ASSERT_EQUAL(0, from_ruby<short>(INT2NUM(0)));
47
- ASSERT_EQUAL(-1, from_ruby<short>(INT2NUM(-1)));
48
- ASSERT_EQUAL(1, from_ruby<short>(INT2NUM(1)));
49
- ASSERT_EQUAL(
50
- std::numeric_limits<short>::min(),
51
- from_ruby<short>(INT2NUM(std::numeric_limits<short>::min())));
52
- ASSERT_EQUAL(
53
- std::numeric_limits<short>::max(),
54
- from_ruby<short>(INT2NUM(std::numeric_limits<short>::max())));
42
+ ASSERT_EQUAL(0, detail::From_Ruby<short>().convert(INT2NUM(0)));
43
+ ASSERT_EQUAL(-1, detail::From_Ruby<short>().convert(INT2NUM(-1)));
44
+ ASSERT_EQUAL(1, detail::From_Ruby<short>().convert(INT2NUM(1)));
45
+ ASSERT_EQUAL(std::numeric_limits<short>::min(),
46
+ detail::From_Ruby<short>().convert(INT2NUM(std::numeric_limits<short>::min())));
47
+ ASSERT_EQUAL(std::numeric_limits<short>::max(),
48
+ detail::From_Ruby<short>().convert(INT2NUM(std::numeric_limits<short>::max())));
49
+
50
+ ASSERT_EXCEPTION_CHECK(
51
+ Exception,
52
+ detail::From_Ruby<short>().convert(rb_str_new2("bad value")),
53
+ ASSERT_EQUAL("no implicit conversion of String into Integer", ex.what())
54
+ );
55
55
  }
56
56
 
57
57
  TESTCASE(int_to_ruby)
58
58
  {
59
- ASSERT_EQUAL(INT2NUM(0), to_ruby((int)0).value());
60
- ASSERT_EQUAL(INT2NUM(-1), to_ruby((int)-1).value());
61
- ASSERT_EQUAL(INT2NUM(1), to_ruby((int)1).value());
62
- ASSERT_EQUAL(
63
- Object(INT2NUM(std::numeric_limits<int>::min())),
64
- to_ruby(std::numeric_limits<int>::min()));
65
- ASSERT_EQUAL(
66
- Object(INT2NUM(std::numeric_limits<int>::max())),
67
- to_ruby(std::numeric_limits<int>::max()));
59
+ ASSERT(rb_equal(INT2NUM(0), detail::to_ruby((int)0)));
60
+ ASSERT(rb_equal(INT2NUM(-1), detail::to_ruby((int)-1)));
61
+ ASSERT(rb_equal(INT2NUM(1), detail::to_ruby((int)1)));
62
+ ASSERT(rb_equal(INT2NUM(std::numeric_limits<int>::min()), detail::to_ruby(std::numeric_limits<int>::min())));
63
+ ASSERT(rb_equal(INT2NUM(std::numeric_limits<int>::max()), detail::to_ruby(std::numeric_limits<int>::max())));
68
64
  }
69
65
 
70
66
  TESTCASE(int_from_ruby)
71
67
  {
72
- ASSERT_EQUAL(0, from_ruby<int>(INT2NUM(0)));
73
- ASSERT_EQUAL(-1, from_ruby<int>(INT2NUM(-1)));
74
- ASSERT_EQUAL(1, from_ruby<int>(INT2NUM(1)));
75
- ASSERT_EQUAL(
76
- std::numeric_limits<int>::min(),
77
- from_ruby<int>(INT2NUM(std::numeric_limits<int>::min())));
78
- ASSERT_EQUAL(
79
- std::numeric_limits<int>::max(),
80
- from_ruby<int>(INT2NUM(std::numeric_limits<int>::max())));
68
+ ASSERT_EQUAL(0, detail::From_Ruby<int>().convert(INT2NUM(0)));
69
+ ASSERT_EQUAL(-1, detail::From_Ruby<int>().convert(INT2NUM(-1)));
70
+ ASSERT_EQUAL(1, detail::From_Ruby<int>().convert(INT2NUM(1)));
71
+ ASSERT_EQUAL(std::numeric_limits<int>::min(),
72
+ detail::From_Ruby<int>().convert(INT2NUM(std::numeric_limits<int>::min())));
73
+ ASSERT_EQUAL(std::numeric_limits<int>::max(),
74
+ detail::From_Ruby<int>().convert(INT2NUM(std::numeric_limits<int>::max())));
75
+
76
+ ASSERT_EXCEPTION_CHECK(
77
+ Exception,
78
+ detail::From_Ruby<int>().convert(rb_str_new2("bad value")),
79
+ ASSERT_EQUAL("no implicit conversion of String into Integer", ex.what())
80
+ );
81
81
  }
82
82
 
83
83
  TESTCASE(long_to_ruby)
84
84
  {
85
- ASSERT_EQUAL(LONG2NUM(0), to_ruby((long)0).value());
86
- ASSERT_EQUAL(LONG2NUM(-1), to_ruby((long)-1).value());
87
- ASSERT_EQUAL(LONG2NUM(1), to_ruby((long)1).value());
88
- ASSERT_EQUAL(
89
- LONG2NUM(FIXNUM_MAX),
90
- to_ruby(FIXNUM_MAX).value());
91
- ASSERT_EQUAL(
92
- LONG2NUM(FIXNUM_MIN),
93
- to_ruby(FIXNUM_MIN).value());
94
- ASSERT_EQUAL(
95
- Object(LONG2NUM(std::numeric_limits<long>::min())),
96
- to_ruby(std::numeric_limits<long>::min()));
97
- ASSERT_EQUAL(
98
- Object(LONG2NUM(std::numeric_limits<long>::max())),
99
- to_ruby(std::numeric_limits<long>::max()));
85
+ ASSERT(rb_equal(LONG2NUM(0), detail::to_ruby((long)0)));
86
+ ASSERT(rb_equal(LONG2NUM(-1), detail::to_ruby((long)-1)));
87
+ ASSERT(rb_equal(LONG2NUM(1), detail::to_ruby((long)1)));
88
+ ASSERT(rb_equal(LONG2NUM(FIXNUM_MAX), detail::to_ruby(FIXNUM_MAX)));
89
+ ASSERT(rb_equal(LONG2NUM(FIXNUM_MIN), detail::to_ruby(FIXNUM_MIN)));
90
+ ASSERT(rb_equal(LONG2NUM(std::numeric_limits<long>::min()), detail::to_ruby(std::numeric_limits<long>::min())));
91
+ ASSERT(rb_equal(LONG2NUM(std::numeric_limits<long>::max()), detail::to_ruby(std::numeric_limits<long>::max())));
100
92
  }
101
93
 
102
94
  TESTCASE(long_from_ruby)
103
95
  {
104
- ASSERT_EQUAL(0, from_ruby<long>(LONG2NUM(0)));
105
- ASSERT_EQUAL(-1, from_ruby<long>(LONG2NUM(-1)));
106
- ASSERT_EQUAL(1, from_ruby<long>(LONG2NUM(1)));
107
- ASSERT_EQUAL(
108
- FIXNUM_MIN,
109
- from_ruby<long>(LONG2NUM(FIXNUM_MIN)));
110
- ASSERT_EQUAL(
111
- FIXNUM_MAX,
112
- from_ruby<long>(LONG2NUM(FIXNUM_MAX)));
113
- ASSERT_EQUAL(
114
- std::numeric_limits<long>::min(),
115
- from_ruby<long>(LONG2NUM(std::numeric_limits<long>::min())));
116
- ASSERT_EQUAL(
117
- std::numeric_limits<long>::max(),
118
- from_ruby<long>(LONG2NUM(std::numeric_limits<long>::max())));
96
+ ASSERT_EQUAL(0, detail::From_Ruby<long>().convert(LONG2NUM(0)));
97
+ ASSERT_EQUAL(-1, detail::From_Ruby<long>().convert(LONG2NUM(-1)));
98
+ ASSERT_EQUAL(1, detail::From_Ruby<long>().convert(LONG2NUM(1)));
99
+ ASSERT_EQUAL(FIXNUM_MIN, detail::From_Ruby<long>().convert(LONG2NUM(FIXNUM_MIN)));
100
+ ASSERT_EQUAL(FIXNUM_MAX, detail::From_Ruby<long>().convert(LONG2NUM(FIXNUM_MAX)));
101
+ ASSERT_EQUAL(std::numeric_limits<long>::min(), detail::From_Ruby<long>().convert(LONG2NUM(std::numeric_limits<long>::min())));
102
+ ASSERT_EQUAL(std::numeric_limits<long>::max(), detail::From_Ruby<long>().convert(LONG2NUM(std::numeric_limits<long>::max())));
103
+
104
+ ASSERT_EXCEPTION_CHECK(
105
+ Exception,
106
+ detail::From_Ruby<long>().convert(rb_str_new2("bad value")),
107
+ ASSERT_EQUAL("no implicit conversion of String into Integer", ex.what())
108
+ );
119
109
  }
120
110
 
121
111
  TESTCASE(long_long_to_ruby)
122
112
  {
123
- ASSERT_EQUAL(LL2NUM(0), to_ruby((long long)0).value());
124
- ASSERT_EQUAL(LL2NUM(-1), to_ruby((long long)-1).value());
125
- ASSERT_EQUAL(LL2NUM(1), to_ruby((long long)1).value());
126
- ASSERT_EQUAL(
127
- Object(LL2NUM(std::numeric_limits<long long>::min())),
128
- to_ruby(std::numeric_limits<long long>::min()));
129
- ASSERT_EQUAL(
130
- Object(LL2NUM(std::numeric_limits<long long>::max())),
131
- to_ruby(std::numeric_limits<long long>::max()));
113
+ ASSERT(rb_equal(LL2NUM(0), detail::to_ruby((long long)0)));
114
+ ASSERT(rb_equal(LL2NUM(-1), detail::to_ruby((long long)-1)));
115
+ ASSERT(rb_equal(LL2NUM(1), detail::to_ruby((long long)1)));
116
+ ASSERT(rb_equal(LL2NUM(std::numeric_limits<long long>::min()), detail::to_ruby(std::numeric_limits<long long>::min())));
117
+ ASSERT(rb_equal(LL2NUM(std::numeric_limits<long long>::max()), detail::to_ruby(std::numeric_limits<long long>::max())));
132
118
  }
133
119
 
134
120
  TESTCASE(long_long_from_ruby)
135
121
  {
136
- ASSERT_EQUAL(0, from_ruby<long long>(LL2NUM(0)));
137
- ASSERT_EQUAL(-1, from_ruby<long long>(LL2NUM(-1)));
138
- ASSERT_EQUAL(1, from_ruby<long long>(LL2NUM(1)));
139
- ASSERT_EQUAL(
140
- std::numeric_limits<long long>::min(),
141
- from_ruby<long long>(LL2NUM(std::numeric_limits<long long>::min())));
142
- ASSERT_EQUAL(
143
- std::numeric_limits<long long>::max(),
144
- from_ruby<long long>(LL2NUM(std::numeric_limits<long long>::max())));
122
+ ASSERT_EQUAL(0, detail::From_Ruby<long long>().convert(LL2NUM(0)));
123
+ ASSERT_EQUAL(-1, detail::From_Ruby<long long>().convert(LL2NUM(-1)));
124
+ ASSERT_EQUAL(1, detail::From_Ruby<long long>().convert(LL2NUM(1)));
125
+ ASSERT_EQUAL(std::numeric_limits<long long>::min(),
126
+ detail::From_Ruby<long long>().convert(LL2NUM(std::numeric_limits<long long>::min())));
127
+ ASSERT_EQUAL(std::numeric_limits<long long>::max(),
128
+ detail::From_Ruby<long long>().convert(LL2NUM(std::numeric_limits<long long>::max())));
129
+
130
+ ASSERT_EXCEPTION_CHECK(
131
+ Exception,
132
+ detail::From_Ruby<long long>().convert(rb_str_new2("bad value")),
133
+ ASSERT_EQUAL("no implicit conversion from string", ex.what())
134
+ );
145
135
  }
146
136
 
147
137
  TESTCASE(unsigned_short_to_ruby)
148
138
  {
149
- ASSERT_EQUAL(UINT2NUM(0), to_ruby((unsigned short)0).value());
150
- ASSERT_EQUAL(UINT2NUM(1), to_ruby((unsigned short)1).value());
151
- ASSERT_EQUAL(
152
- Object(UINT2NUM(std::numeric_limits<unsigned short>::min())),
153
- to_ruby(std::numeric_limits<unsigned short>::min()));
154
- ASSERT_EQUAL(
155
- Object(UINT2NUM(std::numeric_limits<unsigned short>::max())),
156
- to_ruby(std::numeric_limits<unsigned short>::max()));
139
+ ASSERT(rb_equal(UINT2NUM(0), detail::to_ruby((unsigned short)0)));
140
+ ASSERT(rb_equal(UINT2NUM(1), detail::to_ruby((unsigned short)1)));
141
+ ASSERT(rb_equal(UINT2NUM(std::numeric_limits<unsigned short>::min()), detail::to_ruby(std::numeric_limits<unsigned short>::min())));
142
+ ASSERT(rb_equal(UINT2NUM(std::numeric_limits<unsigned short>::max()), detail::to_ruby(std::numeric_limits<unsigned short>::max())));
157
143
  }
158
144
 
159
145
  TESTCASE(unsigned_short_from_ruby)
160
146
  {
161
- ASSERT_EQUAL(0u, from_ruby<unsigned short>(UINT2NUM(0)));
162
- ASSERT_EQUAL(1u, from_ruby<unsigned short>(UINT2NUM(1)));
163
- ASSERT_EQUAL(
164
- std::numeric_limits<unsigned short>::min(),
165
- from_ruby<unsigned short>(UINT2NUM(std::numeric_limits<unsigned short>::min())));
166
- ASSERT_EQUAL(
167
- std::numeric_limits<unsigned short>::max(),
168
- from_ruby<unsigned short>(UINT2NUM(std::numeric_limits<unsigned short>::max())));
147
+ ASSERT_EQUAL(0u, detail::From_Ruby<unsigned short>().convert(UINT2NUM(0)));
148
+ ASSERT_EQUAL(1u, detail::From_Ruby<unsigned short>().convert(UINT2NUM(1)));
149
+ ASSERT_EQUAL(std::numeric_limits<unsigned short>::min(),
150
+ detail::From_Ruby<unsigned short>().convert(UINT2NUM(std::numeric_limits<unsigned short>::min())));
151
+ ASSERT_EQUAL(std::numeric_limits<unsigned short>::max(),
152
+ detail::From_Ruby<unsigned short>().convert(UINT2NUM(std::numeric_limits<unsigned short>::max())));
153
+
154
+ ASSERT_EXCEPTION_CHECK(
155
+ Exception,
156
+ detail::From_Ruby<unsigned short>().convert(rb_str_new2("bad value")),
157
+ ASSERT_EQUAL("no implicit conversion of String into Integer", ex.what())
158
+ );
169
159
  }
170
160
 
171
161
  TESTCASE(unsigned_int_to_ruby)
172
162
  {
173
- ASSERT_EQUAL(UINT2NUM(0), to_ruby((unsigned int)0).value());
174
- ASSERT_EQUAL(UINT2NUM(1), to_ruby((unsigned int)1).value());
175
- ASSERT_EQUAL(
176
- Object(UINT2NUM(std::numeric_limits<unsigned int>::min())),
177
- to_ruby(std::numeric_limits<unsigned int>::min()));
178
- ASSERT_EQUAL(
179
- Object(UINT2NUM(std::numeric_limits<unsigned int>::max())),
180
- to_ruby(std::numeric_limits<unsigned int>::max()));
163
+ ASSERT(rb_equal(UINT2NUM(0), detail::to_ruby((unsigned int)0)));
164
+ ASSERT(rb_equal(UINT2NUM(1), detail::to_ruby((unsigned int)1)));
165
+ ASSERT(rb_equal(UINT2NUM(std::numeric_limits<unsigned int>::min()), detail::to_ruby(std::numeric_limits<unsigned int>::min())));
166
+ ASSERT(rb_equal(UINT2NUM(std::numeric_limits<unsigned int>::max()), detail::to_ruby(std::numeric_limits<unsigned int>::max())));
181
167
  }
182
168
 
183
169
  TESTCASE(unsigned_int_from_ruby)
184
170
  {
185
- ASSERT_EQUAL(0u, from_ruby<unsigned int>(UINT2NUM(0)));
186
- ASSERT_EQUAL(1u, from_ruby<unsigned int>(UINT2NUM(1)));
187
- ASSERT_EQUAL(
188
- std::numeric_limits<unsigned int>::min(),
189
- from_ruby<unsigned int>(UINT2NUM(std::numeric_limits<unsigned int>::min())));
190
- ASSERT_EQUAL(
191
- std::numeric_limits<unsigned int>::max(),
192
- from_ruby<unsigned int>(UINT2NUM(std::numeric_limits<unsigned int>::max())));
171
+ ASSERT_EQUAL(0u, detail::From_Ruby<unsigned int>().convert(UINT2NUM(0)));
172
+ ASSERT_EQUAL(1u, detail::From_Ruby<unsigned int>().convert(UINT2NUM(1)));
173
+ ASSERT_EQUAL(std::numeric_limits<unsigned int>::min(),
174
+ detail::From_Ruby<unsigned int>().convert(UINT2NUM(std::numeric_limits<unsigned int>::min())));
175
+ ASSERT_EQUAL(std::numeric_limits<unsigned int>::max(),
176
+ detail::From_Ruby<unsigned int>().convert(UINT2NUM(std::numeric_limits<unsigned int>::max())));
177
+
178
+ ASSERT_EXCEPTION_CHECK(
179
+ Exception,
180
+ detail::From_Ruby<unsigned int>().convert(rb_str_new2("bad value")),
181
+ ASSERT_EQUAL("no implicit conversion of String into Integer", ex.what())
182
+ );
193
183
  }
194
184
 
195
185
  TESTCASE(unsigned_long_to_ruby)
196
186
  {
197
- ASSERT_EQUAL(ULONG2NUM(0), to_ruby((unsigned long)0).value());
198
- ASSERT_EQUAL(ULONG2NUM(1), to_ruby((unsigned long)1).value());
199
- ASSERT_EQUAL(
200
- ULONG2NUM(FIXNUM_MAX),
201
- to_ruby(FIXNUM_MAX).value());
202
- ASSERT_EQUAL(
203
- Object(ULONG2NUM(std::numeric_limits<unsigned long>::min())),
204
- to_ruby(std::numeric_limits<unsigned long>::min()));
205
- ASSERT_EQUAL(
206
- Object(ULONG2NUM(std::numeric_limits<unsigned long>::max())),
207
- to_ruby(std::numeric_limits<unsigned long>::max()));
187
+ ASSERT(rb_equal(ULONG2NUM(0), detail::to_ruby((unsigned long)0)));
188
+ ASSERT(rb_equal(ULONG2NUM(1), detail::to_ruby((unsigned long)1)));
189
+ ASSERT(rb_equal(ULONG2NUM(FIXNUM_MAX), detail::to_ruby(FIXNUM_MAX)));
190
+ ASSERT(rb_equal(ULONG2NUM(std::numeric_limits<unsigned long>::min()), detail::to_ruby(std::numeric_limits<unsigned long>::min())));
191
+ ASSERT(rb_equal(ULONG2NUM(std::numeric_limits<unsigned long>::max()), detail::to_ruby(std::numeric_limits<unsigned long>::max())));
208
192
  }
209
193
 
210
194
  TESTCASE(unsigned_long_from_ruby)
211
195
  {
212
- ASSERT_EQUAL(0u, from_ruby<unsigned long>(ULONG2NUM(0)));
213
- ASSERT_EQUAL(1u, from_ruby<unsigned long>(ULONG2NUM(1)));
214
- ASSERT_EQUAL(
215
- static_cast<unsigned long>(FIXNUM_MIN),
216
- from_ruby<unsigned long>(ULONG2NUM(FIXNUM_MIN)));
217
- ASSERT_EQUAL(
218
- std::numeric_limits<unsigned long>::min(),
219
- from_ruby<unsigned long>(ULONG2NUM(std::numeric_limits<unsigned long>::min())));
220
- ASSERT_EQUAL(
221
- std::numeric_limits<unsigned long>::max(),
222
- from_ruby<unsigned long>(ULONG2NUM(std::numeric_limits<unsigned long>::max())));
196
+ ASSERT_EQUAL(0u, detail::From_Ruby<unsigned long>().convert(ULONG2NUM(0)));
197
+ ASSERT_EQUAL(1u, detail::From_Ruby<unsigned long>().convert(ULONG2NUM(1)));
198
+ ASSERT_EQUAL(static_cast<unsigned long>(FIXNUM_MIN),
199
+ detail::From_Ruby<unsigned long>().convert(ULONG2NUM(FIXNUM_MIN)));
200
+ ASSERT_EQUAL(std::numeric_limits<unsigned long>::min(),
201
+ detail::From_Ruby<unsigned long>().convert(ULONG2NUM(std::numeric_limits<unsigned long>::min())));
202
+ ASSERT_EQUAL(std::numeric_limits<unsigned long>::max(),
203
+ detail::From_Ruby<unsigned long>().convert(ULONG2NUM(std::numeric_limits<unsigned long>::max())));
204
+
205
+ ASSERT_EXCEPTION_CHECK(
206
+ Exception,
207
+ detail::From_Ruby<unsigned long>().convert(rb_str_new2("bad value")),
208
+ ASSERT_EQUAL("no implicit conversion of String into Integer", ex.what())
209
+ );
223
210
  }
224
211
 
225
212
  TESTCASE(unsigned_long_long_to_ruby)
226
213
  {
227
- ASSERT_EQUAL(ULL2NUM(0), to_ruby((unsigned long long)0).value());
228
- ASSERT_EQUAL(ULL2NUM(1), to_ruby((unsigned long long)1).value());
229
- ASSERT_EQUAL(
230
- Object(ULL2NUM(std::numeric_limits<unsigned long long>::min())),
231
- to_ruby(std::numeric_limits<unsigned long long>::min()));
232
- ASSERT_EQUAL(
233
- Object(ULL2NUM(std::numeric_limits<unsigned long long>::max())),
234
- to_ruby(std::numeric_limits<unsigned long long>::max()));
214
+ ASSERT(rb_equal(ULL2NUM(0), detail::to_ruby((unsigned long long)0)));
215
+ ASSERT(rb_equal(ULL2NUM(1), detail::to_ruby((unsigned long long)1)));
216
+ ASSERT(rb_equal(ULL2NUM(std::numeric_limits<unsigned long long>::min()), detail::to_ruby(std::numeric_limits<unsigned long long>::min())));
217
+ ASSERT(rb_equal(ULL2NUM(std::numeric_limits<unsigned long long>::max()), detail::to_ruby(std::numeric_limits<unsigned long long>::max())));
235
218
  }
236
219
 
237
220
  TESTCASE(unsigned_long_long_from_ruby)
238
221
  {
239
- ASSERT_EQUAL(0u, from_ruby<unsigned long>(ULL2NUM(0)));
240
- ASSERT_EQUAL(1u, from_ruby<unsigned long>(ULL2NUM(1)));
241
- ASSERT_EQUAL(
242
- std::numeric_limits<unsigned long long>::min(),
243
- from_ruby<unsigned long long>(ULL2NUM(std::numeric_limits<unsigned long long>::min())));
244
- ASSERT_EQUAL(
245
- std::numeric_limits<unsigned long long>::max(),
246
- from_ruby<unsigned long long>(ULL2NUM(std::numeric_limits<unsigned long long>::max())));
222
+ ASSERT_EQUAL(0u, detail::From_Ruby<unsigned long>().convert(ULL2NUM(0)));
223
+ ASSERT_EQUAL(1u, detail::From_Ruby<unsigned long>().convert(ULL2NUM(1)));
224
+ ASSERT_EQUAL(std::numeric_limits<unsigned long long>::min(),
225
+ detail::From_Ruby<unsigned long long>().convert(ULL2NUM(std::numeric_limits<unsigned long long>::min())));
226
+ ASSERT_EQUAL(std::numeric_limits<unsigned long long>::max(),
227
+ detail::From_Ruby<unsigned long long>().convert(ULL2NUM(std::numeric_limits<unsigned long long>::max())));
228
+
229
+ ASSERT_EXCEPTION_CHECK(
230
+ Exception,
231
+ detail::From_Ruby<unsigned long long>().convert(rb_str_new2("bad value")),
232
+ ASSERT_EQUAL("no implicit conversion from string", ex.what())
233
+ );
247
234
  }
248
235
 
249
236
  TESTCASE(bool_to_ruby)
250
237
  {
251
- ASSERT_EQUAL(Qfalse, to_ruby(false).value());
252
- ASSERT_EQUAL(Qtrue, to_ruby(true).value());
238
+ ASSERT(rb_equal(Qfalse, detail::to_ruby(false)));
239
+ ASSERT(rb_equal(Qtrue, detail::to_ruby(true)));
253
240
  }
254
241
 
255
242
  TESTCASE(bool_from_ruby)
256
243
  {
257
- ASSERT_EQUAL(false, from_ruby<bool>(Object(Qfalse)));
258
- ASSERT_EQUAL(true, from_ruby<bool>(Object(Qtrue)));
244
+ ASSERT_EQUAL(false, detail::From_Ruby<bool>().convert(Qfalse));
245
+ ASSERT_EQUAL(false, detail::From_Ruby<bool>().convert(Qnil));
246
+ ASSERT_EQUAL(true, detail::From_Ruby<bool>().convert(Qtrue));
247
+ ASSERT_EQUAL(true, detail::From_Ruby<bool>().convert(rb_str_new2("some string")));
248
+ ASSERT_EQUAL(true, detail::From_Ruby<bool>().convert(INT2NUM(3)));
249
+ ASSERT_EQUAL(true, detail::From_Ruby<bool>().convert(rb_float_new(3.33)));
259
250
  }
260
251
 
261
252
  TESTCASE(float_to_ruby)
262
253
  {
263
- ASSERT_EQUAL(Object(rb_float_new(0.0f)), to_ruby(0.0f));
264
- ASSERT_EQUAL(Object(rb_float_new(-1.0f)), to_ruby(-1.0f));
265
- ASSERT_EQUAL(Object(rb_float_new(1.0f)), to_ruby(1.0f));
266
- ASSERT_EQUAL(Object(rb_float_new(0.5f)), to_ruby(0.5f));
267
- ASSERT_EQUAL(
268
- Object(rb_float_new(std::numeric_limits<float>::min())),
269
- to_ruby(std::numeric_limits<float>::min()));
270
- ASSERT_EQUAL(
271
- Object(rb_float_new(std::numeric_limits<float>::max())),
272
- to_ruby(std::numeric_limits<float>::max()));
273
- ASSERT(
274
- to_ruby(std::numeric_limits<float>::quiet_NaN()).call("nan?"));
275
- ASSERT(
276
- to_ruby(std::numeric_limits<float>::signaling_NaN()).call("nan?"));
277
- ASSERT_EQUAL(
278
- Object(rb_float_new(std::numeric_limits<float>::epsilon())),
279
- to_ruby(std::numeric_limits<float>::epsilon()));
254
+ ASSERT(rb_equal(rb_float_new(0.0f), detail::to_ruby(0.0f)));
255
+ ASSERT(rb_equal(rb_float_new(-1.0f), detail::to_ruby(-1.0f)));
256
+ ASSERT(rb_equal(rb_float_new(1.0f), detail::to_ruby(1.0f)));
257
+ ASSERT(rb_equal(rb_float_new(0.5f), detail::to_ruby(0.5f)));
258
+ ASSERT(rb_equal(rb_float_new(std::numeric_limits<float>::min()), detail::to_ruby(std::numeric_limits<float>::min())));
259
+ ASSERT(rb_equal(rb_float_new(std::numeric_limits<float>::max()), detail::to_ruby(std::numeric_limits<float>::max())));
260
+ ASSERT(Object(detail::to_ruby(std::numeric_limits<float>::quiet_NaN())).call("nan?"));
261
+ ASSERT(Object(detail::to_ruby(std::numeric_limits<float>::signaling_NaN())).call("nan?"));
262
+ ASSERT_EQUAL(rb_float_new(std::numeric_limits<float>::epsilon()),
263
+ detail::to_ruby(std::numeric_limits<float>::epsilon()));
280
264
  }
281
265
 
282
266
  TESTCASE(float_from_ruby)
283
267
  {
284
- ASSERT_EQUAL(0.0f, from_ruby<float>(rb_float_new(0.0f)));
285
- ASSERT_EQUAL(-1.0f, from_ruby<float>(rb_float_new(-1.0f)));
286
- ASSERT_EQUAL(1.0f, from_ruby<float>(rb_float_new(1.0f)));
287
- ASSERT_EQUAL(
288
- std::numeric_limits<float>::min(),
289
- from_ruby<float>(rb_float_new(std::numeric_limits<float>::min())));
290
- ASSERT_EQUAL(
291
- std::numeric_limits<float>::max(),
292
- from_ruby<float>(rb_float_new(std::numeric_limits<float>::max())));
293
- ASSERT(
294
- std::isnan(from_ruby<float>(rb_float_new(std::numeric_limits<float>::quiet_NaN()))));
295
- ASSERT(
296
- std::isnan(from_ruby<float>(rb_float_new(std::numeric_limits<float>::signaling_NaN()))));
297
- ASSERT_EQUAL(
298
- std::numeric_limits<float>::epsilon(),
299
- from_ruby<float>(rb_float_new(std::numeric_limits<float>::epsilon())));
268
+ ASSERT_EQUAL(0.0f, detail::From_Ruby<float>().convert(rb_float_new(0.0f)));
269
+ ASSERT_EQUAL(-1.0f, detail::From_Ruby<float>().convert(rb_float_new(-1.0f)));
270
+ ASSERT_EQUAL(1.0f, detail::From_Ruby<float>().convert(rb_float_new(1.0f)));
271
+ ASSERT_EQUAL(std::numeric_limits<float>::min(),
272
+ detail::From_Ruby<float>().convert(rb_float_new(std::numeric_limits<float>::min())));
273
+ ASSERT_EQUAL(std::numeric_limits<float>::max(),
274
+ detail::From_Ruby<float>().convert(rb_float_new(std::numeric_limits<float>::max())));
275
+ ASSERT(std::isnan(detail::From_Ruby<float>().convert(rb_float_new(std::numeric_limits<float>::quiet_NaN()))));
276
+ ASSERT(std::isnan(detail::From_Ruby<float>().convert(rb_float_new(std::numeric_limits<float>::signaling_NaN()))));
277
+ ASSERT_EQUAL(std::numeric_limits<float>::epsilon(),
278
+ detail::From_Ruby<float>().convert(rb_float_new(std::numeric_limits<float>::epsilon())));
279
+
280
+ ASSERT_EXCEPTION_CHECK(
281
+ Exception,
282
+ detail::From_Ruby<float>().convert(rb_str_new2("bad value")),
283
+ ASSERT_EQUAL("no implicit conversion to float from string", ex.what())
284
+ );
300
285
  }
301
286
 
302
287
  TESTCASE(double_to_ruby)
303
288
  {
304
- ASSERT_EQUAL(Object(rb_float_new(0.0f)), to_ruby(0.0f));
305
- ASSERT_EQUAL(Object(rb_float_new(-1.0f)), to_ruby(-1.0f));
306
- ASSERT_EQUAL(Object(rb_float_new(1.0f)), to_ruby(1.0f));
307
- ASSERT_EQUAL(Object(rb_float_new(0.5f)), to_ruby(0.5f));
308
- ASSERT_EQUAL(
309
- Object(rb_float_new(std::numeric_limits<double>::min())),
310
- to_ruby(std::numeric_limits<double>::min()));
311
- ASSERT_EQUAL(
312
- Object(rb_float_new(std::numeric_limits<double>::max())),
313
- to_ruby(std::numeric_limits<double>::max()));
314
- ASSERT(
315
- to_ruby(std::numeric_limits<double>::quiet_NaN()).call("nan?"));
316
- ASSERT(
317
- to_ruby(std::numeric_limits<double>::signaling_NaN()).call("nan?"));
318
- ASSERT_EQUAL(
319
- Object(rb_float_new(std::numeric_limits<double>::epsilon())),
320
- to_ruby(std::numeric_limits<double>::epsilon()));
289
+ ASSERT(rb_equal(rb_float_new(0.0f), detail::to_ruby(0.0f)));
290
+ ASSERT(rb_equal(rb_float_new(-1.0f), detail::to_ruby(-1.0f)));
291
+ ASSERT(rb_equal(rb_float_new(1.0f), detail::to_ruby(1.0f)));
292
+ ASSERT(rb_equal(rb_float_new(0.5f), detail::to_ruby(0.5f)));
293
+ ASSERT(rb_equal(rb_float_new(std::numeric_limits<double>::min()), detail::to_ruby(std::numeric_limits<double>::min())));
294
+ ASSERT(rb_equal(rb_float_new(std::numeric_limits<double>::max()), detail::to_ruby(std::numeric_limits<double>::max())));
295
+ ASSERT(Object(detail::to_ruby(std::numeric_limits<double>::quiet_NaN())).call("nan?"));
296
+ ASSERT(Object(detail::to_ruby(std::numeric_limits<double>::signaling_NaN())).call("nan?"));
297
+ ASSERT(rb_equal(rb_float_new(std::numeric_limits<double>::epsilon()), detail::to_ruby(std::numeric_limits<double>::epsilon())));
321
298
  }
322
299
 
323
300
  TESTCASE(double_from_ruby)
324
301
  {
325
- ASSERT_EQUAL(0.0f, from_ruby<double>(rb_float_new(0.0f)));
326
- ASSERT_EQUAL(-1.0f, from_ruby<double>(rb_float_new(-1.0f)));
327
- ASSERT_EQUAL(1.0f, from_ruby<double>(rb_float_new(1.0f)));
328
- ASSERT_EQUAL(
329
- std::numeric_limits<double>::min(),
330
- from_ruby<double>(rb_float_new(std::numeric_limits<double>::min())));
331
- ASSERT_EQUAL(
332
- std::numeric_limits<double>::max(),
333
- from_ruby<double>(rb_float_new(std::numeric_limits<double>::max())));
334
- ASSERT(
335
- std::isnan(from_ruby<double>(rb_float_new(std::numeric_limits<double>::quiet_NaN()))));
336
- ASSERT(
337
- std::isnan(from_ruby<double>(rb_float_new(std::numeric_limits<double>::signaling_NaN()))));
338
- ASSERT_EQUAL(
339
- std::numeric_limits<double>::epsilon(),
340
- from_ruby<double>(rb_float_new(std::numeric_limits<double>::epsilon())));
302
+ ASSERT_EQUAL(0.0, detail::From_Ruby<double>().convert(rb_float_new(0.0)));
303
+ ASSERT_EQUAL(-1.0, detail::From_Ruby<double>().convert(rb_float_new(-1.0)));
304
+ ASSERT_EQUAL(1.0, detail::From_Ruby<double>().convert(rb_float_new(1.0)));
305
+ ASSERT_EQUAL(std::numeric_limits<double>::min(),
306
+ detail::From_Ruby<double>().convert(rb_float_new(std::numeric_limits<double>::min())));
307
+ ASSERT_EQUAL(std::numeric_limits<double>::max(),
308
+ detail::From_Ruby<double>().convert(rb_float_new(std::numeric_limits<double>::max())));
309
+ ASSERT(std::isnan(detail::From_Ruby<double>().convert(rb_float_new(std::numeric_limits<double>::quiet_NaN()))));
310
+ ASSERT(std::isnan(detail::From_Ruby<double>().convert(rb_float_new(std::numeric_limits<double>::signaling_NaN()))));
311
+ ASSERT_EQUAL(std::numeric_limits<double>::epsilon(),
312
+ detail::From_Ruby<double>().convert(rb_float_new(std::numeric_limits<double>::epsilon())));
313
+
314
+ ASSERT_EXCEPTION_CHECK(
315
+ Exception,
316
+ detail::From_Ruby<double>().convert(rb_str_new2("bad value")),
317
+ ASSERT_EQUAL("no implicit conversion to float from string", ex.what())
318
+ );
341
319
  }
342
320
 
343
321
  TESTCASE(char_const_ptr_to_ruby)
344
322
  {
345
- ASSERT_EQUAL(String(""), to_ruby((char const *)""));
346
- ASSERT_EQUAL(String("foo"), to_ruby((char const *)"foo"));
323
+ ASSERT(rb_equal(String("").value(), detail::to_ruby((char const *)"")));
324
+ ASSERT(rb_equal(String("foo").value(), detail::to_ruby((char const *)"foo")));
347
325
  }
348
326
 
349
327
  TESTCASE(char_const_ptr_from_ruby)
350
328
  {
351
329
  char const* foo = "foo";
352
- ASSERT_EQUAL("", from_ruby<char const *>(rb_str_new2("")));
353
- ASSERT_EQUAL(foo, from_ruby<char const *>(rb_str_new2("foo")));
330
+ ASSERT_EQUAL(foo, detail::From_Ruby<char const *>().convert(rb_str_new2("foo")));
331
+ ASSERT_EQUAL("", detail::From_Ruby<char const*>().convert(rb_str_new2("")));
332
+
333
+ ASSERT_EXCEPTION_CHECK(
334
+ Exception,
335
+ detail::From_Ruby<char const *>().convert(rb_float_new(32.3)),
336
+ ASSERT_EQUAL("wrong argument type Float (expected String)", ex.what())
337
+ );
354
338
  }
355
339
 
356
340
  TESTCASE(char_from_ruby_single_character_string)
357
341
  {
358
- ASSERT_EQUAL('x', from_ruby<char>(rb_str_new2("x")));
342
+ ASSERT_EQUAL('x', detail::From_Ruby<char>().convert(rb_str_new2("x")));
359
343
  }
360
344
 
361
345
  TESTCASE(char_from_ruby_longer_string)
362
346
  {
363
- ASSERT_EXCEPTION(
347
+ ASSERT_EXCEPTION_CHECK(
364
348
  std::invalid_argument,
365
- from_ruby<char>(rb_str_new2("xy"))
349
+ detail::From_Ruby<char>().convert(rb_str_new2("xy")),
350
+ ASSERT_EQUAL("from_ruby<char>: string must have length 1", ex.what())
366
351
  );
367
- }
368
-
369
- TESTCASE(char_from_ruby_fixnum)
370
- {
371
- ASSERT_EQUAL('1', from_ruby<char>(INT2NUM(49)));
372
- }
373
352
 
374
- TESTCASE(char_star_from_ruby)
375
- {
376
- const char* expected = "my string";
377
- ASSERT_EQUAL(expected, from_ruby<const char*>(rb_str_new2("my string")));
378
- }
379
-
380
- TESTCASE(std_string_to_ruby)
381
- {
382
- ASSERT_EQUAL(String(""), to_ruby(std::string("")));
383
- ASSERT_EQUAL(String("foo"), to_ruby(std::string("foo")));
353
+ ASSERT_EXCEPTION_CHECK(
354
+ Exception,
355
+ detail::From_Ruby<char>().convert(rb_float_new(47.2)),
356
+ ASSERT_EQUAL("wrong argument type Float (expected char type)", ex.what())
357
+ );
384
358
  }
385
359
 
386
- TESTCASE(std_string_from_ruby)
360
+ TESTCASE(char_from_ruby_fixnum)
387
361
  {
388
- ASSERT_EQUAL(std::string(""), from_ruby<std::string>(rb_str_new2("")));
389
- ASSERT_EQUAL(std::string("foo"), from_ruby<std::string>(rb_str_new2("foo")));
362
+ ASSERT_EQUAL('1', detail::From_Ruby<char>().convert(INT2NUM(49)));
390
363
  }
391
364
 
392
- TESTCASE(std_string_to_ruby_with_binary)
365
+ TESTCASE(unsigned_char_from_ruby)
393
366
  {
394
- Rice::String got = to_ruby(std::string("\000test", 5));
395
-
396
- ASSERT_EQUAL(String(std::string("\000test", 5)), got);
397
- ASSERT_EQUAL(5, got.length());
398
- }
367
+ unsigned char expected = -1;
368
+ ASSERT_EQUAL(expected, detail::From_Ruby<unsigned char>().convert(INT2NUM(-1)));
399
369
 
400
- TESTCASE(std_string_from_ruby_with_binary)
401
- {
402
- std::string got = from_ruby<std::string>(rb_str_new("\000test", 5));
403
- ASSERT_EQUAL(5, got.length());
404
- ASSERT_EQUAL(std::string("\000test", 5), got);
405
- }
406
-
407
- TESTCASE(array_to_ruby)
408
- {
409
- Array a(rb_ary_new());
410
- ASSERT_EQUAL(a.value(), to_ruby(a).value());
370
+ ASSERT_EXCEPTION_CHECK(
371
+ Exception,
372
+ detail::From_Ruby<unsigned char>().convert(rb_float_new(1.3)),
373
+ ASSERT_EQUAL("wrong argument type Float (expected char type)", ex.what())
374
+ );
411
375
  }
412
376
 
413
- TESTCASE(array_from_ruby)
377
+ TESTCASE(signed_char_from_ruby)
414
378
  {
415
- Array a(rb_ary_new());
416
- ASSERT_EQUAL(a.value(), from_ruby<Array>(a).value());
379
+ unsigned char expected = 10;
380
+ ASSERT_EQUAL(expected, detail::From_Ruby<signed char>().convert(INT2NUM(10)));
417
381
  }
418
382
 
419
- TESTCASE(hash_to_ruby)
383
+ TESTCASE(char_star_from_ruby)
420
384
  {
421
- Hash h(rb_hash_new());
422
- ASSERT_EQUAL(h.value(), to_ruby(h).value());
423
- }
385
+ const char* expected = "my string";
386
+ ASSERT_EQUAL(expected, detail::From_Ruby<const char*>().convert(rb_str_new2("my string")));
424
387
 
425
- TESTCASE(hash_from_ruby)
426
- {
427
- Hash h(rb_hash_new());
428
- ASSERT_EQUAL(h.value(), from_ruby<Hash>(h).value());
429
- }
388
+ ASSERT_EXCEPTION_CHECK(
389
+ Exception,
390
+ detail::From_Ruby<const char*>().convert(rb_float_new(11.11)),
391
+ ASSERT_EQUAL("wrong argument type Float (expected String)", ex.what())
392
+ );
393
+ }