rice 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Doxyfile +1 -1
- data/Makefile.in +130 -52
- data/README +45 -79
- data/Rakefile +1 -36
- data/aclocal.m4 +133 -61
- data/config.guess +43 -8
- data/config.sub +41 -13
- data/configure +1370 -1898
- data/configure.ac +2 -2
- data/doxygen.ac +1 -1
- data/extconf.rb +3 -1
- data/rice/Arg_impl.hpp +2 -2
- data/rice/Data_Type.cpp +34 -1
- data/rice/Data_Type.ipp +14 -5
- data/rice/Data_Type_defn.hpp +28 -1
- data/rice/Director.cpp +0 -6
- data/rice/Director.hpp +0 -8
- data/rice/Hash.hpp +1 -1
- data/rice/Makefile.am +2 -12
- data/rice/Makefile.in +111 -88
- data/rice/Object.cpp +8 -1
- data/rice/Object.ipp +1 -1
- data/rice/Object_defn.hpp +8 -0
- data/rice/config.hpp +3 -0
- data/rice/config.hpp.in +3 -0
- data/rice/detail/Auto_Function_Wrapper.ipp +1025 -512
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +545 -272
- data/rice/detail/cfp.hpp +24 -0
- data/rice/detail/cfp.ipp +51 -0
- data/rice/detail/method_data.cpp +107 -336
- data/rice/detail/node.hpp +13 -13
- data/rice/detail/ruby.hpp +4 -0
- data/rice/detail/rubysig.hpp +19 -19
- data/rice/detail/traits.hpp +43 -0
- data/rice/generate_code.rb +37 -16
- data/rice/protect.hpp +1 -1
- data/rice/protect.ipp +448 -192
- data/rice/to_from_ruby.ipp +4 -12
- data/rice/to_from_ruby_defn.hpp +2 -2
- data/ruby/Makefile.in +99 -32
- data/ruby/lib/Makefile.in +61 -21
- data/ruby/lib/mkmf-rice.rb.in +9 -2
- data/ruby/lib/version.rb +1 -1
- data/sample/Makefile.in +33 -10
- data/test/Makefile.am +27 -0
- data/test/Makefile.in +270 -59
- data/test/ext/Makefile.am +43 -0
- data/test/ext/Makefile.in +399 -0
- data/test/ext/t1/Foo.hpp +10 -0
- data/test/ext/t1/extconf.rb +2 -0
- data/test/ext/t1/t1.cpp +15 -0
- data/test/ext/t2/extconf.rb +2 -0
- data/test/ext/t2/t2.cpp +11 -0
- data/test/test_Allocation_Strategies.cpp +1 -1
- data/test/test_Class.cpp +79 -0
- data/test/test_Data_Type.cpp +2 -2
- data/test/test_Director.cpp +114 -38
- data/test/test_Module.cpp +27 -2
- data/test/test_To_From_Ruby.cpp +4 -4
- data/test/test_rice.rb +9 -1
- metadata +23 -8
- data/rice/detail/method_data.cpp.rpp +0 -301
- data/rice/detail/mininode.cpp.rpp +0 -62
- data/rice/detail/mininode.hpp.rpp +0 -119
- data/rice/detail/remove_const.hpp +0 -21
data/test/ext/t1/t1.cpp
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#include "Foo.hpp"
|
2
|
+
|
3
|
+
#include "rice/Data_Type.hpp"
|
4
|
+
#include "rice/Constructor.hpp"
|
5
|
+
|
6
|
+
using namespace Rice;
|
7
|
+
|
8
|
+
extern "C"
|
9
|
+
void Init_t1()
|
10
|
+
{
|
11
|
+
define_class<Foo>("Foo")
|
12
|
+
.define_constructor(Constructor<Foo>())
|
13
|
+
.define_method("foo", &Foo::foo);
|
14
|
+
}
|
15
|
+
|
data/test/ext/t2/t2.cpp
ADDED
@@ -67,7 +67,7 @@ TESTCASE(xmalloc_allocation_strategy_allocate)
|
|
67
67
|
|
68
68
|
TESTCASE(xmalloc_allocation_strategy_free)
|
69
69
|
{
|
70
|
-
Foo * t =
|
70
|
+
Foo * t = Xmalloc_Allocation_Strategy<Foo>::allocate();
|
71
71
|
ASSERT(constructor_called);
|
72
72
|
ASSERT(!destructor_called);
|
73
73
|
Xmalloc_Allocation_Strategy<Foo>::free(t);
|
data/test/test_Class.cpp
CHANGED
@@ -396,3 +396,82 @@ TESTCASE(subclassing)
|
|
396
396
|
m.instance_eval("class NewClass < Testing::BaseClass; end;");
|
397
397
|
m.instance_eval("n = NewClass.new");
|
398
398
|
}
|
399
|
+
|
400
|
+
namespace
|
401
|
+
{
|
402
|
+
int defaults_method_one_arg1;
|
403
|
+
int defaults_method_one_arg2;
|
404
|
+
bool defaults_method_one_arg3 = false;
|
405
|
+
|
406
|
+
class DefaultArgs
|
407
|
+
{
|
408
|
+
public:
|
409
|
+
void defaults_method_one(int arg1, int arg2 = 3, bool arg3 = true)
|
410
|
+
{
|
411
|
+
defaults_method_one_arg1 = arg1;
|
412
|
+
defaults_method_one_arg2 = arg2;
|
413
|
+
defaults_method_one_arg3 = arg3;
|
414
|
+
}
|
415
|
+
};
|
416
|
+
}
|
417
|
+
|
418
|
+
TESTCASE(define_method_default_arguments)
|
419
|
+
{
|
420
|
+
Class c = define_class<DefaultArgs>("DefaultArgs")
|
421
|
+
.define_constructor(Constructor<DefaultArgs>())
|
422
|
+
.define_method("with_defaults",
|
423
|
+
&DefaultArgs::defaults_method_one,
|
424
|
+
(Arg("arg1"), Arg("arg2") = 3, Arg("arg3") = true));
|
425
|
+
|
426
|
+
Object o = c.call("new");
|
427
|
+
o.call("with_defaults", 2);
|
428
|
+
|
429
|
+
ASSERT_EQUAL(2, defaults_method_one_arg1);
|
430
|
+
ASSERT_EQUAL(3, defaults_method_one_arg2);
|
431
|
+
ASSERT(defaults_method_one_arg3);
|
432
|
+
|
433
|
+
o.call("with_defaults", 11, 10);
|
434
|
+
|
435
|
+
ASSERT_EQUAL(11, defaults_method_one_arg1);
|
436
|
+
ASSERT_EQUAL(10, defaults_method_one_arg2);
|
437
|
+
ASSERT(defaults_method_one_arg3);
|
438
|
+
|
439
|
+
o.call("with_defaults", 22, 33, false);
|
440
|
+
|
441
|
+
ASSERT_EQUAL(22, defaults_method_one_arg1);
|
442
|
+
ASSERT_EQUAL(33, defaults_method_one_arg2);
|
443
|
+
ASSERT(!defaults_method_one_arg3);
|
444
|
+
}
|
445
|
+
|
446
|
+
/*
|
447
|
+
namespace {
|
448
|
+
float with_reference_defaults_x;
|
449
|
+
std::string with_reference_defaults_str;
|
450
|
+
|
451
|
+
class DefaultArgsRefs
|
452
|
+
{
|
453
|
+
public:
|
454
|
+
void with_reference_defaults(float x, std::string const& str = std::string("testing"))
|
455
|
+
{
|
456
|
+
with_reference_defaults_x = x;
|
457
|
+
with_reference_defaults_str = str;
|
458
|
+
}
|
459
|
+
};
|
460
|
+
|
461
|
+
}
|
462
|
+
|
463
|
+
TESTCASE(define_method_works_with_reference_const_default_values)
|
464
|
+
{
|
465
|
+
Class c = define_class<DefaultArgsRefs>("DefaultArgsRefs")
|
466
|
+
.define_constructor(Constructor<DefaultArgsRefs>())
|
467
|
+
.define_method("bar",
|
468
|
+
&DefaultArgsRefs::with_reference_defaults,
|
469
|
+
(Arg("x"), Arg("str") = std::string("testing")));
|
470
|
+
|
471
|
+
Object o = c.call("new");
|
472
|
+
o.call("bar", 3);
|
473
|
+
|
474
|
+
ASSERT_EQUAL(3, with_reference_defaults_x);
|
475
|
+
ASSERT_EQUAL("testing", with_reference_defaults_str);
|
476
|
+
}
|
477
|
+
*/
|
data/test/test_Data_Type.cpp
CHANGED
@@ -44,7 +44,7 @@ namespace {
|
|
44
44
|
}
|
45
45
|
|
46
46
|
int process() {
|
47
|
-
vector<Listener*>::iterator i = mListeners.begin();
|
47
|
+
std::vector<Listener*>::iterator i = mListeners.begin();
|
48
48
|
int accum = 0;
|
49
49
|
for(; i != mListeners.end(); i++) {
|
50
50
|
accum += (*i)->getValue();
|
@@ -56,7 +56,7 @@ namespace {
|
|
56
56
|
int listenerCount() { return mListeners.size(); }
|
57
57
|
|
58
58
|
private:
|
59
|
-
vector<Listener*> mListeners;
|
59
|
+
std::vector<Listener*> mListeners;
|
60
60
|
};
|
61
61
|
}
|
62
62
|
|
data/test/test_Director.cpp
CHANGED
@@ -65,20 +65,20 @@ namespace {
|
|
65
65
|
public:
|
66
66
|
WorkerDirector(Object self) : Director(self) { }
|
67
67
|
|
68
|
-
int process(int num) {
|
69
|
-
|
70
|
-
raisePureVirtual();
|
71
|
-
} else {
|
72
|
-
return from_ruby<int>( getSelf().call("process", num) );
|
73
|
-
}
|
68
|
+
virtual int process(int num) {
|
69
|
+
return from_ruby<int>( getSelf().call("process", num) );
|
74
70
|
}
|
75
71
|
|
76
|
-
int
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
72
|
+
int default_process(int num) {
|
73
|
+
raisePureVirtual();
|
74
|
+
}
|
75
|
+
|
76
|
+
virtual int doSomething(int num) {
|
77
|
+
return from_ruby<int>( getSelf().call("do_something", num) );
|
78
|
+
}
|
79
|
+
|
80
|
+
int default_doSomething(int num) {
|
81
|
+
return Worker::doSomething(num);
|
82
82
|
}
|
83
83
|
};
|
84
84
|
};
|
@@ -86,15 +86,12 @@ namespace {
|
|
86
86
|
SETUP(Director)
|
87
87
|
{
|
88
88
|
ruby_init();
|
89
|
-
|
90
|
-
// Always need to tell Rice about the base class so that
|
91
|
-
// casting works correctly
|
92
|
-
define_class<Worker>("__Worker__");
|
93
89
|
}
|
94
90
|
|
95
91
|
TESTCASE(exposes_worker_as_instantiatable_class)
|
96
92
|
{
|
97
|
-
define_class<
|
93
|
+
define_class<Worker>("Worker")
|
94
|
+
.define_director<WorkerDirector>()
|
98
95
|
.define_constructor(Constructor<WorkerDirector, Object>())
|
99
96
|
.define_method("get_number", &Worker::getNumber);
|
100
97
|
|
@@ -106,10 +103,11 @@ TESTCASE(exposes_worker_as_instantiatable_class)
|
|
106
103
|
|
107
104
|
TESTCASE(can_call_virtual_methods_on_base_class)
|
108
105
|
{
|
109
|
-
define_class<
|
106
|
+
define_class<Worker>("Worker")
|
107
|
+
.define_director<WorkerDirector>()
|
110
108
|
.define_constructor(Constructor<WorkerDirector, Object>())
|
111
109
|
.define_method("get_number", &Worker::getNumber)
|
112
|
-
.define_method("do_something", &WorkerDirector::
|
110
|
+
.define_method("do_something", &WorkerDirector::default_doSomething);
|
113
111
|
|
114
112
|
Module m = define_module("Testing");
|
115
113
|
|
@@ -120,9 +118,10 @@ TESTCASE(can_call_virtual_methods_on_base_class)
|
|
120
118
|
|
121
119
|
TESTCASE(super_calls_pass_execution_up_the_inheritance_chain)
|
122
120
|
{
|
123
|
-
define_class<
|
121
|
+
define_class<Worker>("Worker")
|
122
|
+
.define_director<WorkerDirector>()
|
124
123
|
.define_constructor(Constructor<WorkerDirector, Object>())
|
125
|
-
.define_method("do_something", &WorkerDirector::
|
124
|
+
.define_method("do_something", &WorkerDirector::default_doSomething);
|
126
125
|
|
127
126
|
Module m = define_module("Testing");
|
128
127
|
m.instance_eval("class RubyWorker < Worker; def do_something(num); super * num; end; end");
|
@@ -134,9 +133,10 @@ TESTCASE(super_calls_pass_execution_up_the_inheritance_chain)
|
|
134
133
|
|
135
134
|
TESTCASE(super_calls_on_pure_virtual_raise_error)
|
136
135
|
{
|
137
|
-
define_class<
|
136
|
+
define_class<Worker>("Worker")
|
137
|
+
.define_director<WorkerDirector>()
|
138
138
|
.define_constructor(Constructor<WorkerDirector, Object>())
|
139
|
-
.define_method("process", &WorkerDirector::
|
139
|
+
.define_method("process", &WorkerDirector::default_process);
|
140
140
|
|
141
141
|
Module m = define_module("Testing");
|
142
142
|
m.instance_eval("class RubyWorker < Worker; def process(num); super; end; end");
|
@@ -158,21 +158,22 @@ TESTCASE(polymorphic_calls_head_down_the_call_chain)
|
|
158
158
|
.define_method("add_worker", &Handler::addWorker)
|
159
159
|
.define_method("process_workers", &Handler::processWorkers);
|
160
160
|
|
161
|
-
define_class<
|
161
|
+
define_class<Worker>("Worker")
|
162
|
+
.define_director<WorkerDirector>()
|
162
163
|
.define_constructor(Constructor<WorkerDirector, Object>())
|
163
|
-
.define_method("process", &WorkerDirector::
|
164
|
+
.define_method("process", &WorkerDirector::default_process);
|
164
165
|
|
165
166
|
Module m = define_module("Testing");
|
166
167
|
|
167
168
|
m.instance_eval(
|
168
169
|
"class EchoWorker < Worker; def process(num); num + 2; end; end;"
|
169
170
|
"class DoubleWorker < Worker; def process(num); num * 2; end; end;"
|
170
|
-
"handler = Handler.new;"
|
171
|
-
"handler.add_worker(EchoWorker.new);"
|
172
|
-
"handler.add_worker(DoubleWorker.new);"
|
171
|
+
"$handler = Handler.new;"
|
172
|
+
"$handler.add_worker(EchoWorker.new);"
|
173
|
+
"$handler.add_worker(DoubleWorker.new);"
|
173
174
|
);
|
174
175
|
|
175
|
-
Object result = m.instance_eval("handler.process_workers(5)");
|
176
|
+
Object result = m.instance_eval("$handler.process_workers(5)");
|
176
177
|
|
177
178
|
// Hit's EchoWorker, so 5 + 2, then passes that to DoubleWorker, so 7 * 2 = 14
|
178
179
|
ASSERT_EQUAL(14, from_ruby<int>(result.value()));
|
@@ -195,23 +196,42 @@ namespace {
|
|
195
196
|
CallsSelfDirector(Object self) : Director(self) { }
|
196
197
|
|
197
198
|
virtual int doItImpl(int in) {
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
199
|
+
return from_ruby<int>( getSelf().call("do_it_impl", in) );
|
200
|
+
}
|
201
|
+
|
202
|
+
int default_doItImpl(int in) {
|
203
|
+
raisePureVirtual();
|
203
204
|
}
|
204
205
|
};
|
205
206
|
|
207
|
+
struct MyCallsSelf : CallsSelf {
|
208
|
+
MyCallsSelf() { }
|
209
|
+
|
210
|
+
int doItImpl(int in) { return in * 12; }
|
211
|
+
};
|
212
|
+
|
213
|
+
// Abstract type return types handled properly
|
214
|
+
CallsSelf* getCallsSelf() {
|
215
|
+
return new MyCallsSelf();
|
216
|
+
}
|
217
|
+
|
218
|
+
// Abstract type Argument types handled properly
|
219
|
+
int doItOnPointer(CallsSelf* obj, int in) {
|
220
|
+
return obj->doIt(in);
|
221
|
+
}
|
222
|
+
|
223
|
+
int doItOnReference(CallsSelf& obj, int in) {
|
224
|
+
return obj.doIt(in);
|
225
|
+
}
|
226
|
+
|
206
227
|
}
|
207
228
|
|
208
229
|
TESTCASE(mix_of_polymorphic_calls_and_inheritance_dont_cause_infinite_loops)
|
209
230
|
{
|
210
|
-
define_class<CallsSelf>("
|
211
|
-
|
212
|
-
define_class<CallsSelfDirector, CallsSelf>("CallsSelf")
|
231
|
+
define_class<CallsSelf>("CallsSelf")
|
232
|
+
.define_director<CallsSelfDirector>()
|
213
233
|
.define_constructor(Constructor<CallsSelfDirector, Rice::Object>())
|
214
|
-
.define_method("do_it_impl", &CallsSelfDirector::
|
234
|
+
.define_method("do_it_impl", &CallsSelfDirector::default_doItImpl)
|
215
235
|
.define_method("do_it", &CallsSelf::doIt);
|
216
236
|
|
217
237
|
Module m = define_module("Testing");
|
@@ -223,3 +243,59 @@ TESTCASE(mix_of_polymorphic_calls_and_inheritance_dont_cause_infinite_loops)
|
|
223
243
|
|
224
244
|
ASSERT_EQUAL(100, from_ruby<int>(result.value()));
|
225
245
|
}
|
246
|
+
|
247
|
+
TESTCASE(director_class_super_classes_get_type_bound)
|
248
|
+
{
|
249
|
+
Module m = define_module("Testing");
|
250
|
+
m.define_module_function("get_calls_self", &getCallsSelf);
|
251
|
+
|
252
|
+
define_class<CallsSelf>("CallsSelf")
|
253
|
+
.define_director<CallsSelfDirector>()
|
254
|
+
.define_constructor(Constructor<CallsSelfDirector, Rice::Object>())
|
255
|
+
.define_method("do_it_impl", &CallsSelfDirector::default_doItImpl)
|
256
|
+
.define_method("do_it", &CallsSelf::doIt);
|
257
|
+
|
258
|
+
Object result = m.instance_eval("cs = Testing::get_calls_self; cs.do_it(3);");
|
259
|
+
ASSERT_EQUAL(36, from_ruby<int>(result.value()));
|
260
|
+
}
|
261
|
+
|
262
|
+
TESTCASE(director_allows_abstract_types_used_as_parameters_pointers)
|
263
|
+
{
|
264
|
+
Module m = define_module("Testing");
|
265
|
+
m.define_module_function("do_it_on_pointer", &doItOnPointer);
|
266
|
+
|
267
|
+
define_class<CallsSelf>("CallsSelf")
|
268
|
+
.define_director<CallsSelfDirector>()
|
269
|
+
.define_constructor(Constructor<CallsSelfDirector, Rice::Object>())
|
270
|
+
.define_method("do_it_impl", &CallsSelfDirector::default_doItImpl)
|
271
|
+
.define_method("do_it", &CallsSelf::doIt);
|
272
|
+
|
273
|
+
Object result = m.instance_eval(
|
274
|
+
"class MySelf < CallsSelf; def do_it_impl(num); num * 10; end; end;"
|
275
|
+
"c = MySelf.new;"
|
276
|
+
"Testing::do_it_on_pointer(c, 5)"
|
277
|
+
);
|
278
|
+
|
279
|
+
ASSERT_EQUAL(50, from_ruby<int>(result.value()));
|
280
|
+
}
|
281
|
+
/*
|
282
|
+
TESTCASE(director_allows_abstract_types_used_as_parameters_reference)
|
283
|
+
{
|
284
|
+
Module m = define_module("Testing");
|
285
|
+
m.define_module_function("do_it_on_ref", &doItOnReference);
|
286
|
+
|
287
|
+
define_class<CallsSelf>("CallsSelf")
|
288
|
+
.define_director<CallsSelfDirector>()
|
289
|
+
.define_constructor(Constructor<CallsSelfDirector, Rice::Object>())
|
290
|
+
.define_method("do_it_impl", &CallsSelfDirector::default_doItImpl)
|
291
|
+
.define_method("do_it", &CallsSelf::doIt);
|
292
|
+
|
293
|
+
Object result = m.instance_eval(
|
294
|
+
"class MySelf < CallsSelf; def do_it_impl(num); num * 10; end; end;"
|
295
|
+
"c = MySelf.new;"
|
296
|
+
"Testing::do_it_on_ref(c, 3)"
|
297
|
+
);
|
298
|
+
|
299
|
+
ASSERT_EQUAL(30, from_ruby<int>(result.value()));
|
300
|
+
}
|
301
|
+
*/
|
data/test/test_Module.cpp
CHANGED
@@ -179,12 +179,12 @@ Foo * from_ruby<Foo *>(Object x)
|
|
179
179
|
TESTCASE(define_singleton_method_int_foo)
|
180
180
|
{
|
181
181
|
Module m(anonymous_module());
|
182
|
-
m.define_singleton_method("
|
182
|
+
m.define_singleton_method("int_and_foo", define_method_int_foo_helper);
|
183
183
|
define_method_int_result = 0;
|
184
184
|
Foo * foo = new Foo;
|
185
185
|
foo->x = 1024;
|
186
186
|
VALUE f = Data_Wrap_Struct(rb_cObject, 0, Default_Allocation_Strategy<Foo>::free, foo);
|
187
|
-
m.call("
|
187
|
+
m.call("int_and_foo", 42, Object(f));
|
188
188
|
ASSERT_EQUAL(42, define_method_int_foo_result_i);
|
189
189
|
ASSERT_EQUAL(foo, define_method_int_foo_result_x);
|
190
190
|
}
|
@@ -426,3 +426,28 @@ TESTCASE(define_method_works_with_reference_arguments)
|
|
426
426
|
ASSERT_EQUAL("test", with_defaults_and_references_x);
|
427
427
|
ASSERT(!with_defaults_and_references_doIt);
|
428
428
|
}
|
429
|
+
|
430
|
+
/*
|
431
|
+
namespace {
|
432
|
+
float with_reference_defaults_x;
|
433
|
+
std::string with_reference_defaults_str;
|
434
|
+
|
435
|
+
void with_reference_defaults(float x, std::string const& str = std::string("testing"))
|
436
|
+
{
|
437
|
+
with_reference_defaults_x = x;
|
438
|
+
with_reference_defaults_str = str;
|
439
|
+
}
|
440
|
+
}
|
441
|
+
|
442
|
+
TESTCASE(define_method_works_with_reference_const_default_values)
|
443
|
+
{
|
444
|
+
Module m(anonymous_module());
|
445
|
+
m.define_module_function("bar", &with_reference_defaults,
|
446
|
+
(Arg("x"), Arg("str") = std::string("testing")));
|
447
|
+
|
448
|
+
m.call("bar", 3);
|
449
|
+
|
450
|
+
ASSERT_EQUAL(3, with_reference_defaults_x);
|
451
|
+
ASSERT_EQUAL("testing", with_reference_defaults_str);
|
452
|
+
}
|
453
|
+
*/
|
data/test/test_To_From_Ruby.cpp
CHANGED
@@ -188,9 +188,9 @@ TESTCASE(float_from_ruby)
|
|
188
188
|
std::numeric_limits<float>::max(),
|
189
189
|
from_ruby<float>(rb_float_new(std::numeric_limits<float>::max())));
|
190
190
|
ASSERT(
|
191
|
-
isnan(from_ruby<float>(rb_float_new(std::numeric_limits<float>::quiet_NaN()))));
|
191
|
+
std::isnan(from_ruby<float>(rb_float_new(std::numeric_limits<float>::quiet_NaN()))));
|
192
192
|
ASSERT(
|
193
|
-
isnan(from_ruby<float>(rb_float_new(std::numeric_limits<float>::signaling_NaN()))));
|
193
|
+
std::isnan(from_ruby<float>(rb_float_new(std::numeric_limits<float>::signaling_NaN()))));
|
194
194
|
ASSERT_EQUAL(
|
195
195
|
std::numeric_limits<float>::epsilon(),
|
196
196
|
from_ruby<float>(rb_float_new(std::numeric_limits<float>::epsilon())));
|
@@ -229,9 +229,9 @@ TESTCASE(double_from_ruby)
|
|
229
229
|
std::numeric_limits<double>::max(),
|
230
230
|
from_ruby<double>(rb_float_new(std::numeric_limits<double>::max())));
|
231
231
|
ASSERT(
|
232
|
-
isnan(from_ruby<double>(rb_float_new(std::numeric_limits<double>::quiet_NaN()))));
|
232
|
+
std::isnan(from_ruby<double>(rb_float_new(std::numeric_limits<double>::quiet_NaN()))));
|
233
233
|
ASSERT(
|
234
|
-
isnan(from_ruby<double>(rb_float_new(std::numeric_limits<double>::signaling_NaN()))));
|
234
|
+
std::isnan(from_ruby<double>(rb_float_new(std::numeric_limits<double>::signaling_NaN()))));
|
235
235
|
ASSERT_EQUAL(
|
236
236
|
std::numeric_limits<double>::epsilon(),
|
237
237
|
from_ruby<double>(rb_float_new(std::numeric_limits<double>::epsilon())));
|
data/test/test_rice.rb
CHANGED
@@ -16,10 +16,18 @@ class RiceTest < Test::Unit::TestCase
|
|
16
16
|
run_external_test("./vm_unittest#{EXEEXT}")
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def test_multiple_extensions
|
20
20
|
run_external_test("#{RUBY} test_multiple_extensions.rb")
|
21
21
|
end
|
22
22
|
|
23
|
+
def test_multiple_extensions_with_inheritance
|
24
|
+
run_external_test("#{RUBY} test_multiple_extensions_with_inheritance.rb")
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_multiple_extensions_same_class
|
28
|
+
run_external_test("#{RUBY} test_multiple_extensions_same_class.rb")
|
29
|
+
end
|
30
|
+
|
23
31
|
def run_external_test(executable)
|
24
32
|
if VERBOSE then
|
25
33
|
system(executable)
|