rice 2.1.2 → 4.0.1
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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +121 -0
- data/CONTRIBUTORS.md +19 -0
- data/COPYING +2 -2
- data/Gemfile +3 -0
- data/README.md +45 -1028
- data/Rakefile +95 -12
- data/include/rice/rice.hpp +7766 -0
- data/lib/mkmf-rice.rb +127 -0
- data/lib/version.rb +3 -0
- data/rice/Address_Registration_Guard.ipp +75 -32
- data/rice/Address_Registration_Guard_defn.hpp +60 -56
- data/rice/Arg.hpp +80 -4
- data/rice/Arg.ipp +51 -0
- data/rice/Constructor.hpp +30 -376
- data/rice/Data_Object.ipp +234 -107
- data/rice/Data_Object_defn.hpp +77 -117
- data/rice/Data_Type.hpp +1 -2
- data/rice/Data_Type.ipp +251 -295
- data/rice/Data_Type_defn.hpp +175 -243
- data/rice/Director.hpp +14 -9
- data/rice/Enum.hpp +54 -104
- data/rice/Enum.ipp +104 -230
- data/rice/Exception.hpp +2 -8
- data/rice/Exception.ipp +65 -0
- data/rice/Exception_defn.hpp +46 -47
- data/rice/Identifier.hpp +28 -28
- data/rice/Identifier.ipp +23 -27
- data/rice/Return.hpp +39 -0
- data/rice/Return.ipp +33 -0
- data/rice/detail/Exception_Handler.ipp +22 -62
- data/rice/detail/Exception_Handler_defn.hpp +76 -91
- data/rice/detail/Iterator.hpp +18 -88
- data/rice/detail/Iterator.ipp +47 -0
- data/rice/detail/Jump_Tag.hpp +21 -0
- data/rice/detail/MethodInfo.hpp +44 -0
- data/rice/detail/MethodInfo.ipp +78 -0
- data/rice/detail/NativeAttribute.hpp +53 -0
- data/rice/detail/NativeAttribute.ipp +83 -0
- data/rice/detail/NativeFunction.hpp +69 -0
- data/rice/detail/NativeFunction.ipp +248 -0
- data/rice/detail/RubyFunction.hpp +39 -0
- data/rice/detail/RubyFunction.ipp +92 -0
- data/rice/detail/Type.hpp +29 -0
- data/rice/detail/Type.ipp +138 -0
- data/rice/detail/TypeRegistry.hpp +50 -0
- data/rice/detail/TypeRegistry.ipp +106 -0
- data/rice/detail/Wrapper.hpp +51 -0
- data/rice/detail/Wrapper.ipp +151 -0
- data/rice/detail/default_allocation_func.hpp +8 -19
- data/rice/detail/default_allocation_func.ipp +9 -8
- data/rice/detail/from_ruby.hpp +2 -37
- data/rice/detail/from_ruby.ipp +1020 -46
- data/rice/detail/from_ruby_defn.hpp +38 -0
- data/rice/detail/function_traits.hpp +124 -0
- data/rice/detail/method_data.hpp +23 -15
- data/rice/detail/method_data.ipp +53 -0
- data/rice/detail/rice_traits.hpp +116 -0
- data/rice/detail/ruby.hpp +9 -49
- data/rice/detail/to_ruby.hpp +3 -17
- data/rice/detail/to_ruby.ipp +409 -31
- data/rice/detail/to_ruby_defn.hpp +48 -0
- data/rice/forward_declares.ipp +82 -0
- data/rice/global_function.hpp +16 -20
- data/rice/global_function.ipp +8 -17
- data/rice/rice.hpp +59 -0
- data/rice/ruby_mark.hpp +5 -3
- data/rice/ruby_try_catch.hpp +4 -4
- data/rice/stl.hpp +11 -0
- data/sample/callbacks/extconf.rb +6 -0
- data/sample/callbacks/sample_callbacks.cpp +35 -0
- data/sample/callbacks/test.rb +28 -0
- data/sample/enum/extconf.rb +3 -0
- data/sample/enum/sample_enum.cpp +3 -17
- data/sample/enum/test.rb +2 -2
- data/sample/inheritance/animals.cpp +8 -24
- data/sample/inheritance/extconf.rb +3 -0
- data/sample/inheritance/test.rb +1 -1
- data/sample/map/extconf.rb +3 -0
- data/sample/map/map.cpp +10 -18
- data/sample/map/test.rb +1 -1
- data/test/embed_ruby.cpp +34 -0
- data/test/embed_ruby.hpp +4 -0
- data/test/ext/t1/extconf.rb +3 -0
- data/test/ext/t1/t1.cpp +1 -3
- data/test/ext/t2/extconf.rb +3 -0
- data/test/ext/t2/t2.cpp +1 -1
- data/test/extconf.rb +23 -0
- data/test/ruby/test_callbacks_sample.rb +28 -0
- data/test/ruby/test_multiple_extensions.rb +18 -0
- data/test/ruby/test_multiple_extensions_same_class.rb +14 -0
- data/test/ruby/test_multiple_extensions_with_inheritance.rb +20 -0
- data/test/test_Address_Registration_Guard.cpp +25 -11
- data/test/test_Array.cpp +131 -74
- data/test/test_Attribute.cpp +147 -0
- data/test/test_Builtin_Object.cpp +36 -15
- data/test/test_Class.cpp +151 -276
- data/test/test_Constructor.cpp +10 -9
- data/test/test_Data_Object.cpp +135 -193
- data/test/test_Data_Type.cpp +323 -252
- data/test/test_Director.cpp +56 -42
- data/test/test_Enum.cpp +230 -104
- data/test/test_Exception.cpp +7 -7
- data/test/test_Hash.cpp +33 -31
- data/test/test_Identifier.cpp +6 -6
- data/test/test_Inheritance.cpp +221 -0
- data/test/test_Iterator.cpp +161 -0
- data/test/test_Jump_Tag.cpp +1 -1
- data/test/test_Keep_Alive.cpp +161 -0
- data/test/test_Memory_Management.cpp +4 -5
- data/test/test_Module.cpp +169 -111
- data/test/test_Object.cpp +51 -19
- data/test/test_Ownership.cpp +275 -0
- data/test/test_Self.cpp +205 -0
- data/test/test_Stl_Optional.cpp +90 -0
- data/test/test_Stl_Pair.cpp +144 -0
- data/test/test_Stl_SmartPointer.cpp +200 -0
- data/test/test_Stl_String.cpp +74 -0
- data/test/test_Stl_Vector.cpp +652 -0
- data/test/test_String.cpp +3 -3
- data/test/test_Struct.cpp +31 -40
- data/test/test_Symbol.cpp +3 -3
- data/test/test_To_From_Ruby.cpp +283 -218
- data/test/test_global_functions.cpp +41 -20
- data/test/unittest.cpp +34 -8
- data/test/unittest.hpp +0 -4
- metadata +120 -136
- data/Doxyfile +0 -2268
- data/Makefile.am +0 -26
- data/Makefile.in +0 -920
- data/README.mingw +0 -8
- data/aclocal.m4 +0 -1088
- data/bootstrap +0 -8
- data/check_stdcxx_11.ac +0 -142
- data/config.guess +0 -1421
- data/config.sub +0 -1807
- data/configure +0 -7481
- data/configure.ac +0 -55
- data/depcomp +0 -791
- data/doxygen.ac +0 -314
- data/doxygen.am +0 -186
- data/extconf.rb +0 -69
- data/install-sh +0 -501
- data/missing +0 -215
- data/post-autoconf.rb +0 -22
- data/post-automake.rb +0 -28
- data/rice/Address_Registration_Guard.cpp +0 -22
- data/rice/Arg_impl.hpp +0 -129
- data/rice/Arg_operators.cpp +0 -21
- data/rice/Arg_operators.hpp +0 -19
- data/rice/Array.hpp +0 -214
- data/rice/Array.ipp +0 -256
- data/rice/Builtin_Object.hpp +0 -8
- data/rice/Builtin_Object.ipp +0 -50
- data/rice/Builtin_Object_defn.hpp +0 -50
- data/rice/Class.cpp +0 -57
- data/rice/Class.hpp +0 -8
- data/rice/Class.ipp +0 -6
- data/rice/Class_defn.hpp +0 -83
- data/rice/Data_Type.cpp +0 -54
- data/rice/Data_Type_fwd.hpp +0 -12
- data/rice/Director.cpp +0 -13
- data/rice/Exception.cpp +0 -59
- data/rice/Exception_Base.hpp +0 -8
- data/rice/Exception_Base.ipp +0 -13
- data/rice/Exception_Base_defn.hpp +0 -27
- data/rice/Hash.hpp +0 -227
- data/rice/Hash.ipp +0 -329
- data/rice/Identifier.cpp +0 -8
- data/rice/Jump_Tag.hpp +0 -24
- data/rice/Makefile.am +0 -124
- data/rice/Makefile.in +0 -839
- data/rice/Module.cpp +0 -84
- data/rice/Module.hpp +0 -8
- data/rice/Module.ipp +0 -6
- data/rice/Module_defn.hpp +0 -88
- data/rice/Module_impl.hpp +0 -281
- data/rice/Module_impl.ipp +0 -345
- data/rice/Object.cpp +0 -169
- data/rice/Object.hpp +0 -8
- data/rice/Object.ipp +0 -19
- data/rice/Object_defn.hpp +0 -191
- data/rice/Require_Guard.hpp +0 -21
- data/rice/String.cpp +0 -94
- data/rice/String.hpp +0 -91
- data/rice/Struct.cpp +0 -117
- data/rice/Struct.hpp +0 -162
- data/rice/Struct.ipp +0 -26
- data/rice/Symbol.cpp +0 -25
- data/rice/Symbol.hpp +0 -66
- data/rice/Symbol.ipp +0 -44
- data/rice/config.hpp +0 -47
- data/rice/config.hpp.in +0 -46
- data/rice/detail/Arguments.hpp +0 -118
- data/rice/detail/Auto_Function_Wrapper.hpp +0 -898
- data/rice/detail/Auto_Function_Wrapper.ipp +0 -3694
- data/rice/detail/Auto_Member_Function_Wrapper.hpp +0 -897
- data/rice/detail/Auto_Member_Function_Wrapper.ipp +0 -2774
- data/rice/detail/Caster.hpp +0 -103
- data/rice/detail/Not_Copyable.hpp +0 -25
- data/rice/detail/Wrapped_Function.hpp +0 -33
- data/rice/detail/cfp.hpp +0 -24
- data/rice/detail/cfp.ipp +0 -51
- data/rice/detail/check_ruby_type.cpp +0 -27
- data/rice/detail/check_ruby_type.hpp +0 -23
- data/rice/detail/creation_funcs.hpp +0 -37
- data/rice/detail/creation_funcs.ipp +0 -36
- data/rice/detail/define_method_and_auto_wrap.hpp +0 -31
- data/rice/detail/define_method_and_auto_wrap.ipp +0 -30
- data/rice/detail/demangle.cpp +0 -56
- data/rice/detail/demangle.hpp +0 -19
- data/rice/detail/env.hpp +0 -11
- data/rice/detail/method_data.cpp +0 -86
- data/rice/detail/node.hpp +0 -13
- data/rice/detail/object_call.hpp +0 -69
- data/rice/detail/object_call.ipp +0 -131
- data/rice/detail/protect.cpp +0 -29
- data/rice/detail/protect.hpp +0 -34
- data/rice/detail/ruby_version_code.hpp +0 -6
- data/rice/detail/ruby_version_code.hpp.in +0 -6
- data/rice/detail/st.hpp +0 -22
- data/rice/detail/traits.hpp +0 -43
- data/rice/detail/win32.hpp +0 -16
- data/rice/detail/wrap_function.hpp +0 -341
- data/rice/detail/wrap_function.ipp +0 -514
- data/rice/protect.hpp +0 -92
- data/rice/protect.ipp +0 -1134
- data/rice/rubypp.rb +0 -97
- data/rice/to_from_ruby.hpp +0 -8
- data/rice/to_from_ruby.ipp +0 -294
- data/rice/to_from_ruby_defn.hpp +0 -70
- data/ruby.ac +0 -135
- data/ruby/Makefile.am +0 -1
- data/ruby/Makefile.in +0 -625
- data/ruby/lib/Makefile.am +0 -3
- data/ruby/lib/Makefile.in +0 -503
- data/ruby/lib/mkmf-rice.rb.in +0 -217
- data/ruby/lib/version.rb +0 -3
- data/sample/Makefile.am +0 -47
- data/sample/Makefile.in +0 -486
- data/test/Makefile.am +0 -72
- data/test/Makefile.in +0 -1150
- data/test/ext/Makefile.am +0 -41
- data/test/ext/Makefile.in +0 -480
- data/test/test_rice.rb +0 -41
data/sample/enum/test.rb
CHANGED
@@ -1,43 +1,31 @@
|
|
1
|
-
#include
|
2
|
-
#include "rice/Constructor.hpp"
|
1
|
+
#include <rice/rice.hpp>
|
3
2
|
|
4
3
|
using namespace Rice;
|
5
4
|
|
6
5
|
class Organism
|
7
6
|
{
|
8
7
|
public:
|
9
|
-
virtual ~Organism() =
|
8
|
+
virtual ~Organism() = default;
|
10
9
|
virtual char const * name() = 0;
|
11
10
|
};
|
12
11
|
|
13
|
-
Organism::
|
14
|
-
~Organism()
|
15
|
-
{
|
16
|
-
}
|
17
|
-
|
18
12
|
class Animal
|
19
13
|
: public Organism
|
20
14
|
{
|
21
15
|
public:
|
22
|
-
virtual ~Animal() = 0;
|
23
16
|
virtual char const * speak() = 0;
|
24
17
|
};
|
25
18
|
|
26
|
-
Animal::
|
27
|
-
~Animal()
|
28
|
-
{
|
29
|
-
}
|
30
|
-
|
31
19
|
class Bear
|
32
20
|
: public Animal
|
33
21
|
{
|
34
22
|
public:
|
35
|
-
|
23
|
+
char const * name() override
|
36
24
|
{
|
37
25
|
return "Bear";
|
38
26
|
}
|
39
27
|
|
40
|
-
|
28
|
+
char const * speak() override
|
41
29
|
{
|
42
30
|
return "I'm smarter than the average bear";
|
43
31
|
}
|
@@ -47,12 +35,12 @@ class Dog
|
|
47
35
|
: public Animal
|
48
36
|
{
|
49
37
|
public:
|
50
|
-
|
38
|
+
char const * name() override
|
51
39
|
{
|
52
40
|
return "Dog";
|
53
41
|
}
|
54
42
|
|
55
|
-
|
43
|
+
char const * speak() override
|
56
44
|
{
|
57
45
|
return "Woof woof";
|
58
46
|
}
|
@@ -62,12 +50,12 @@ class Rabbit
|
|
62
50
|
: public Animal
|
63
51
|
{
|
64
52
|
public:
|
65
|
-
|
53
|
+
char const * name() override
|
66
54
|
{
|
67
55
|
return "Rabbit";
|
68
56
|
}
|
69
57
|
|
70
|
-
|
58
|
+
char const * speak() override
|
71
59
|
{
|
72
60
|
return "What's up, doc?";
|
73
61
|
}
|
@@ -76,8 +64,6 @@ public:
|
|
76
64
|
extern "C"
|
77
65
|
void Init_animals(void)
|
78
66
|
{
|
79
|
-
RUBY_TRY
|
80
|
-
{
|
81
67
|
define_class<Organism>("Organism")
|
82
68
|
.define_method("name", &Organism::name);
|
83
69
|
|
@@ -92,7 +78,5 @@ void Init_animals(void)
|
|
92
78
|
|
93
79
|
define_class<Rabbit, Animal>("Rabbit")
|
94
80
|
.define_constructor(Constructor<Rabbit>());
|
95
|
-
}
|
96
|
-
RUBY_CATCH
|
97
81
|
}
|
98
82
|
|
data/sample/inheritance/test.rb
CHANGED
data/sample/map/extconf.rb
CHANGED
data/sample/map/map.cpp
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
#include
|
2
|
-
#include "rice/Constructor.hpp"
|
1
|
+
#include <rice/rice.hpp>
|
3
2
|
|
4
3
|
#include <map>
|
5
4
|
|
@@ -45,37 +44,30 @@ private:
|
|
45
44
|
Value_Map map_;
|
46
45
|
};
|
47
46
|
|
48
|
-
Data_Type<Map> rb_cMap;
|
49
|
-
|
50
47
|
} // namespace
|
51
48
|
|
52
49
|
template<>
|
53
|
-
|
50
|
+
struct detail::To_Ruby<Map::value_type>
|
54
51
|
{
|
55
|
-
|
56
|
-
|
52
|
+
static VALUE convert(Map::value_type const & pair)
|
53
|
+
{
|
54
|
+
return detail::protect(rb_assoc_new, pair.first.value(), pair.second.value());
|
55
|
+
}
|
56
|
+
};
|
57
57
|
|
58
58
|
#include <iostream>
|
59
59
|
extern "C"
|
60
60
|
void Init_map(void)
|
61
61
|
{
|
62
|
-
RUBY_TRY
|
63
|
-
{
|
64
|
-
Map::iterator (Map::*begin)() = &Map::begin;
|
65
|
-
Map::iterator (Map::*end)() = &Map::end;
|
66
62
|
Rice::Module rb_mStd = define_module("Std");
|
67
63
|
|
68
64
|
// TODO: no delete method on the map, because I'm not sure how to
|
69
65
|
// make delete work properly while iterating
|
70
|
-
rb_cMap =
|
66
|
+
Data_Type<Map> rb_cMap =
|
71
67
|
define_class_under<Map>(rb_mStd, "Map")
|
72
68
|
.define_constructor(Constructor<Map>())
|
73
69
|
.define_method("[]", &Map::bracket)
|
74
70
|
.define_method("[]=", &Map::bracket_equals)
|
75
|
-
.define_iterator(begin, end)
|
76
|
-
.include_module(rb_mEnumerable)
|
77
|
-
;
|
78
|
-
}
|
79
|
-
RUBY_CATCH
|
71
|
+
.define_iterator(&Map::begin, &Map::end)
|
72
|
+
.include_module(rb_mEnumerable);
|
80
73
|
}
|
81
|
-
|
data/sample/map/test.rb
CHANGED
data/test/embed_ruby.cpp
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
#include <rice/rice.hpp>
|
2
|
+
#include <ruby/version.h>
|
3
|
+
|
4
|
+
void embed_ruby()
|
5
|
+
{
|
6
|
+
static bool initialized__ = false;
|
7
|
+
|
8
|
+
if (!initialized__)
|
9
|
+
{
|
10
|
+
int argc = 0;
|
11
|
+
char* argv = nullptr;
|
12
|
+
char** pArgv = &argv;
|
13
|
+
|
14
|
+
ruby_sysinit(&argc, &pArgv);
|
15
|
+
ruby_init();
|
16
|
+
ruby_init_loadpath();
|
17
|
+
|
18
|
+
initialized__ = true;
|
19
|
+
|
20
|
+
// Because Ruby 3 no longer initializes the GC module when embedding, calling GC.stress
|
21
|
+
// results in a crash.
|
22
|
+
// See https://bugs.ruby-lang.org/issues/17643
|
23
|
+
if (RUBY_API_VERSION_MAJOR == 3 &&
|
24
|
+
RUBY_API_VERSION_MINOR == 0 &&
|
25
|
+
RUBY_API_VERSION_TEENY == 0)
|
26
|
+
{
|
27
|
+
// do nothing
|
28
|
+
}
|
29
|
+
else
|
30
|
+
{
|
31
|
+
rb_eval_string("GC.stress = true");
|
32
|
+
}
|
33
|
+
}
|
34
|
+
}
|
data/test/embed_ruby.hpp
ADDED
data/test/ext/t1/extconf.rb
CHANGED
data/test/ext/t1/t1.cpp
CHANGED
data/test/ext/t2/extconf.rb
CHANGED
data/test/ext/t2/t2.cpp
CHANGED
data/test/extconf.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'rice'
|
3
|
+
require 'mkmf-rice'
|
4
|
+
require 'rbconfig'
|
5
|
+
|
6
|
+
# Totally hack mkmf to make a unittest executable instead of a shared library
|
7
|
+
target_exe = "unittest#{RbConfig::CONFIG['EXEEXT']}"
|
8
|
+
$cleanfiles << target_exe
|
9
|
+
|
10
|
+
create_makefile(target_exe) do |conf|
|
11
|
+
conf << "\n"
|
12
|
+
conf << "#{target_exe}: $(OBJS)"
|
13
|
+
conf << "\t$(ECHO) linking executable unittest"
|
14
|
+
conf << "\t-$(Q)$(RM) $(@)"
|
15
|
+
|
16
|
+
if IS_MSWIN
|
17
|
+
conf << "\t$(Q) $(CXX) -Fe$(@) $(OBJS) $(LIBS) $(LOCAL_LIBS) -link $(ldflags) $(LIBPATH)"
|
18
|
+
else
|
19
|
+
conf << "\t$(Q) $(CXX) -o $@ $(OBJS) $(LIBPATH) $(LOCAL_LIBS) $(LIBS)"
|
20
|
+
end
|
21
|
+
|
22
|
+
conf << "\n"
|
23
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
$: << File.join(File.dirname(__FILE__), '..', 'sample')
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
gem 'minitest'
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require_relative '../../sample/callbacks/sample_callbacks'
|
7
|
+
|
8
|
+
class CallbacksTest < Minitest::Test
|
9
|
+
def test_callbacks_sample_lambda
|
10
|
+
cb = CallbackHolder.new
|
11
|
+
cb.register_callback(lambda do |param|
|
12
|
+
"Callback got: #{param}"
|
13
|
+
end)
|
14
|
+
|
15
|
+
assert_equal "Callback got: Hello", cb.fire_callback("Hello")
|
16
|
+
end
|
17
|
+
|
18
|
+
def hello_world(param)
|
19
|
+
"Method got: #{param}"
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_callbacks_sample_method
|
23
|
+
cb = CallbackHolder.new
|
24
|
+
cb.register_callback method(:hello_world)
|
25
|
+
|
26
|
+
assert_equal "Method got: Hello", cb.fire_callback("Hello")
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
$: << File.join(__dir__, '..', '..', 'sample')
|
2
|
+
|
3
|
+
require 'minitest'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
|
6
|
+
class MultipleExtensionTest < Minitest::Test
|
7
|
+
def test_multiple_extensions
|
8
|
+
# Rinse
|
9
|
+
require 'map/map'
|
10
|
+
m = Std::Map.new
|
11
|
+
m[0] = 1
|
12
|
+
|
13
|
+
# And repeat
|
14
|
+
require 'enum/sample_enum'
|
15
|
+
m = Std::Map.new
|
16
|
+
m[0] = 1
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
$: << File.join(__dir__, '..', 'ext')
|
2
|
+
|
3
|
+
require 'minitest'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
|
6
|
+
class MultipleExtensionsSameClassTest < Minitest::Test
|
7
|
+
def test_multiple_extensions_same_class
|
8
|
+
require 't1/t1'
|
9
|
+
require 't2/t2'
|
10
|
+
|
11
|
+
foo = Foo.new
|
12
|
+
assert_equal 42, foo.foo
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$: << File.join(__dir__, '..', '..', 'sample')
|
2
|
+
# Load a library that uses inheritance
|
3
|
+
require 'inheritance/animals'
|
4
|
+
|
5
|
+
# Then load a different library
|
6
|
+
require 'enum/sample_enum'
|
7
|
+
|
8
|
+
require 'minitest'
|
9
|
+
require 'minitest/autorun'
|
10
|
+
|
11
|
+
class MultipleExtensionTest < Minitest::Test
|
12
|
+
def test_multiple_extensions_with_inheritance
|
13
|
+
|
14
|
+
# And make sure we can call methods in the base class on a derived
|
15
|
+
# instance
|
16
|
+
dog = Dog.new
|
17
|
+
assert_equal dog.name, "Dog"
|
18
|
+
assert_equal dog.speak, "Woof woof"
|
19
|
+
end
|
20
|
+
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#include "unittest.hpp"
|
2
|
-
#include "
|
2
|
+
#include "embed_ruby.hpp"
|
3
|
+
#include <rice/rice.hpp>
|
3
4
|
|
4
5
|
using namespace Rice;
|
5
6
|
|
@@ -7,7 +8,7 @@ TESTSUITE(Address_Registration_Guard);
|
|
7
8
|
|
8
9
|
SETUP(Address_Registration_Guard)
|
9
10
|
{
|
10
|
-
|
11
|
+
embed_ruby();
|
11
12
|
}
|
12
13
|
|
13
14
|
TESTCASE(register_address)
|
@@ -29,15 +30,28 @@ TESTCASE(get_address)
|
|
29
30
|
ASSERT_EQUAL(&v, g.address());
|
30
31
|
}
|
31
32
|
|
32
|
-
TESTCASE(
|
33
|
+
TESTCASE(move_construct)
|
33
34
|
{
|
34
|
-
VALUE
|
35
|
-
|
36
|
-
Address_Registration_Guard
|
37
|
-
Address_Registration_Guard
|
38
|
-
|
39
|
-
|
40
|
-
ASSERT_EQUAL(&
|
41
|
-
|
35
|
+
VALUE value = detail::to_ruby("Value 1");
|
36
|
+
|
37
|
+
Address_Registration_Guard guard1(&value);
|
38
|
+
Address_Registration_Guard guard2(std::move(guard1));
|
39
|
+
|
40
|
+
ASSERT((guard1.address() == nullptr));
|
41
|
+
ASSERT_EQUAL(&value, guard2.address());
|
42
|
+
}
|
43
|
+
|
44
|
+
TESTCASE(move_assign)
|
45
|
+
{
|
46
|
+
VALUE value1 = detail::to_ruby("Value 1");
|
47
|
+
VALUE value2 = detail::to_ruby("Value 2");
|
48
|
+
|
49
|
+
Address_Registration_Guard guard1(&value1);
|
50
|
+
Address_Registration_Guard guard2(&value2);
|
51
|
+
|
52
|
+
guard2 = std::move(guard1);
|
53
|
+
|
54
|
+
ASSERT((guard1.address() == nullptr));
|
55
|
+
ASSERT_EQUAL(&value1, guard2.address());
|
42
56
|
}
|
43
57
|
|
data/test/test_Array.cpp
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
#include "unittest.hpp"
|
2
|
-
#include "
|
3
|
-
#include
|
4
|
-
|
2
|
+
#include "embed_ruby.hpp"
|
3
|
+
#include <rice/rice.hpp>
|
4
|
+
|
5
|
+
#include <vector>
|
5
6
|
|
6
7
|
using namespace Rice;
|
7
8
|
|
8
9
|
TESTSUITE(Array);
|
9
10
|
|
11
|
+
// This is needed to make unittest compile (it uses ostream to report errors)
|
12
|
+
inline std::ostream& operator<<(std::ostream& os, const std::vector<int32_t>& vector)
|
13
|
+
{
|
14
|
+
for (auto i : vector)
|
15
|
+
{
|
16
|
+
os << i << ", ";
|
17
|
+
}
|
18
|
+
return os;
|
19
|
+
}
|
20
|
+
|
10
21
|
SETUP(Array)
|
11
22
|
{
|
12
|
-
|
23
|
+
embed_ruby();
|
13
24
|
}
|
14
25
|
|
15
26
|
TESTCASE(default_construct)
|
@@ -27,9 +38,9 @@ TESTCASE(construct_from_vector_of_int)
|
|
27
38
|
v.push_back(42);
|
28
39
|
Array a(v.begin(), v.end());
|
29
40
|
ASSERT_EQUAL(3u, a.size());
|
30
|
-
|
31
|
-
|
32
|
-
|
41
|
+
ASSERT(rb_equal(detail::to_ruby(10), a[0].value()));
|
42
|
+
ASSERT(rb_equal(detail::to_ruby(6), a[1].value()));
|
43
|
+
ASSERT(rb_equal(detail::to_ruby(42), a[2].value()));
|
33
44
|
}
|
34
45
|
|
35
46
|
TESTCASE(construct_from_c_array)
|
@@ -37,12 +48,11 @@ TESTCASE(construct_from_c_array)
|
|
37
48
|
int arr[] = { 10, 6, 42 };
|
38
49
|
Array a(arr);
|
39
50
|
ASSERT_EQUAL(3u, a.size());
|
40
|
-
|
41
|
-
|
42
|
-
|
51
|
+
ASSERT(rb_equal(detail::to_ruby(10), a[0].value()));
|
52
|
+
ASSERT(rb_equal(detail::to_ruby(6), a[1].value()));
|
53
|
+
ASSERT(rb_equal(detail::to_ruby(42), a[2].value()));
|
43
54
|
}
|
44
55
|
|
45
|
-
|
46
56
|
TESTCASE(push_no_items)
|
47
57
|
{
|
48
58
|
Array a;
|
@@ -60,23 +70,23 @@ TESTCASE(push_one_item)
|
|
60
70
|
TESTCASE(push_two_items)
|
61
71
|
{
|
62
72
|
Array a;
|
63
|
-
a.push(
|
64
|
-
a.push(
|
73
|
+
a.push(42);
|
74
|
+
a.push(43);
|
65
75
|
ASSERT_EQUAL(2u, a.size());
|
66
|
-
ASSERT_EQUAL(42,
|
67
|
-
ASSERT_EQUAL(43,
|
76
|
+
ASSERT_EQUAL(42, detail::From_Ruby<int>().convert(a[0].value()));
|
77
|
+
ASSERT_EQUAL(43, detail::From_Ruby<int>().convert(a[1].value()));
|
68
78
|
}
|
69
79
|
|
70
80
|
TESTCASE(push_three_items)
|
71
81
|
{
|
72
82
|
Array a;
|
73
|
-
a.push(
|
74
|
-
a.push(
|
75
|
-
a.push(
|
83
|
+
a.push(42);
|
84
|
+
a.push(43);
|
85
|
+
a.push(44);
|
76
86
|
ASSERT_EQUAL(3u, a.size());
|
77
|
-
ASSERT_EQUAL(42,
|
78
|
-
ASSERT_EQUAL(43,
|
79
|
-
ASSERT_EQUAL(44,
|
87
|
+
ASSERT_EQUAL(42, detail::From_Ruby<int>().convert(a[0].value()));
|
88
|
+
ASSERT_EQUAL(43, detail::From_Ruby<int>().convert(a[1].value()));
|
89
|
+
ASSERT_EQUAL(44, detail::From_Ruby<int>().convert(a[2].value()));
|
80
90
|
}
|
81
91
|
|
82
92
|
TESTCASE(push_int)
|
@@ -84,25 +94,25 @@ TESTCASE(push_int)
|
|
84
94
|
Array a;
|
85
95
|
a.push(42);
|
86
96
|
ASSERT_EQUAL(1u, a.size());
|
87
|
-
|
97
|
+
ASSERT(rb_equal(detail::to_ruby(42), a[0].value()));
|
88
98
|
}
|
89
99
|
|
90
100
|
TESTCASE(bracket_equals)
|
91
101
|
{
|
92
102
|
Array a;
|
93
|
-
a.push(
|
94
|
-
a.push(
|
95
|
-
a.push(
|
96
|
-
a[1] =
|
97
|
-
ASSERT_EQUAL(10,
|
103
|
+
a.push(42);
|
104
|
+
a.push(43);
|
105
|
+
a.push(44);
|
106
|
+
a[1] = 10;
|
107
|
+
ASSERT_EQUAL(10, detail::From_Ruby<int>().convert(a[1].value()));
|
98
108
|
}
|
99
109
|
|
100
110
|
TESTCASE(to_s)
|
101
111
|
{
|
102
112
|
Array a;
|
103
|
-
a.push(
|
104
|
-
a.push(
|
105
|
-
a.push(
|
113
|
+
a.push(42);
|
114
|
+
a.push(43);
|
115
|
+
a.push(44);
|
106
116
|
String s1(a.call("to_s"));
|
107
117
|
String s2(a.to_s());
|
108
118
|
ASSERT_EQUAL(s1.str(), s2.str());
|
@@ -111,28 +121,28 @@ TESTCASE(to_s)
|
|
111
121
|
TESTCASE(pop)
|
112
122
|
{
|
113
123
|
Array a;
|
114
|
-
a.push(
|
115
|
-
a.push(
|
116
|
-
a.push(
|
124
|
+
a.push(42);
|
125
|
+
a.push(43);
|
126
|
+
a.push(44);
|
117
127
|
VALUE result = a.pop();
|
118
128
|
ASSERT_EQUAL(2u, a.size());
|
119
|
-
ASSERT_EQUAL(42,
|
120
|
-
ASSERT_EQUAL(43,
|
121
|
-
ASSERT_EQUAL(44,
|
129
|
+
ASSERT_EQUAL(42, detail::From_Ruby<int>().convert(a[0].value()));
|
130
|
+
ASSERT_EQUAL(43, detail::From_Ruby<int>().convert(a[1].value()));
|
131
|
+
ASSERT_EQUAL(44, detail::From_Ruby<int>().convert(result));
|
122
132
|
}
|
123
133
|
|
124
134
|
TESTCASE(unshift)
|
125
135
|
{
|
126
136
|
Array a;
|
127
|
-
a.push(
|
128
|
-
a.push(
|
129
|
-
a.push(
|
130
|
-
a.unshift(
|
137
|
+
a.push(42);
|
138
|
+
a.push(43);
|
139
|
+
a.push(44);
|
140
|
+
a.unshift(10);
|
131
141
|
ASSERT_EQUAL(4u, a.size());
|
132
|
-
ASSERT_EQUAL(10,
|
133
|
-
ASSERT_EQUAL(42,
|
134
|
-
ASSERT_EQUAL(43,
|
135
|
-
ASSERT_EQUAL(44,
|
142
|
+
ASSERT_EQUAL(10, detail::From_Ruby<int>().convert(a[0].value()));
|
143
|
+
ASSERT_EQUAL(42, detail::From_Ruby<int>().convert(a[1].value()));
|
144
|
+
ASSERT_EQUAL(43, detail::From_Ruby<int>().convert(a[2].value()));
|
145
|
+
ASSERT_EQUAL(44, detail::From_Ruby<int>().convert(a[3].value()));
|
136
146
|
}
|
137
147
|
|
138
148
|
TESTCASE(unshift_int)
|
@@ -140,76 +150,80 @@ TESTCASE(unshift_int)
|
|
140
150
|
Array a;
|
141
151
|
a.unshift(42);
|
142
152
|
ASSERT_EQUAL(1u, a.size());
|
143
|
-
|
153
|
+
ASSERT(rb_equal(detail::to_ruby(42), a[0].value()));
|
144
154
|
}
|
145
155
|
|
146
156
|
TESTCASE(shift)
|
147
157
|
{
|
148
158
|
Array a;
|
149
|
-
a.push(
|
150
|
-
a.push(
|
151
|
-
a.push(
|
159
|
+
a.push(42);
|
160
|
+
a.push(43);
|
161
|
+
a.push(44);
|
152
162
|
VALUE result = a.shift();
|
153
163
|
ASSERT_EQUAL(2u, a.size());
|
154
|
-
ASSERT_EQUAL(42,
|
155
|
-
ASSERT_EQUAL(43,
|
156
|
-
ASSERT_EQUAL(44,
|
164
|
+
ASSERT_EQUAL(42, detail::From_Ruby<int>().convert(result));
|
165
|
+
ASSERT_EQUAL(43, detail::From_Ruby<int>().convert(a[0].value()));
|
166
|
+
ASSERT_EQUAL(44, detail::From_Ruby<int>().convert(a[1].value()));
|
157
167
|
}
|
158
168
|
|
159
169
|
TESTCASE(iterate)
|
160
170
|
{
|
161
171
|
Array a;
|
162
|
-
a.push(
|
163
|
-
a.push(
|
164
|
-
a.push(
|
172
|
+
a.push(42);
|
173
|
+
a.push(43);
|
174
|
+
a.push(44);
|
165
175
|
int ca[] = { 42, 43, 44 };
|
166
176
|
Array::iterator it = a.begin();
|
167
177
|
Array::iterator end = a.end();
|
168
178
|
for(int j = 0; it != end; ++j, ++it)
|
169
179
|
{
|
170
|
-
ASSERT_EQUAL(ca[j],
|
180
|
+
ASSERT_EQUAL(ca[j], detail::From_Ruby<int>().convert(it->value()));
|
171
181
|
}
|
172
182
|
}
|
173
183
|
|
174
184
|
TESTCASE(const_iterate)
|
175
185
|
{
|
176
186
|
Array a;
|
177
|
-
a.push(
|
178
|
-
a.push(
|
179
|
-
a.push(
|
187
|
+
a.push(42);
|
188
|
+
a.push(43);
|
189
|
+
a.push(44);
|
180
190
|
int ca[] = { 42, 43, 44 };
|
181
191
|
Array::const_iterator it = a.begin();
|
182
192
|
Array::const_iterator end = a.end();
|
183
193
|
for(int j = 0; it != end; ++j, ++it)
|
184
194
|
{
|
185
|
-
ASSERT_EQUAL(ca[j],
|
195
|
+
ASSERT_EQUAL(ca[j], detail::From_Ruby<int>().convert(*it));
|
186
196
|
}
|
187
197
|
}
|
188
198
|
|
189
199
|
TESTCASE(iterate_and_change)
|
190
200
|
{
|
191
201
|
Array a;
|
192
|
-
a.push(
|
193
|
-
a.push(
|
194
|
-
a.push(
|
202
|
+
a.push(42);
|
203
|
+
a.push(43);
|
204
|
+
a.push(44);
|
195
205
|
Array::iterator it = a.begin();
|
196
206
|
Array::iterator end = a.end();
|
197
207
|
for(int j = 0; it != end; ++j, ++it)
|
198
208
|
{
|
199
|
-
int value =
|
200
|
-
*it =
|
209
|
+
int value = detail::From_Ruby<int>().convert(it->value());
|
210
|
+
*it = value + j;
|
201
211
|
}
|
202
|
-
ASSERT_EQUAL(42,
|
203
|
-
ASSERT_EQUAL(44,
|
204
|
-
ASSERT_EQUAL(46,
|
212
|
+
ASSERT_EQUAL(42, detail::From_Ruby<int>().convert(a[0].value()));
|
213
|
+
ASSERT_EQUAL(44, detail::From_Ruby<int>().convert(a[1].value()));
|
214
|
+
ASSERT_EQUAL(46, detail::From_Ruby<int>().convert(a[2].value()));
|
205
215
|
}
|
206
216
|
|
217
|
+
/**
|
218
|
+
* This test is running into GC issues on CI. Entries in the array
|
219
|
+
* are getting GC'd and the test is segfaulting. Really hard to reproduce
|
220
|
+
* so disable for now.
|
207
221
|
TESTCASE(iterate_and_call_member)
|
208
222
|
{
|
209
223
|
Array a;
|
210
|
-
a.push(
|
211
|
-
a.push(
|
212
|
-
a.push(
|
224
|
+
a.push(42);
|
225
|
+
a.push(43);
|
226
|
+
a.push(44);
|
213
227
|
Array::iterator it = a.begin();
|
214
228
|
Array::iterator end = a.end();
|
215
229
|
std::vector<Object> v;
|
@@ -217,21 +231,38 @@ TESTCASE(iterate_and_call_member)
|
|
217
231
|
{
|
218
232
|
v.push_back(it->to_s());
|
219
233
|
}
|
220
|
-
ASSERT_EQUAL(42,
|
221
|
-
ASSERT_EQUAL(43,
|
222
|
-
ASSERT_EQUAL(44,
|
234
|
+
ASSERT_EQUAL(42, detail::From_Ruby<int>().convert(a[0].value()));
|
235
|
+
ASSERT_EQUAL(43, detail::From_Ruby<int>().convert(a[1].value()));
|
236
|
+
ASSERT_EQUAL(44, detail::From_Ruby<int>().convert(a[2].value()));
|
223
237
|
ASSERT_EQUAL(3u, v.size());
|
224
238
|
ASSERT_EQUAL(Object(a[0]).to_s(), v[0]);
|
225
239
|
ASSERT_EQUAL(Object(a[1]).to_s(), v[1]);
|
226
240
|
ASSERT_EQUAL(Object(a[2]).to_s(), v[2]);
|
227
241
|
}
|
242
|
+
*/
|
243
|
+
|
244
|
+
TESTCASE(find_if)
|
245
|
+
{
|
246
|
+
Array rubyValues;
|
247
|
+
rubyValues.push(42);
|
248
|
+
rubyValues.push(43);
|
249
|
+
rubyValues.push(44);
|
250
|
+
|
251
|
+
auto iter = std::find_if(rubyValues.begin(), rubyValues.end(),
|
252
|
+
[&rubyValues](const Object& object)
|
253
|
+
{
|
254
|
+
return object == rubyValues[1];
|
255
|
+
});
|
256
|
+
|
257
|
+
ASSERT_EQUAL(43, detail::From_Ruby<int>().convert(iter->value()));
|
258
|
+
}
|
228
259
|
|
229
260
|
TESTCASE(assign_int)
|
230
261
|
{
|
231
262
|
Array a;
|
232
263
|
a.push(42);
|
233
264
|
a[0] = 10;
|
234
|
-
ASSERT_EQUAL(10,
|
265
|
+
ASSERT_EQUAL(10, detail::From_Ruby<int>().convert(a[0].value()));
|
235
266
|
}
|
236
267
|
|
237
268
|
/**
|
@@ -246,3 +277,29 @@ namespace {
|
|
246
277
|
TESTCASE(use_array_in_wrapped_function) {
|
247
278
|
define_global_function("test_array_arg", &testArrayArg);
|
248
279
|
}
|
280
|
+
|
281
|
+
TESTCASE(array_to_ruby)
|
282
|
+
{
|
283
|
+
Array a(rb_ary_new());
|
284
|
+
ASSERT(rb_equal(a.value(), detail::to_ruby(a)));
|
285
|
+
}
|
286
|
+
|
287
|
+
TESTCASE(array_ref_to_ruby)
|
288
|
+
{
|
289
|
+
Array a(rb_ary_new());
|
290
|
+
Array& ref = a;
|
291
|
+
ASSERT(rb_equal(a.value(), detail::to_ruby(ref)));
|
292
|
+
}
|
293
|
+
|
294
|
+
TESTCASE(array_ptr_to_ruby)
|
295
|
+
{
|
296
|
+
Array a(rb_ary_new());
|
297
|
+
Array* ptr = &a;
|
298
|
+
ASSERT(rb_equal(a.value(), detail::to_ruby(ptr)));
|
299
|
+
}
|
300
|
+
|
301
|
+
TESTCASE(array_from_ruby)
|
302
|
+
{
|
303
|
+
Array a(rb_ary_new());
|
304
|
+
ASSERT_EQUAL(a, detail::From_Ruby<Array>().convert(a));
|
305
|
+
}
|