rice 2.1.1 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (246) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +121 -0
  3. data/CONTRIBUTORS.md +19 -0
  4. data/COPYING +2 -2
  5. data/Gemfile +3 -0
  6. data/README.md +69 -0
  7. data/Rakefile +95 -12
  8. data/include/rice/rice.hpp +7766 -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 +30 -376
  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 +14 -9
  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 -49
  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 +6 -0
  71. data/sample/callbacks/sample_callbacks.cpp +35 -0
  72. data/sample/callbacks/test.rb +28 -0
  73. data/sample/enum/extconf.rb +3 -0
  74. data/sample/enum/sample_enum.cpp +3 -17
  75. data/sample/enum/test.rb +2 -2
  76. data/sample/inheritance/animals.cpp +8 -24
  77. data/sample/inheritance/extconf.rb +3 -0
  78. data/sample/inheritance/test.rb +1 -1
  79. data/sample/map/extconf.rb +3 -0
  80. data/sample/map/map.cpp +10 -18
  81. data/sample/map/test.rb +1 -1
  82. data/test/embed_ruby.cpp +34 -0
  83. data/test/embed_ruby.hpp +4 -0
  84. data/test/ext/t1/extconf.rb +3 -0
  85. data/test/ext/t1/t1.cpp +1 -3
  86. data/test/ext/t2/extconf.rb +3 -0
  87. data/test/ext/t2/t2.cpp +1 -1
  88. data/test/extconf.rb +23 -0
  89. data/test/ruby/test_callbacks_sample.rb +28 -0
  90. data/test/ruby/test_multiple_extensions.rb +18 -0
  91. data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
  92. data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
  93. data/test/test_Address_Registration_Guard.cpp +25 -11
  94. data/test/test_Array.cpp +131 -74
  95. data/test/test_Attribute.cpp +147 -0
  96. data/test/test_Builtin_Object.cpp +36 -15
  97. data/test/test_Class.cpp +151 -274
  98. data/test/test_Constructor.cpp +10 -9
  99. data/test/test_Data_Object.cpp +135 -193
  100. data/test/test_Data_Type.cpp +323 -252
  101. data/test/test_Director.cpp +56 -42
  102. data/test/test_Enum.cpp +230 -104
  103. data/test/test_Exception.cpp +7 -7
  104. data/test/test_Hash.cpp +33 -31
  105. data/test/test_Identifier.cpp +6 -6
  106. data/test/test_Inheritance.cpp +221 -0
  107. data/test/test_Iterator.cpp +161 -0
  108. data/test/test_Jump_Tag.cpp +1 -1
  109. data/test/test_Keep_Alive.cpp +161 -0
  110. data/test/test_Memory_Management.cpp +4 -5
  111. data/test/test_Module.cpp +169 -111
  112. data/test/test_Object.cpp +51 -19
  113. data/test/test_Ownership.cpp +275 -0
  114. data/test/test_Self.cpp +205 -0
  115. data/test/test_Stl_Optional.cpp +90 -0
  116. data/test/test_Stl_Pair.cpp +144 -0
  117. data/test/test_Stl_SmartPointer.cpp +200 -0
  118. data/test/test_Stl_String.cpp +74 -0
  119. data/test/test_Stl_Vector.cpp +652 -0
  120. data/test/test_String.cpp +3 -3
  121. data/test/test_Struct.cpp +31 -40
  122. data/test/test_Symbol.cpp +3 -3
  123. data/test/test_To_From_Ruby.cpp +283 -218
  124. data/test/test_global_functions.cpp +41 -20
  125. data/test/unittest.cpp +34 -8
  126. data/test/unittest.hpp +0 -4
  127. metadata +117 -137
  128. data/Doxyfile +0 -2280
  129. data/Makefile.am +0 -26
  130. data/Makefile.in +0 -920
  131. data/README +0 -1055
  132. data/README.mingw +0 -8
  133. data/aclocal.m4 +0 -1088
  134. data/bootstrap +0 -8
  135. data/check_stdcxx_11.ac +0 -142
  136. data/config.guess +0 -1421
  137. data/config.sub +0 -1807
  138. data/configure +0 -7481
  139. data/configure.ac +0 -55
  140. data/depcomp +0 -791
  141. data/doxygen.ac +0 -314
  142. data/doxygen.am +0 -186
  143. data/extconf.rb +0 -69
  144. data/install-sh +0 -501
  145. data/missing +0 -215
  146. data/post-autoconf.rb +0 -22
  147. data/post-automake.rb +0 -28
  148. data/rice/Address_Registration_Guard.cpp +0 -22
  149. data/rice/Arg_impl.hpp +0 -129
  150. data/rice/Arg_operators.cpp +0 -21
  151. data/rice/Arg_operators.hpp +0 -19
  152. data/rice/Array.hpp +0 -214
  153. data/rice/Array.ipp +0 -256
  154. data/rice/Builtin_Object.hpp +0 -8
  155. data/rice/Builtin_Object.ipp +0 -50
  156. data/rice/Builtin_Object_defn.hpp +0 -50
  157. data/rice/Class.cpp +0 -57
  158. data/rice/Class.hpp +0 -8
  159. data/rice/Class.ipp +0 -6
  160. data/rice/Class_defn.hpp +0 -83
  161. data/rice/Data_Type.cpp +0 -54
  162. data/rice/Data_Type_fwd.hpp +0 -12
  163. data/rice/Director.cpp +0 -13
  164. data/rice/Exception.cpp +0 -59
  165. data/rice/Exception_Base.hpp +0 -8
  166. data/rice/Exception_Base.ipp +0 -13
  167. data/rice/Exception_Base_defn.hpp +0 -27
  168. data/rice/Hash.hpp +0 -227
  169. data/rice/Hash.ipp +0 -329
  170. data/rice/Identifier.cpp +0 -8
  171. data/rice/Jump_Tag.hpp +0 -24
  172. data/rice/Makefile.am +0 -124
  173. data/rice/Makefile.in +0 -839
  174. data/rice/Module.cpp +0 -84
  175. data/rice/Module.hpp +0 -8
  176. data/rice/Module.ipp +0 -6
  177. data/rice/Module_defn.hpp +0 -88
  178. data/rice/Module_impl.hpp +0 -281
  179. data/rice/Module_impl.ipp +0 -345
  180. data/rice/Object.cpp +0 -169
  181. data/rice/Object.hpp +0 -8
  182. data/rice/Object.ipp +0 -19
  183. data/rice/Object_defn.hpp +0 -191
  184. data/rice/Require_Guard.hpp +0 -21
  185. data/rice/String.cpp +0 -94
  186. data/rice/String.hpp +0 -91
  187. data/rice/Struct.cpp +0 -117
  188. data/rice/Struct.hpp +0 -162
  189. data/rice/Struct.ipp +0 -26
  190. data/rice/Symbol.cpp +0 -25
  191. data/rice/Symbol.hpp +0 -66
  192. data/rice/Symbol.ipp +0 -44
  193. data/rice/config.hpp +0 -47
  194. data/rice/config.hpp.in +0 -46
  195. data/rice/detail/Arguments.hpp +0 -118
  196. data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
  197. data/rice/detail/Auto_Function_Wrapper.ipp +0 -3694
  198. data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
  199. data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2774
  200. data/rice/detail/Caster.hpp +0 -103
  201. data/rice/detail/Not_Copyable.hpp +0 -25
  202. data/rice/detail/Wrapped_Function.hpp +0 -33
  203. data/rice/detail/cfp.hpp +0 -24
  204. data/rice/detail/cfp.ipp +0 -51
  205. data/rice/detail/check_ruby_type.cpp +0 -27
  206. data/rice/detail/check_ruby_type.hpp +0 -23
  207. data/rice/detail/creation_funcs.hpp +0 -37
  208. data/rice/detail/creation_funcs.ipp +0 -36
  209. data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
  210. data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
  211. data/rice/detail/demangle.cpp +0 -56
  212. data/rice/detail/demangle.hpp +0 -19
  213. data/rice/detail/env.hpp +0 -11
  214. data/rice/detail/method_data.cpp +0 -86
  215. data/rice/detail/node.hpp +0 -13
  216. data/rice/detail/object_call.hpp +0 -69
  217. data/rice/detail/object_call.ipp +0 -131
  218. data/rice/detail/protect.cpp +0 -29
  219. data/rice/detail/protect.hpp +0 -34
  220. data/rice/detail/ruby_version_code.hpp +0 -6
  221. data/rice/detail/ruby_version_code.hpp.in +0 -6
  222. data/rice/detail/st.hpp +0 -22
  223. data/rice/detail/traits.hpp +0 -43
  224. data/rice/detail/win32.hpp +0 -16
  225. data/rice/detail/wrap_function.hpp +0 -341
  226. data/rice/detail/wrap_function.ipp +0 -514
  227. data/rice/protect.hpp +0 -92
  228. data/rice/protect.ipp +0 -1134
  229. data/rice/rubypp.rb +0 -97
  230. data/rice/to_from_ruby.hpp +0 -8
  231. data/rice/to_from_ruby.ipp +0 -294
  232. data/rice/to_from_ruby_defn.hpp +0 -70
  233. data/ruby.ac +0 -135
  234. data/ruby/Makefile.am +0 -1
  235. data/ruby/Makefile.in +0 -625
  236. data/ruby/lib/Makefile.am +0 -3
  237. data/ruby/lib/Makefile.in +0 -503
  238. data/ruby/lib/mkmf-rice.rb.in +0 -217
  239. data/ruby/lib/version.rb +0 -3
  240. data/sample/Makefile.am +0 -47
  241. data/sample/Makefile.in +0 -486
  242. data/test/Makefile.am +0 -72
  243. data/test/Makefile.in +0 -1150
  244. data/test/ext/Makefile.am +0 -41
  245. data/test/ext/Makefile.in +0 -480
  246. data/test/test_rice.rb +0 -41
data/test/test_String.cpp CHANGED
@@ -1,6 +1,6 @@
1
1
  #include "unittest.hpp"
2
- #include "rice/String.hpp"
3
- #include "rice/global_function.hpp"
2
+ #include "embed_ruby.hpp"
3
+ #include <rice/rice.hpp>
4
4
 
5
5
  using namespace Rice;
6
6
 
@@ -8,7 +8,7 @@ TESTSUITE(String);
8
8
 
9
9
  SETUP(String)
10
10
  {
11
- ruby_init();
11
+ embed_ruby();
12
12
  }
13
13
 
14
14
  TESTCASE(default_construct)
data/test/test_Struct.cpp CHANGED
@@ -1,7 +1,6 @@
1
1
  #include "unittest.hpp"
2
- #include "rice/Struct.hpp"
3
- #include "rice/Symbol.hpp"
4
- #include "rice/global_function.hpp"
2
+ #include "embed_ruby.hpp"
3
+ #include <rice/rice.hpp>
5
4
 
6
5
  using namespace Rice;
7
6
 
@@ -22,7 +21,7 @@ namespace
22
21
 
23
22
  SETUP(Struct)
24
23
  {
25
- ruby_init();
24
+ embed_ruby();
26
25
  }
27
26
 
28
27
  TESTCASE(default_construct)
@@ -53,14 +52,6 @@ TESTCASE(copy_construct)
53
52
  ASSERT_EQUAL("z", Symbol(members[2]).c_str());
54
53
  }
55
54
 
56
- TESTCASE(offset_of)
57
- {
58
- Struct s(define_3d_point());
59
- ASSERT_EQUAL(0, s.offset_of("x"));
60
- ASSERT_EQUAL(1, s.offset_of("y"));
61
- ASSERT_EQUAL(2, s.offset_of("z"));
62
- }
63
-
64
55
  TESTCASE(new_instance_no_args)
65
56
  {
66
57
  Struct s(define_3d_point());
@@ -76,12 +67,12 @@ TESTCASE(new_instance_with_args)
76
67
  Array args(a);
77
68
  Struct s(define_3d_point());
78
69
  Struct::Instance p(s.new_instance(args));
79
- ASSERT_EQUAL(to_ruby(1), Object(rb_struct_getmember(p, rb_intern("x"))));
80
- ASSERT_EQUAL(to_ruby(2), Object(rb_struct_getmember(p, rb_intern("y"))));
81
- 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")));
82
73
  }
83
74
 
84
- TESTCASE(swap)
75
+ /*TESTCASE(swap)
85
76
  {
86
77
  Struct s(define_3d_point());
87
78
  Struct s2;
@@ -102,7 +93,7 @@ TESTCASE(swap)
102
93
  }
103
94
 
104
95
  s2.swap(s);
105
- }
96
+ }*/
106
97
 
107
98
  TESTCASE(members)
108
99
  {
@@ -120,9 +111,9 @@ TESTCASE(construct_instance)
120
111
  Array args(a);
121
112
  Struct s(define_3d_point());
122
113
  Struct::Instance p(s, args);
123
- ASSERT_EQUAL(to_ruby(1), Object(rb_struct_getmember(p, rb_intern("x"))));
124
- ASSERT_EQUAL(to_ruby(2), Object(rb_struct_getmember(p, rb_intern("y"))));
125
- 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")));
126
117
  }
127
118
 
128
119
  TESTCASE(wrap_instance)
@@ -130,9 +121,9 @@ TESTCASE(wrap_instance)
130
121
  Struct s(define_3d_point());
131
122
  Object o = s.instance_eval("new(1, 2, 3)");
132
123
  Struct::Instance p(s, o);
133
- ASSERT_EQUAL(to_ruby(1), Object(rb_struct_getmember(p, rb_intern("x"))));
134
- ASSERT_EQUAL(to_ruby(2), Object(rb_struct_getmember(p, rb_intern("y"))));
135
- 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")));
136
127
  }
137
128
 
138
129
  TESTCASE(instance_bracket_identifier)
@@ -141,9 +132,9 @@ TESTCASE(instance_bracket_identifier)
141
132
  Array args(a);
142
133
  Struct s(define_3d_point());
143
134
  Struct::Instance p(s, args);
144
- ASSERT_EQUAL(to_ruby(1), p[Identifier("x")]);
145
- ASSERT_EQUAL(to_ruby(2), p[Identifier("y")]);
146
- 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());
147
138
  }
148
139
 
149
140
  TESTCASE(instance_bracket_name)
@@ -152,9 +143,9 @@ TESTCASE(instance_bracket_name)
152
143
  Array args(a);
153
144
  Struct s(define_3d_point());
154
145
  Struct::Instance p(s, args);
155
- ASSERT_EQUAL(to_ruby(1), p["x"]);
156
- ASSERT_EQUAL(to_ruby(2), p["y"]);
157
- 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());
158
149
  }
159
150
 
160
151
  TESTCASE(instance_bracket_index)
@@ -163,12 +154,12 @@ TESTCASE(instance_bracket_index)
163
154
  Array args(a);
164
155
  Struct s(define_3d_point());
165
156
  Struct::Instance p(s, args);
166
- ASSERT_EQUAL(to_ruby(1), p[0]);
167
- ASSERT_EQUAL(to_ruby(2), p[1]);
168
- 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());
169
160
  }
170
161
 
171
- TESTCASE(instance_swap)
162
+ /*TESTCASE(instance_swap)
172
163
  {
173
164
  Struct s(define_3d_point());
174
165
 
@@ -182,14 +173,14 @@ TESTCASE(instance_swap)
182
173
 
183
174
  p1.swap(p2);
184
175
 
185
- ASSERT_EQUAL(to_ruby(4), Object(rb_struct_getmember(p1, rb_intern("x"))));
186
- ASSERT_EQUAL(to_ruby(5), Object(rb_struct_getmember(p1, rb_intern("y"))));
187
- 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")));
188
179
 
189
- ASSERT_EQUAL(to_ruby(1), Object(rb_struct_getmember(p2, rb_intern("x"))));
190
- ASSERT_EQUAL(to_ruby(2), Object(rb_struct_getmember(p2, rb_intern("y"))));
191
- ASSERT_EQUAL(to_ruby(3), Object(rb_struct_getmember(p2, rb_intern("z"))));
192
- }
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
+ }*/
193
184
 
194
185
  /**
195
186
  * Issue 59 - Copy constructor compilation problem.
data/test/test_Symbol.cpp CHANGED
@@ -1,6 +1,6 @@
1
1
  #include "unittest.hpp"
2
- #include "rice/Symbol.hpp"
3
- #include "rice/Identifier.hpp"
2
+ #include "embed_ruby.hpp"
3
+ #include <rice/rice.hpp>
4
4
 
5
5
  using namespace Rice;
6
6
 
@@ -8,7 +8,7 @@ TESTSUITE(Symbol);
8
8
 
9
9
  SETUP(Symbol)
10
10
  {
11
- ruby_init();
11
+ embed_ruby();
12
12
  }
13
13
 
14
14
  TESTCASE(construct_from_symbol)
@@ -1,8 +1,7 @@
1
1
  #include "unittest.hpp"
2
- #include "rice/to_from_ruby.hpp"
3
- #include "rice/String.hpp"
4
- #include "rice/Array.hpp"
5
- #include "rice/Hash.hpp"
2
+ #include "embed_ruby.hpp"
3
+ #include <rice/rice.hpp>
4
+
6
5
  #include <limits>
7
6
  #include <cmath>
8
7
 
@@ -12,317 +11,383 @@ TESTSUITE(To_From_Ruby);
12
11
 
13
12
  SETUP(To_From_Ruby)
14
13
  {
15
- ruby_init();
14
+ embed_ruby();
16
15
  }
17
16
 
18
17
  TESTCASE(object_to_ruby)
19
18
  {
20
19
  Object o(rb_str_new2("foo"));
21
- ASSERT_EQUAL(o.value(), to_ruby(o).value());
20
+ ASSERT_EQUAL(o.value(), detail::to_ruby(o));
22
21
  }
23
22
 
24
23
  TESTCASE(object_from_ruby)
25
24
  {
26
25
  Object o(rb_str_new2("foo"));
27
- ASSERT_EQUAL(o.value(), from_ruby<Object>(o).value());
26
+ ASSERT_EQUAL(o, detail::From_Ruby<Object>().convert(o));
27
+ }
28
+
29
+ TESTCASE(short_to_ruby)
30
+ {
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()));
38
+ }
39
+
40
+ TESTCASE(short_from_ruby)
41
+ {
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
+ );
28
55
  }
29
56
 
30
57
  TESTCASE(int_to_ruby)
31
58
  {
32
- ASSERT_EQUAL(INT2NUM(0), to_ruby((int)0).value());
33
- ASSERT_EQUAL(INT2NUM(-1), to_ruby((int)-1).value());
34
- ASSERT_EQUAL(INT2NUM(1), to_ruby((int)1).value());
35
- ASSERT_EQUAL(
36
- Object(INT2NUM(std::numeric_limits<int>::min())),
37
- to_ruby(std::numeric_limits<int>::min()));
38
- ASSERT_EQUAL(
39
- Object(INT2NUM(std::numeric_limits<int>::max())),
40
- 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())));
41
64
  }
42
65
 
43
66
  TESTCASE(int_from_ruby)
44
67
  {
45
- ASSERT_EQUAL(0, from_ruby<int>(INT2NUM(0)));
46
- ASSERT_EQUAL(-1, from_ruby<int>(INT2NUM(-1)));
47
- ASSERT_EQUAL(1, from_ruby<int>(INT2NUM(1)));
48
- ASSERT_EQUAL(
49
- std::numeric_limits<int>::min(),
50
- from_ruby<int>(INT2NUM(std::numeric_limits<int>::min())));
51
- ASSERT_EQUAL(
52
- std::numeric_limits<int>::max(),
53
- 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
+ );
54
81
  }
55
82
 
56
83
  TESTCASE(long_to_ruby)
57
84
  {
58
- ASSERT_EQUAL(LONG2NUM(0), to_ruby((long)0).value());
59
- ASSERT_EQUAL(LONG2NUM(-1), to_ruby((long)-1).value());
60
- ASSERT_EQUAL(LONG2NUM(1), to_ruby((long)1).value());
61
- ASSERT_EQUAL(
62
- LONG2NUM(FIXNUM_MAX),
63
- to_ruby(FIXNUM_MAX).value());
64
- ASSERT_EQUAL(
65
- LONG2NUM(FIXNUM_MIN),
66
- to_ruby(FIXNUM_MIN).value());
67
- ASSERT_EQUAL(
68
- Object(LONG2NUM(std::numeric_limits<long>::min())),
69
- to_ruby(std::numeric_limits<long>::min()));
70
- ASSERT_EQUAL(
71
- Object(LONG2NUM(std::numeric_limits<long>::max())),
72
- 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())));
73
92
  }
74
93
 
75
94
  TESTCASE(long_from_ruby)
76
95
  {
77
- ASSERT_EQUAL(0, from_ruby<long>(LONG2NUM(0)));
78
- ASSERT_EQUAL(-1, from_ruby<long>(LONG2NUM(-1)));
79
- ASSERT_EQUAL(1, from_ruby<long>(LONG2NUM(1)));
80
- ASSERT_EQUAL(
81
- FIXNUM_MIN,
82
- from_ruby<long>(LONG2NUM(FIXNUM_MIN)));
83
- ASSERT_EQUAL(
84
- FIXNUM_MAX,
85
- from_ruby<long>(LONG2NUM(FIXNUM_MAX)));
86
- ASSERT_EQUAL(
87
- std::numeric_limits<long>::min(),
88
- from_ruby<long>(LONG2NUM(std::numeric_limits<long>::min())));
89
- ASSERT_EQUAL(
90
- std::numeric_limits<long>::max(),
91
- 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
+ );
109
+ }
110
+
111
+ TESTCASE(long_long_to_ruby)
112
+ {
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())));
118
+ }
119
+
120
+ TESTCASE(long_long_from_ruby)
121
+ {
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
+ );
135
+ }
136
+
137
+ TESTCASE(unsigned_short_to_ruby)
138
+ {
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())));
143
+ }
144
+
145
+ TESTCASE(unsigned_short_from_ruby)
146
+ {
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
+ );
92
159
  }
93
160
 
94
161
  TESTCASE(unsigned_int_to_ruby)
95
162
  {
96
- ASSERT_EQUAL(UINT2NUM(0), to_ruby((unsigned int)0).value());
97
- ASSERT_EQUAL(UINT2NUM(1), to_ruby((unsigned int)1).value());
98
- ASSERT_EQUAL(
99
- Object(UINT2NUM(std::numeric_limits<unsigned int>::min())),
100
- to_ruby(std::numeric_limits<unsigned int>::min()));
101
- ASSERT_EQUAL(
102
- Object(UINT2NUM(std::numeric_limits<unsigned int>::max())),
103
- 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())));
104
167
  }
105
168
 
106
169
  TESTCASE(unsigned_int_from_ruby)
107
170
  {
108
- ASSERT_EQUAL(0u, from_ruby<unsigned int>(UINT2NUM(0)));
109
- ASSERT_EQUAL(1u, from_ruby<unsigned int>(UINT2NUM(1)));
110
- ASSERT_EQUAL(
111
- std::numeric_limits<unsigned int>::min(),
112
- from_ruby<unsigned int>(UINT2NUM(std::numeric_limits<unsigned int>::min())));
113
- ASSERT_EQUAL(
114
- std::numeric_limits<unsigned int>::max(),
115
- 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
+ );
116
183
  }
117
184
 
118
185
  TESTCASE(unsigned_long_to_ruby)
119
186
  {
120
- ASSERT_EQUAL(ULONG2NUM(0), to_ruby((unsigned long)0).value());
121
- ASSERT_EQUAL(ULONG2NUM(1), to_ruby((unsigned long)1).value());
122
- ASSERT_EQUAL(
123
- ULONG2NUM(FIXNUM_MAX),
124
- to_ruby(FIXNUM_MAX).value());
125
- ASSERT_EQUAL(
126
- Object(ULONG2NUM(std::numeric_limits<unsigned long>::min())),
127
- to_ruby(std::numeric_limits<unsigned long>::min()));
128
- ASSERT_EQUAL(
129
- Object(ULONG2NUM(std::numeric_limits<unsigned long>::max())),
130
- 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())));
131
192
  }
132
193
 
133
194
  TESTCASE(unsigned_long_from_ruby)
134
195
  {
135
- ASSERT_EQUAL(0u, from_ruby<unsigned long>(ULONG2NUM(0)));
136
- ASSERT_EQUAL(1u, from_ruby<unsigned long>(ULONG2NUM(1)));
137
- ASSERT_EQUAL(
138
- static_cast<unsigned long>(FIXNUM_MIN),
139
- from_ruby<unsigned long>(ULONG2NUM(FIXNUM_MIN)));
140
- ASSERT_EQUAL(
141
- std::numeric_limits<unsigned long>::min(),
142
- from_ruby<unsigned long>(ULONG2NUM(std::numeric_limits<unsigned long>::min())));
143
- ASSERT_EQUAL(
144
- std::numeric_limits<unsigned long>::max(),
145
- 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
+ );
210
+ }
211
+
212
+ TESTCASE(unsigned_long_long_to_ruby)
213
+ {
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())));
218
+ }
219
+
220
+ TESTCASE(unsigned_long_long_from_ruby)
221
+ {
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
+ );
146
234
  }
147
235
 
148
236
  TESTCASE(bool_to_ruby)
149
237
  {
150
- ASSERT_EQUAL(Qfalse, to_ruby(false).value());
151
- 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)));
152
240
  }
153
241
 
154
242
  TESTCASE(bool_from_ruby)
155
243
  {
156
- ASSERT_EQUAL(false, from_ruby<bool>(Object(Qfalse)));
157
- 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)));
158
250
  }
159
251
 
160
252
  TESTCASE(float_to_ruby)
161
253
  {
162
- ASSERT_EQUAL(Object(rb_float_new(0.0f)), to_ruby(0.0f));
163
- ASSERT_EQUAL(Object(rb_float_new(-1.0f)), to_ruby(-1.0f));
164
- ASSERT_EQUAL(Object(rb_float_new(1.0f)), to_ruby(1.0f));
165
- ASSERT_EQUAL(Object(rb_float_new(0.5f)), to_ruby(0.5f));
166
- ASSERT_EQUAL(
167
- Object(rb_float_new(std::numeric_limits<float>::min())),
168
- to_ruby(std::numeric_limits<float>::min()));
169
- ASSERT_EQUAL(
170
- Object(rb_float_new(std::numeric_limits<float>::max())),
171
- to_ruby(std::numeric_limits<float>::max()));
172
- ASSERT(
173
- to_ruby(std::numeric_limits<float>::quiet_NaN()).call("nan?"));
174
- ASSERT(
175
- to_ruby(std::numeric_limits<float>::signaling_NaN()).call("nan?"));
176
- ASSERT_EQUAL(
177
- Object(rb_float_new(std::numeric_limits<float>::epsilon())),
178
- 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()));
179
264
  }
180
265
 
181
266
  TESTCASE(float_from_ruby)
182
267
  {
183
- ASSERT_EQUAL(0.0f, from_ruby<float>(rb_float_new(0.0f)));
184
- ASSERT_EQUAL(-1.0f, from_ruby<float>(rb_float_new(-1.0f)));
185
- ASSERT_EQUAL(1.0f, from_ruby<float>(rb_float_new(1.0f)));
186
- ASSERT_EQUAL(
187
- std::numeric_limits<float>::min(),
188
- from_ruby<float>(rb_float_new(std::numeric_limits<float>::min())));
189
- ASSERT_EQUAL(
190
- std::numeric_limits<float>::max(),
191
- from_ruby<float>(rb_float_new(std::numeric_limits<float>::max())));
192
- ASSERT(
193
- std::isnan(from_ruby<float>(rb_float_new(std::numeric_limits<float>::quiet_NaN()))));
194
- ASSERT(
195
- std::isnan(from_ruby<float>(rb_float_new(std::numeric_limits<float>::signaling_NaN()))));
196
- ASSERT_EQUAL(
197
- std::numeric_limits<float>::epsilon(),
198
- 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
+ );
199
285
  }
200
286
 
201
287
  TESTCASE(double_to_ruby)
202
288
  {
203
- ASSERT_EQUAL(Object(rb_float_new(0.0f)), to_ruby(0.0f));
204
- ASSERT_EQUAL(Object(rb_float_new(-1.0f)), to_ruby(-1.0f));
205
- ASSERT_EQUAL(Object(rb_float_new(1.0f)), to_ruby(1.0f));
206
- ASSERT_EQUAL(Object(rb_float_new(0.5f)), to_ruby(0.5f));
207
- ASSERT_EQUAL(
208
- Object(rb_float_new(std::numeric_limits<double>::min())),
209
- to_ruby(std::numeric_limits<double>::min()));
210
- ASSERT_EQUAL(
211
- Object(rb_float_new(std::numeric_limits<double>::max())),
212
- to_ruby(std::numeric_limits<double>::max()));
213
- ASSERT(
214
- to_ruby(std::numeric_limits<double>::quiet_NaN()).call("nan?"));
215
- ASSERT(
216
- to_ruby(std::numeric_limits<double>::signaling_NaN()).call("nan?"));
217
- ASSERT_EQUAL(
218
- Object(rb_float_new(std::numeric_limits<double>::epsilon())),
219
- 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())));
220
298
  }
221
299
 
222
300
  TESTCASE(double_from_ruby)
223
301
  {
224
- ASSERT_EQUAL(0.0f, from_ruby<double>(rb_float_new(0.0f)));
225
- ASSERT_EQUAL(-1.0f, from_ruby<double>(rb_float_new(-1.0f)));
226
- ASSERT_EQUAL(1.0f, from_ruby<double>(rb_float_new(1.0f)));
227
- ASSERT_EQUAL(
228
- std::numeric_limits<double>::min(),
229
- from_ruby<double>(rb_float_new(std::numeric_limits<double>::min())));
230
- ASSERT_EQUAL(
231
- std::numeric_limits<double>::max(),
232
- from_ruby<double>(rb_float_new(std::numeric_limits<double>::max())));
233
- ASSERT(
234
- std::isnan(from_ruby<double>(rb_float_new(std::numeric_limits<double>::quiet_NaN()))));
235
- ASSERT(
236
- std::isnan(from_ruby<double>(rb_float_new(std::numeric_limits<double>::signaling_NaN()))));
237
- ASSERT_EQUAL(
238
- std::numeric_limits<double>::epsilon(),
239
- 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
+ );
240
319
  }
241
320
 
242
321
  TESTCASE(char_const_ptr_to_ruby)
243
322
  {
244
- ASSERT_EQUAL(String(""), to_ruby((char const *)""));
245
- 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")));
246
325
  }
247
326
 
248
327
  TESTCASE(char_const_ptr_from_ruby)
249
328
  {
250
329
  char const* foo = "foo";
251
- ASSERT_EQUAL("", from_ruby<char const *>(rb_str_new2("")));
252
- 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
+ );
253
338
  }
254
339
 
255
340
  TESTCASE(char_from_ruby_single_character_string)
256
341
  {
257
- ASSERT_EQUAL('x', from_ruby<char>(rb_str_new2("x")));
342
+ ASSERT_EQUAL('x', detail::From_Ruby<char>().convert(rb_str_new2("x")));
258
343
  }
259
344
 
260
345
  TESTCASE(char_from_ruby_longer_string)
261
346
  {
262
- ASSERT_EXCEPTION(
347
+ ASSERT_EXCEPTION_CHECK(
263
348
  std::invalid_argument,
264
- 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())
265
351
  );
266
- }
267
-
268
- TESTCASE(char_from_ruby_fixnum)
269
- {
270
- ASSERT_EQUAL('1', from_ruby<char>(INT2NUM(49)));
271
- }
272
-
273
- TESTCASE(char_star_from_ruby)
274
- {
275
- const char* expected = "my string";
276
- ASSERT_EQUAL(expected, from_ruby<const char*>(rb_str_new2("my string")));
277
- }
278
352
 
279
- TESTCASE(std_string_to_ruby)
280
- {
281
- ASSERT_EQUAL(String(""), to_ruby(std::string("")));
282
- ASSERT_EQUAL(String("foo"), to_ruby(std::string("foo")));
283
- }
284
-
285
- TESTCASE(std_string_from_ruby)
286
- {
287
- ASSERT_EQUAL(std::string(""), from_ruby<std::string>(rb_str_new2("")));
288
- ASSERT_EQUAL(std::string("foo"), from_ruby<std::string>(rb_str_new2("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
+ );
289
358
  }
290
359
 
291
- TESTCASE(std_string_to_ruby_with_binary)
360
+ TESTCASE(char_from_ruby_fixnum)
292
361
  {
293
- Rice::String got = to_ruby(std::string("\000test", 5));
294
-
295
- ASSERT_EQUAL(String(std::string("\000test", 5)), got);
296
- ASSERT_EQUAL(5, got.length());
362
+ ASSERT_EQUAL('1', detail::From_Ruby<char>().convert(INT2NUM(49)));
297
363
  }
298
364
 
299
- TESTCASE(std_string_from_ruby_with_binary)
365
+ TESTCASE(unsigned_char_from_ruby)
300
366
  {
301
- std::string got = from_ruby<std::string>(rb_str_new("\000test", 5));
302
- ASSERT_EQUAL(5, got.length());
303
- ASSERT_EQUAL(std::string("\000test", 5), got);
304
- }
367
+ unsigned char expected = -1;
368
+ ASSERT_EQUAL(expected, detail::From_Ruby<unsigned char>().convert(INT2NUM(-1)));
305
369
 
306
- TESTCASE(array_to_ruby)
307
- {
308
- Array a(rb_ary_new());
309
- 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
+ );
310
375
  }
311
376
 
312
- TESTCASE(array_from_ruby)
377
+ TESTCASE(signed_char_from_ruby)
313
378
  {
314
- Array a(rb_ary_new());
315
- 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)));
316
381
  }
317
382
 
318
- TESTCASE(hash_to_ruby)
383
+ TESTCASE(char_star_from_ruby)
319
384
  {
320
- Hash h(rb_hash_new());
321
- ASSERT_EQUAL(h.value(), to_ruby(h).value());
322
- }
385
+ const char* expected = "my string";
386
+ ASSERT_EQUAL(expected, detail::From_Ruby<const char*>().convert(rb_str_new2("my string")));
323
387
 
324
- TESTCASE(hash_from_ruby)
325
- {
326
- Hash h(rb_hash_new());
327
- ASSERT_EQUAL(h.value(), from_ruby<Hash>(h).value());
328
- }
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
+ }