rice 3.0.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) 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/lib/mkmf-rice.rb +127 -0
  9. data/lib/version.rb +3 -0
  10. data/rice/Address_Registration_Guard.ipp +75 -32
  11. data/rice/Address_Registration_Guard_defn.hpp +60 -56
  12. data/rice/Arg.hpp +80 -4
  13. data/rice/Arg.ipp +51 -0
  14. data/rice/Constructor.hpp +12 -14
  15. data/rice/Data_Object.ipp +234 -107
  16. data/rice/Data_Object_defn.hpp +77 -117
  17. data/rice/Data_Type.hpp +1 -2
  18. data/rice/Data_Type.ipp +251 -295
  19. data/rice/Data_Type_defn.hpp +175 -243
  20. data/rice/Director.hpp +11 -6
  21. data/rice/Enum.hpp +54 -104
  22. data/rice/Enum.ipp +104 -230
  23. data/rice/Exception.hpp +2 -8
  24. data/rice/Exception.ipp +65 -0
  25. data/rice/Exception_defn.hpp +46 -47
  26. data/rice/Identifier.hpp +28 -28
  27. data/rice/Identifier.ipp +23 -27
  28. data/rice/Return.hpp +39 -0
  29. data/rice/Return.ipp +33 -0
  30. data/rice/detail/Exception_Handler.ipp +22 -62
  31. data/rice/detail/Exception_Handler_defn.hpp +76 -91
  32. data/rice/detail/Iterator.hpp +18 -88
  33. data/rice/detail/Iterator.ipp +47 -0
  34. data/rice/detail/Jump_Tag.hpp +21 -0
  35. data/rice/detail/MethodInfo.hpp +44 -0
  36. data/rice/detail/MethodInfo.ipp +78 -0
  37. data/rice/detail/NativeAttribute.hpp +53 -0
  38. data/rice/detail/NativeAttribute.ipp +83 -0
  39. data/rice/detail/NativeFunction.hpp +69 -0
  40. data/rice/detail/NativeFunction.ipp +248 -0
  41. data/rice/detail/RubyFunction.hpp +39 -0
  42. data/rice/detail/RubyFunction.ipp +92 -0
  43. data/rice/detail/Type.hpp +29 -0
  44. data/rice/detail/Type.ipp +138 -0
  45. data/rice/detail/TypeRegistry.hpp +50 -0
  46. data/rice/detail/TypeRegistry.ipp +106 -0
  47. data/rice/detail/Wrapper.hpp +51 -0
  48. data/rice/detail/Wrapper.ipp +151 -0
  49. data/rice/detail/default_allocation_func.hpp +8 -19
  50. data/rice/detail/default_allocation_func.ipp +9 -8
  51. data/rice/detail/from_ruby.hpp +2 -37
  52. data/rice/detail/from_ruby.ipp +1020 -46
  53. data/rice/detail/from_ruby_defn.hpp +38 -0
  54. data/rice/detail/function_traits.hpp +124 -0
  55. data/rice/detail/method_data.hpp +23 -15
  56. data/rice/detail/method_data.ipp +53 -0
  57. data/rice/detail/rice_traits.hpp +116 -0
  58. data/rice/detail/ruby.hpp +9 -46
  59. data/rice/detail/to_ruby.hpp +3 -17
  60. data/rice/detail/to_ruby.ipp +409 -31
  61. data/rice/detail/to_ruby_defn.hpp +48 -0
  62. data/rice/forward_declares.ipp +82 -0
  63. data/rice/global_function.hpp +16 -20
  64. data/rice/global_function.ipp +8 -17
  65. data/rice/rice.hpp +59 -0
  66. data/rice/ruby_mark.hpp +5 -3
  67. data/rice/ruby_try_catch.hpp +4 -4
  68. data/rice/stl.hpp +11 -0
  69. data/sample/callbacks/extconf.rb +3 -0
  70. data/sample/callbacks/sample_callbacks.cpp +10 -13
  71. data/sample/enum/extconf.rb +3 -0
  72. data/sample/enum/sample_enum.cpp +3 -17
  73. data/sample/enum/test.rb +2 -2
  74. data/sample/inheritance/animals.cpp +8 -24
  75. data/sample/inheritance/extconf.rb +3 -0
  76. data/sample/inheritance/test.rb +1 -1
  77. data/sample/map/extconf.rb +3 -0
  78. data/sample/map/map.cpp +10 -18
  79. data/sample/map/test.rb +1 -1
  80. data/test/embed_ruby.cpp +18 -5
  81. data/test/ext/t1/extconf.rb +3 -0
  82. data/test/ext/t1/t1.cpp +1 -3
  83. data/test/ext/t2/extconf.rb +3 -0
  84. data/test/ext/t2/t2.cpp +1 -1
  85. data/test/extconf.rb +23 -0
  86. data/test/ruby/test_callbacks_sample.rb +28 -0
  87. data/test/ruby/test_multiple_extensions.rb +18 -0
  88. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  89. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  90. data/test/test_Address_Registration_Guard.cpp +23 -10
  91. data/test/test_Array.cpp +129 -73
  92. data/test/test_Attribute.cpp +147 -0
  93. data/test/test_Builtin_Object.cpp +34 -14
  94. data/test/test_Class.cpp +149 -275
  95. data/test/test_Constructor.cpp +10 -9
  96. data/test/test_Data_Object.cpp +133 -192
  97. data/test/test_Data_Type.cpp +322 -252
  98. data/test/test_Director.cpp +54 -41
  99. data/test/test_Enum.cpp +228 -103
  100. data/test/test_Exception.cpp +5 -6
  101. data/test/test_Hash.cpp +31 -30
  102. data/test/test_Identifier.cpp +4 -5
  103. data/test/test_Inheritance.cpp +221 -0
  104. data/test/test_Iterator.cpp +161 -0
  105. data/test/test_Jump_Tag.cpp +1 -1
  106. data/test/test_Keep_Alive.cpp +161 -0
  107. data/test/test_Memory_Management.cpp +2 -4
  108. data/test/test_Module.cpp +167 -110
  109. data/test/test_Object.cpp +41 -21
  110. data/test/test_Ownership.cpp +275 -0
  111. data/test/test_Self.cpp +205 -0
  112. data/test/test_Stl_Optional.cpp +90 -0
  113. data/test/test_Stl_Pair.cpp +144 -0
  114. data/test/test_Stl_SmartPointer.cpp +200 -0
  115. data/test/test_Stl_String.cpp +74 -0
  116. data/test/test_Stl_Vector.cpp +652 -0
  117. data/test/test_String.cpp +1 -2
  118. data/test/test_Struct.cpp +29 -39
  119. data/test/test_Symbol.cpp +1 -2
  120. data/test/test_To_From_Ruby.cpp +249 -285
  121. data/test/test_global_functions.cpp +39 -19
  122. data/test/unittest.hpp +0 -4
  123. metadata +63 -139
  124. data/Doxyfile +0 -2268
  125. data/Makefile.am +0 -26
  126. data/Makefile.in +0 -931
  127. data/README.mingw +0 -8
  128. data/aclocal.m4 +0 -1085
  129. data/ax_cxx_compile_stdcxx.m4 +0 -951
  130. data/bootstrap +0 -8
  131. data/config.guess +0 -1421
  132. data/config.sub +0 -1807
  133. data/configure +0 -7792
  134. data/configure.ac +0 -55
  135. data/depcomp +0 -791
  136. data/doxygen.ac +0 -314
  137. data/doxygen.am +0 -186
  138. data/extconf.rb +0 -70
  139. data/install-sh +0 -501
  140. data/missing +0 -215
  141. data/post-autoconf.rb +0 -22
  142. data/post-automake.rb +0 -28
  143. data/rice/Address_Registration_Guard.cpp +0 -22
  144. data/rice/Arg_impl.hpp +0 -129
  145. data/rice/Arg_operators.cpp +0 -21
  146. data/rice/Arg_operators.hpp +0 -19
  147. data/rice/Array.hpp +0 -214
  148. data/rice/Array.ipp +0 -256
  149. data/rice/Builtin_Object.hpp +0 -8
  150. data/rice/Builtin_Object.ipp +0 -50
  151. data/rice/Builtin_Object_defn.hpp +0 -50
  152. data/rice/Class.cpp +0 -57
  153. data/rice/Class.hpp +0 -8
  154. data/rice/Class.ipp +0 -6
  155. data/rice/Class_defn.hpp +0 -84
  156. data/rice/Data_Type.cpp +0 -54
  157. data/rice/Data_Type_fwd.hpp +0 -12
  158. data/rice/Director.cpp +0 -13
  159. data/rice/Exception.cpp +0 -54
  160. data/rice/Exception_Base.hpp +0 -8
  161. data/rice/Exception_Base.ipp +0 -13
  162. data/rice/Exception_Base_defn.hpp +0 -27
  163. data/rice/Hash.hpp +0 -230
  164. data/rice/Hash.ipp +0 -329
  165. data/rice/Identifier.cpp +0 -8
  166. data/rice/Jump_Tag.hpp +0 -24
  167. data/rice/Makefile.am +0 -121
  168. data/rice/Makefile.in +0 -884
  169. data/rice/Module.cpp +0 -84
  170. data/rice/Module.hpp +0 -8
  171. data/rice/Module.ipp +0 -6
  172. data/rice/Module_defn.hpp +0 -88
  173. data/rice/Module_impl.hpp +0 -281
  174. data/rice/Module_impl.ipp +0 -345
  175. data/rice/Object.cpp +0 -169
  176. data/rice/Object.hpp +0 -8
  177. data/rice/Object.ipp +0 -33
  178. data/rice/Object_defn.hpp +0 -214
  179. data/rice/Require_Guard.hpp +0 -21
  180. data/rice/String.cpp +0 -89
  181. data/rice/String.hpp +0 -91
  182. data/rice/Struct.cpp +0 -117
  183. data/rice/Struct.hpp +0 -162
  184. data/rice/Struct.ipp +0 -26
  185. data/rice/Symbol.cpp +0 -25
  186. data/rice/Symbol.hpp +0 -66
  187. data/rice/Symbol.ipp +0 -44
  188. data/rice/config.hpp +0 -47
  189. data/rice/config.hpp.in +0 -46
  190. data/rice/detail/Arguments.hpp +0 -118
  191. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  192. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3181
  193. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  194. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2501
  195. data/rice/detail/Caster.hpp +0 -103
  196. data/rice/detail/Not_Copyable.hpp +0 -25
  197. data/rice/detail/Wrapped_Function.hpp +0 -33
  198. data/rice/detail/cfp.hpp +0 -24
  199. data/rice/detail/cfp.ipp +0 -51
  200. data/rice/detail/check_ruby_type.cpp +0 -27
  201. data/rice/detail/check_ruby_type.hpp +0 -23
  202. data/rice/detail/creation_funcs.hpp +0 -37
  203. data/rice/detail/creation_funcs.ipp +0 -36
  204. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  205. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  206. data/rice/detail/demangle.cpp +0 -56
  207. data/rice/detail/demangle.hpp +0 -19
  208. data/rice/detail/env.hpp +0 -11
  209. data/rice/detail/method_data.cpp +0 -92
  210. data/rice/detail/node.hpp +0 -13
  211. data/rice/detail/protect.cpp +0 -29
  212. data/rice/detail/protect.hpp +0 -34
  213. data/rice/detail/ruby_version_code.hpp +0 -6
  214. data/rice/detail/ruby_version_code.hpp.in +0 -6
  215. data/rice/detail/st.hpp +0 -22
  216. data/rice/detail/win32.hpp +0 -16
  217. data/rice/detail/wrap_function.hpp +0 -66
  218. data/rice/protect.hpp +0 -38
  219. data/rice/protect.ipp +0 -1134
  220. data/rice/rubypp.rb +0 -97
  221. data/rice/to_from_ruby.hpp +0 -8
  222. data/rice/to_from_ruby.ipp +0 -418
  223. data/rice/to_from_ruby_defn.hpp +0 -70
  224. data/ruby.ac +0 -135
  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/sample/Makefile.am +0 -53
  232. data/sample/Makefile.in +0 -495
  233. data/test/Makefile.am +0 -73
  234. data/test/Makefile.in +0 -1219
  235. data/test/ext/Makefile.am +0 -41
  236. data/test/ext/Makefile.in +0 -483
  237. data/test/test_rice.rb +0 -45
data/test/test_String.cpp CHANGED
@@ -1,7 +1,6 @@
1
1
  #include "unittest.hpp"
2
2
  #include "embed_ruby.hpp"
3
- #include "rice/String.hpp"
4
- #include "rice/global_function.hpp"
3
+ #include <rice/rice.hpp>
5
4
 
6
5
  using namespace Rice;
7
6
 
data/test/test_Struct.cpp CHANGED
@@ -1,8 +1,6 @@
1
1
  #include "unittest.hpp"
2
2
  #include "embed_ruby.hpp"
3
- #include "rice/Struct.hpp"
4
- #include "rice/Symbol.hpp"
5
- #include "rice/global_function.hpp"
3
+ #include <rice/rice.hpp>
6
4
 
7
5
  using namespace Rice;
8
6
 
@@ -54,14 +52,6 @@ TESTCASE(copy_construct)
54
52
  ASSERT_EQUAL("z", Symbol(members[2]).c_str());
55
53
  }
56
54
 
57
- TESTCASE(offset_of)
58
- {
59
- Struct s(define_3d_point());
60
- ASSERT_EQUAL(0, s.offset_of("x"));
61
- ASSERT_EQUAL(1, s.offset_of("y"));
62
- ASSERT_EQUAL(2, s.offset_of("z"));
63
- }
64
-
65
55
  TESTCASE(new_instance_no_args)
66
56
  {
67
57
  Struct s(define_3d_point());
@@ -77,12 +67,12 @@ TESTCASE(new_instance_with_args)
77
67
  Array args(a);
78
68
  Struct s(define_3d_point());
79
69
  Struct::Instance p(s.new_instance(args));
80
- ASSERT_EQUAL(to_ruby(1), Object(rb_struct_getmember(p, rb_intern("x"))));
81
- ASSERT_EQUAL(to_ruby(2), Object(rb_struct_getmember(p, rb_intern("y"))));
82
- ASSERT_EQUAL(to_ruby(3), Object(rb_struct_getmember(p, rb_intern("z"))));
70
+ ASSERT_EQUAL(detail::to_ruby(1), rb_struct_getmember(p, rb_intern("x")));
71
+ ASSERT_EQUAL(detail::to_ruby(2), rb_struct_getmember(p, rb_intern("y")));
72
+ ASSERT_EQUAL(detail::to_ruby(3), rb_struct_getmember(p, rb_intern("z")));
83
73
  }
84
74
 
85
- TESTCASE(swap)
75
+ /*TESTCASE(swap)
86
76
  {
87
77
  Struct s(define_3d_point());
88
78
  Struct s2;
@@ -103,7 +93,7 @@ TESTCASE(swap)
103
93
  }
104
94
 
105
95
  s2.swap(s);
106
- }
96
+ }*/
107
97
 
108
98
  TESTCASE(members)
109
99
  {
@@ -121,9 +111,9 @@ TESTCASE(construct_instance)
121
111
  Array args(a);
122
112
  Struct s(define_3d_point());
123
113
  Struct::Instance p(s, args);
124
- ASSERT_EQUAL(to_ruby(1), Object(rb_struct_getmember(p, rb_intern("x"))));
125
- ASSERT_EQUAL(to_ruby(2), Object(rb_struct_getmember(p, rb_intern("y"))));
126
- ASSERT_EQUAL(to_ruby(3), Object(rb_struct_getmember(p, rb_intern("z"))));
114
+ ASSERT_EQUAL(detail::to_ruby(1), rb_struct_getmember(p, rb_intern("x")));
115
+ ASSERT_EQUAL(detail::to_ruby(2), rb_struct_getmember(p, rb_intern("y")));
116
+ ASSERT_EQUAL(detail::to_ruby(3), rb_struct_getmember(p, rb_intern("z")));
127
117
  }
128
118
 
129
119
  TESTCASE(wrap_instance)
@@ -131,9 +121,9 @@ TESTCASE(wrap_instance)
131
121
  Struct s(define_3d_point());
132
122
  Object o = s.instance_eval("new(1, 2, 3)");
133
123
  Struct::Instance p(s, o);
134
- ASSERT_EQUAL(to_ruby(1), Object(rb_struct_getmember(p, rb_intern("x"))));
135
- ASSERT_EQUAL(to_ruby(2), Object(rb_struct_getmember(p, rb_intern("y"))));
136
- ASSERT_EQUAL(to_ruby(3), Object(rb_struct_getmember(p, rb_intern("z"))));
124
+ ASSERT_EQUAL(detail::to_ruby(1), rb_struct_getmember(p, rb_intern("x")));
125
+ ASSERT_EQUAL(detail::to_ruby(2), rb_struct_getmember(p, rb_intern("y")));
126
+ ASSERT_EQUAL(detail::to_ruby(3), rb_struct_getmember(p, rb_intern("z")));
137
127
  }
138
128
 
139
129
  TESTCASE(instance_bracket_identifier)
@@ -142,9 +132,9 @@ TESTCASE(instance_bracket_identifier)
142
132
  Array args(a);
143
133
  Struct s(define_3d_point());
144
134
  Struct::Instance p(s, args);
145
- ASSERT_EQUAL(to_ruby(1), p[Identifier("x")]);
146
- ASSERT_EQUAL(to_ruby(2), p[Identifier("y")]);
147
- ASSERT_EQUAL(to_ruby(3), p[Identifier("z")]);
135
+ ASSERT_EQUAL(detail::to_ruby(1), p[Identifier("x")].value());
136
+ ASSERT_EQUAL(detail::to_ruby(2), p[Identifier("y")].value());
137
+ ASSERT_EQUAL(detail::to_ruby(3), p[Identifier("z")].value());
148
138
  }
149
139
 
150
140
  TESTCASE(instance_bracket_name)
@@ -153,9 +143,9 @@ TESTCASE(instance_bracket_name)
153
143
  Array args(a);
154
144
  Struct s(define_3d_point());
155
145
  Struct::Instance p(s, args);
156
- ASSERT_EQUAL(to_ruby(1), p["x"]);
157
- ASSERT_EQUAL(to_ruby(2), p["y"]);
158
- ASSERT_EQUAL(to_ruby(3), p["z"]);
146
+ ASSERT_EQUAL(detail::to_ruby(1), p["x"].value());
147
+ ASSERT_EQUAL(detail::to_ruby(2), p["y"].value());
148
+ ASSERT_EQUAL(detail::to_ruby(3), p["z"].value());
159
149
  }
160
150
 
161
151
  TESTCASE(instance_bracket_index)
@@ -164,12 +154,12 @@ TESTCASE(instance_bracket_index)
164
154
  Array args(a);
165
155
  Struct s(define_3d_point());
166
156
  Struct::Instance p(s, args);
167
- ASSERT_EQUAL(to_ruby(1), p[0]);
168
- ASSERT_EQUAL(to_ruby(2), p[1]);
169
- ASSERT_EQUAL(to_ruby(3), p[2]);
157
+ ASSERT_EQUAL(detail::to_ruby(1), p[0].value());
158
+ ASSERT_EQUAL(detail::to_ruby(2), p[1].value());
159
+ ASSERT_EQUAL(detail::to_ruby(3), p[2].value());
170
160
  }
171
161
 
172
- TESTCASE(instance_swap)
162
+ /*TESTCASE(instance_swap)
173
163
  {
174
164
  Struct s(define_3d_point());
175
165
 
@@ -183,14 +173,14 @@ TESTCASE(instance_swap)
183
173
 
184
174
  p1.swap(p2);
185
175
 
186
- ASSERT_EQUAL(to_ruby(4), Object(rb_struct_getmember(p1, rb_intern("x"))));
187
- ASSERT_EQUAL(to_ruby(5), Object(rb_struct_getmember(p1, rb_intern("y"))));
188
- ASSERT_EQUAL(to_ruby(6), Object(rb_struct_getmember(p1, rb_intern("z"))));
176
+ ASSERT_EQUAL(detail::to_ruby(4), rb_struct_getmember(p1, rb_intern("x")));
177
+ ASSERT_EQUAL(detail::to_ruby(5), rb_struct_getmember(p1, rb_intern("y")));
178
+ ASSERT_EQUAL(detail::to_ruby(6), rb_struct_getmember(p1, rb_intern("z")));
189
179
 
190
- ASSERT_EQUAL(to_ruby(1), Object(rb_struct_getmember(p2, rb_intern("x"))));
191
- ASSERT_EQUAL(to_ruby(2), Object(rb_struct_getmember(p2, rb_intern("y"))));
192
- ASSERT_EQUAL(to_ruby(3), Object(rb_struct_getmember(p2, rb_intern("z"))));
193
- }
180
+ ASSERT_EQUAL(detail::to_ruby(1), rb_struct_getmember(p2, rb_intern("x")));
181
+ ASSERT_EQUAL(detail::to_ruby(2), rb_struct_getmember(p2, rb_intern("y")));
182
+ ASSERT_EQUAL(detail::to_ruby(3), rb_struct_getmember(p2, rb_intern("z")));
183
+ }*/
194
184
 
195
185
  /**
196
186
  * Issue 59 - Copy constructor compilation problem.
data/test/test_Symbol.cpp CHANGED
@@ -1,7 +1,6 @@
1
1
  #include "unittest.hpp"
2
2
  #include "embed_ruby.hpp"
3
- #include "rice/Symbol.hpp"
4
- #include "rice/Identifier.hpp"
3
+ #include <rice/rice.hpp>
5
4
 
6
5
  using namespace Rice;
7
6
 
@@ -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
+ }