rucy 0.1.3 → 0.1.4
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.
- data/.doc/ext/rucy/class.cpp +244 -0
- data/.doc/ext/rucy/exception.cpp +99 -0
- data/.doc/ext/rucy/function.cpp +63 -0
- data/.doc/ext/rucy/struct.cpp +80 -0
- data/.doc/ext/rucy/tester.cpp +41 -184
- data/.doc/ext/rucy/value.cpp +42 -0
- data/.gitignore +22 -0
- data/Rakefile +4 -29
- data/VERSION +1 -1
- data/ext/rucy/class.cpp +262 -0
- data/ext/rucy/class.h +96 -0
- data/ext/rucy/exception.cpp +107 -0
- data/ext/rucy/extconf.rb +9 -8
- data/ext/rucy/function.cpp +68 -0
- data/ext/rucy/struct.cpp +83 -0
- data/ext/rucy/tester.cpp +41 -197
- data/ext/rucy/tester.h +10 -0
- data/ext/rucy/value.cpp +46 -0
- data/include/rucy/defs.h.erb +17 -0
- data/include/rucy/exception.h +2 -0
- data/include/rucy/extension.h +206 -0
- data/include/rucy/rucy.h +25 -2
- data/include/rucy/symbol.h +11 -0
- data/include/rucy/value.h.erb +66 -14
- data/include/rucy.h +1 -1
- data/lib/rucy/module.rb +9 -2
- data/rucy.gemspec +16 -40
- data/src/exception.cpp +17 -25
- data/src/rucy.cpp +2 -2
- data/src/symbol.cpp +24 -0
- data/src/value.cpp.erb +161 -25
- data/task/doc.rake +50 -0
- data/test/helpers.rb +7 -0
- data/test/test_class.rb +161 -0
- data/test/test_exception.rb +39 -0
- data/test/test_function.rb +31 -0
- data/test/test_struct.rb +30 -0
- data/test/test_value.rb +18 -0
- metadata +123 -74
- data/include/rucy/defs.h +0 -101
- data/include/rucy/function.h +0 -245
- data/include/rucy/gc.h +0 -59
- data/include/rucy/module.h +0 -98
- data/include/rucy/value.h +0 -291
- data/src/function.cpp +0 -158
- data/src/gc.cpp +0 -63
- data/src/module.cpp +0 -325
- data/src/value.cpp +0 -511
- data/task/ext.rake +0 -96
- data/test/test_rucy.rb +0 -73
data/src/rucy.cpp
CHANGED
@@ -33,10 +33,10 @@ namespace Rucy
|
|
33
33
|
SYMBOL(klass, "class");
|
34
34
|
SYM(name);
|
35
35
|
String message = stringf(
|
36
|
-
"object is instance of %s,
|
36
|
+
"object is instance of %s, but %s is expected.",
|
37
37
|
obj(klass)(name).c_str(), class_(name).c_str());
|
38
38
|
|
39
|
-
|
39
|
+
type_error(message.c_str());
|
40
40
|
#endif
|
41
41
|
}
|
42
42
|
|
data/src/symbol.cpp
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
|
4
4
|
|
5
5
|
#include <rucy/rucy.h>
|
6
|
+
#include <rucy/value.h>
|
6
7
|
|
7
8
|
|
8
9
|
namespace Rucy
|
@@ -19,6 +20,11 @@ namespace Rucy
|
|
19
20
|
{
|
20
21
|
}
|
21
22
|
|
23
|
+
Symbol::Symbol (const Value& value)
|
24
|
+
: id_(value.as_sym().id())
|
25
|
+
{
|
26
|
+
}
|
27
|
+
|
22
28
|
Symbol::Symbol (const char* str)
|
23
29
|
: id_(rb_intern(str))
|
24
30
|
{
|
@@ -30,6 +36,12 @@ namespace Rucy
|
|
30
36
|
return id_;
|
31
37
|
}
|
32
38
|
|
39
|
+
VALUE
|
40
|
+
Symbol::value () const
|
41
|
+
{
|
42
|
+
return id_ != 0 ? ID2SYM(id_) : Qnil;
|
43
|
+
}
|
44
|
+
|
33
45
|
const char*
|
34
46
|
Symbol::c_str () const
|
35
47
|
{
|
@@ -47,5 +59,17 @@ namespace Rucy
|
|
47
59
|
return !operator bool();
|
48
60
|
}
|
49
61
|
|
62
|
+
bool
|
63
|
+
operator == (const Symbol& lhs, const Symbol& rhs)
|
64
|
+
{
|
65
|
+
return lhs.id_ == rhs.id_;
|
66
|
+
}
|
67
|
+
|
68
|
+
bool
|
69
|
+
operator != (const Symbol& lhs, const Symbol& rhs)
|
70
|
+
{
|
71
|
+
return !operator==(lhs, rhs);
|
72
|
+
}
|
73
|
+
|
50
74
|
|
51
75
|
}// Rucy
|
data/src/value.cpp.erb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
#include "rucy/value.h"
|
3
3
|
|
4
4
|
|
5
|
+
#include <assert.h>
|
5
6
|
#include <rucy/rucy.h>
|
6
7
|
#include <rucy/function.h>
|
7
8
|
#include <rucy/exception.h>
|
@@ -37,12 +38,12 @@ namespace Rucy
|
|
37
38
|
}
|
38
39
|
|
39
40
|
Value::Value (const char* s, bool tainted)
|
40
|
-
: v(tainted ? rb_tainted_str_new2(s) : rb_str_new2(s))
|
41
|
+
: v(!s ? Qnil : tainted ? rb_tainted_str_new2(s) : rb_str_new2(s))
|
41
42
|
{
|
42
43
|
}
|
43
44
|
|
44
45
|
Value::Value (const char* s, size_t len, bool tainted)
|
45
|
-
: v(tainted ? rb_tainted_str_new(s, len) : rb_str_new(s, len))
|
46
|
+
: v(!s ? Qnil : tainted ? rb_tainted_str_new(s, len) : rb_str_new(s, len))
|
46
47
|
{
|
47
48
|
}
|
48
49
|
|
@@ -94,9 +95,9 @@ namespace Rucy
|
|
94
95
|
get_object_size (Value obj, Symbol method)
|
95
96
|
{
|
96
97
|
if (obj.type() == T_STRING)
|
97
|
-
return RSTRING_LEN(obj.value());
|
98
|
+
return (int) RSTRING_LEN(obj.value());
|
98
99
|
else if (obj.type() == T_ARRAY)
|
99
|
-
return RARRAY_LEN(obj.value());
|
100
|
+
return (int) RARRAY_LEN(obj.value());
|
100
101
|
else
|
101
102
|
return obj.call(method);
|
102
103
|
}
|
@@ -147,6 +148,30 @@ namespace Rucy
|
|
147
148
|
return call(to_sym);
|
148
149
|
}
|
149
150
|
|
151
|
+
int
|
152
|
+
Value::as_i (bool convert) const
|
153
|
+
{
|
154
|
+
return to<int>(*this, convert);
|
155
|
+
}
|
156
|
+
|
157
|
+
double
|
158
|
+
Value::as_f (bool convert) const
|
159
|
+
{
|
160
|
+
return to<double>(*this, convert);
|
161
|
+
}
|
162
|
+
|
163
|
+
const char*
|
164
|
+
Value::as_s (bool convert) const
|
165
|
+
{
|
166
|
+
return to<const char*>(*this, convert);
|
167
|
+
}
|
168
|
+
|
169
|
+
Symbol
|
170
|
+
Value::as_sym (bool convert) const
|
171
|
+
{
|
172
|
+
return to<Symbol>(*this, convert);
|
173
|
+
}
|
174
|
+
|
150
175
|
bool
|
151
176
|
Value::is_i () const
|
152
177
|
{
|
@@ -177,28 +202,10 @@ namespace Rucy
|
|
177
202
|
return is_kind_of(rb_cArray);
|
178
203
|
}
|
179
204
|
|
180
|
-
|
181
|
-
Value::
|
182
|
-
{
|
183
|
-
return to<int>(*this, convert);
|
184
|
-
}
|
185
|
-
|
186
|
-
double
|
187
|
-
Value::as_f (bool convert) const
|
188
|
-
{
|
189
|
-
return to<double>(*this, convert);
|
190
|
-
}
|
191
|
-
|
192
|
-
const char*
|
193
|
-
Value::as_s (bool convert) const
|
194
|
-
{
|
195
|
-
return to<const char*>(*this, convert);
|
196
|
-
}
|
197
|
-
|
198
|
-
Symbol
|
199
|
-
Value::as_sym (bool convert) const
|
205
|
+
bool
|
206
|
+
Value::is_nil () const
|
200
207
|
{
|
201
|
-
return
|
208
|
+
return NIL_P(v);
|
202
209
|
}
|
203
210
|
|
204
211
|
% ["call", "operator ()"].each do |op|
|
@@ -302,6 +309,122 @@ namespace Rucy
|
|
302
309
|
}
|
303
310
|
|
304
311
|
|
312
|
+
GlobalValue::GlobalValue ()
|
313
|
+
{
|
314
|
+
init(false);
|
315
|
+
}
|
316
|
+
|
317
|
+
GlobalValue::GlobalValue (bool b, bool gc_)
|
318
|
+
: Super(b)
|
319
|
+
{
|
320
|
+
init(gc_);
|
321
|
+
}
|
322
|
+
|
323
|
+
GlobalValue::GlobalValue (int i, bool gc_)
|
324
|
+
: Super(i)
|
325
|
+
{
|
326
|
+
init(gc_);
|
327
|
+
}
|
328
|
+
|
329
|
+
GlobalValue::GlobalValue (float f, bool gc_)
|
330
|
+
: Super(f)
|
331
|
+
{
|
332
|
+
init(gc_);
|
333
|
+
}
|
334
|
+
|
335
|
+
GlobalValue::GlobalValue (double d, bool gc_)
|
336
|
+
: Super(d)
|
337
|
+
{
|
338
|
+
init(gc_);
|
339
|
+
}
|
340
|
+
|
341
|
+
GlobalValue::GlobalValue (const char* s, bool tainted, bool gc_)
|
342
|
+
: Super(s, tainted)
|
343
|
+
{
|
344
|
+
init(gc_);
|
345
|
+
}
|
346
|
+
|
347
|
+
GlobalValue::GlobalValue (const char* s, size_t len, bool tainted, bool gc_)
|
348
|
+
: Super(s, len, tainted)
|
349
|
+
{
|
350
|
+
init(gc_);
|
351
|
+
}
|
352
|
+
|
353
|
+
GlobalValue::GlobalValue (size_t size, const Value* values, bool gc_)
|
354
|
+
: Super(size, values)
|
355
|
+
{
|
356
|
+
init(gc_);
|
357
|
+
}
|
358
|
+
|
359
|
+
GlobalValue::GlobalValue (VALUE v, bool gc_)
|
360
|
+
: Super(v)
|
361
|
+
{
|
362
|
+
init(gc_);
|
363
|
+
}
|
364
|
+
|
365
|
+
GlobalValue::GlobalValue (const Value& obj, bool gc_)
|
366
|
+
: Super(obj)
|
367
|
+
{
|
368
|
+
init(gc_);
|
369
|
+
}
|
370
|
+
|
371
|
+
GlobalValue::GlobalValue (const GlobalValue& obj, bool gc_)
|
372
|
+
: Super(obj)
|
373
|
+
{
|
374
|
+
init(gc_);
|
375
|
+
}
|
376
|
+
|
377
|
+
GlobalValue&
|
378
|
+
GlobalValue::operator = (const Value& obj)
|
379
|
+
{
|
380
|
+
Super::operator=(obj);
|
381
|
+
update_guard();
|
382
|
+
return *this;
|
383
|
+
}
|
384
|
+
|
385
|
+
GlobalValue::~GlobalValue ()
|
386
|
+
{
|
387
|
+
while (gc_guarded) gc(true);
|
388
|
+
}
|
389
|
+
|
390
|
+
void
|
391
|
+
GlobalValue::gc (bool enable)
|
392
|
+
{
|
393
|
+
gc_disable_count += enable ? -1 : +1;
|
394
|
+
update_guard();
|
395
|
+
}
|
396
|
+
|
397
|
+
void
|
398
|
+
GlobalValue::init (bool gc_)
|
399
|
+
{
|
400
|
+
gc_disable_count = 0;
|
401
|
+
gc_guarded = false;
|
402
|
+
if (!gc_) gc(false);
|
403
|
+
}
|
404
|
+
|
405
|
+
void
|
406
|
+
GlobalValue::update_guard ()
|
407
|
+
{
|
408
|
+
assert(gc_disable_count >= 0);
|
409
|
+
|
410
|
+
if (IMMEDIATE_P(v))
|
411
|
+
{
|
412
|
+
if (gc_guarded) rb_gc_unregister_address(&v);
|
413
|
+
gc_guarded = false;
|
414
|
+
}
|
415
|
+
else if (gc_disable_count > 0)
|
416
|
+
{
|
417
|
+
if (!gc_guarded) rb_gc_register_address(&v);
|
418
|
+
gc_guarded = true;
|
419
|
+
}
|
420
|
+
else
|
421
|
+
{
|
422
|
+
if (gc_guarded) rb_gc_unregister_address(&v);
|
423
|
+
gc_guarded = false;
|
424
|
+
}
|
425
|
+
}
|
426
|
+
|
427
|
+
|
305
428
|
Value
|
306
429
|
value (bool b)
|
307
430
|
{
|
@@ -404,5 +527,18 @@ namespace Rucy
|
|
404
527
|
return ID2SYM(sym.id());
|
405
528
|
}
|
406
529
|
|
530
|
+
Value
|
531
|
+
value (void* ptr)
|
532
|
+
{
|
533
|
+
if (ptr) argument_error("Rucy::value(void*) can take only (void*) NULL.");
|
534
|
+
return Qnil;
|
535
|
+
}
|
536
|
+
|
537
|
+
Value
|
538
|
+
nil ()
|
539
|
+
{
|
540
|
+
return Qnil;
|
541
|
+
}
|
542
|
+
|
407
543
|
|
408
544
|
}// Rucy
|
data/task/doc.rake
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- mode: ruby; coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
task :doc => 'doc:build'
|
5
|
+
|
6
|
+
%w[clean rdoc].each do |t|
|
7
|
+
task t.intern => "doc:#{t}"
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
namespace :doc do
|
12
|
+
|
13
|
+
|
14
|
+
mod = MODULE
|
15
|
+
name = env :NAME, MODULE.name.downcase
|
16
|
+
extdir = env :EXTDIR, 'ext'
|
17
|
+
docdir = env :DOCDIR, 'doc'
|
18
|
+
rdoc = env :RDOC, 'rdoc'# 'yardoc'
|
19
|
+
rucy2rdoc = env :RUCY2RDOC, 'rucy2rdoc'
|
20
|
+
|
21
|
+
srcdir = "#{extdir}/#{name}"
|
22
|
+
rdocdir = ".doc/#{srcdir}"
|
23
|
+
|
24
|
+
srcs = FileList["#{srcdir}/**/*.cpp"]
|
25
|
+
rdocs = Hash[srcs.map{|path| [path, "#{rdocdir}/#{File.basename path}"]}]
|
26
|
+
out = "#{docdir}/index.html"
|
27
|
+
|
28
|
+
|
29
|
+
task :build => out
|
30
|
+
|
31
|
+
task :clean do
|
32
|
+
sh %( rm -rf #{docdir} #{rdocs.values.join ' '} )
|
33
|
+
end
|
34
|
+
|
35
|
+
task :rdoc => rdocs.values
|
36
|
+
|
37
|
+
file out => :rdoc do
|
38
|
+
sh %( #{rdoc} #{rdocs.values.join ' '} )
|
39
|
+
end
|
40
|
+
|
41
|
+
rdocs.each do |(cpp, rdoc)|
|
42
|
+
file rdoc => [cpp, rdocdir] do
|
43
|
+
sh %( #{rucy2rdoc} #{cpp} > #{rdoc} )
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
directory rdocdir
|
48
|
+
|
49
|
+
|
50
|
+
end# :doc
|
data/test/helpers.rb
ADDED
data/test/test_class.rb
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require_relative 'helpers'
|
5
|
+
|
6
|
+
|
7
|
+
class Temp < Rucy::Tester::Sub
|
8
|
+
|
9
|
+
def name ()
|
10
|
+
"Temp::name"
|
11
|
+
end
|
12
|
+
|
13
|
+
def name_overridable ()
|
14
|
+
"Temp::name_overridable"
|
15
|
+
end
|
16
|
+
|
17
|
+
def name_overridable_faster ()
|
18
|
+
"Temp::name_overridable_faster"
|
19
|
+
end
|
20
|
+
|
21
|
+
end# Temp
|
22
|
+
|
23
|
+
|
24
|
+
class TestClass < Test::Unit::TestCase
|
25
|
+
|
26
|
+
include Rucy::Tester
|
27
|
+
|
28
|
+
def base (*args)
|
29
|
+
Base.new *args
|
30
|
+
end
|
31
|
+
|
32
|
+
def sub (*args)
|
33
|
+
Sub.new *args
|
34
|
+
end
|
35
|
+
|
36
|
+
def temp (*args)
|
37
|
+
Temp.new *args
|
38
|
+
end
|
39
|
+
|
40
|
+
def base_raw (*args)
|
41
|
+
Base.new_raw *args
|
42
|
+
end
|
43
|
+
|
44
|
+
def sub_raw (*args)
|
45
|
+
Sub.new_raw *args
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_is_kind_of_base ()
|
49
|
+
assert_kind_of Base, base
|
50
|
+
assert_kind_of Base, base_raw
|
51
|
+
|
52
|
+
assert_kind_of Base, sub
|
53
|
+
assert_kind_of Base, sub_raw
|
54
|
+
assert_kind_of Sub, sub
|
55
|
+
assert_kind_of Sub, sub_raw
|
56
|
+
|
57
|
+
assert_kind_of Base, temp
|
58
|
+
assert_kind_of Sub, temp
|
59
|
+
assert_kind_of Temp, temp
|
60
|
+
|
61
|
+
assert !base .kind_of?(Sub)
|
62
|
+
assert !base_raw .kind_of?(Sub)
|
63
|
+
assert !base .kind_of?(Temp)
|
64
|
+
assert !base_raw .kind_of?(Temp)
|
65
|
+
|
66
|
+
assert !sub .kind_of?(Temp)
|
67
|
+
assert !sub_raw.kind_of?(Temp)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_name ()
|
71
|
+
assert_equal "Base::name", base .name
|
72
|
+
assert_equal "Base::name", base_raw.name
|
73
|
+
assert_equal "Sub::name", sub .name
|
74
|
+
assert_equal "Sub::name", sub_raw .name
|
75
|
+
assert_equal "Temp::name", temp .name
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_name_overridable ()
|
79
|
+
assert_equal "Base::name_overridable", base .name_overridable
|
80
|
+
assert_equal "Base::name_overridable", base_raw.name_overridable
|
81
|
+
assert_equal "Sub::name_overridable", sub .name_overridable
|
82
|
+
assert_equal "Sub::name_overridable", sub_raw .name_overridable
|
83
|
+
assert_equal "Temp::name_overridable", temp .name_overridable
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_call_name ()
|
87
|
+
assert_equal "Base::name", base .call_name
|
88
|
+
assert_equal "Base::name", base_raw.call_name
|
89
|
+
assert_equal "Sub::name", sub .call_name
|
90
|
+
assert_equal "Sub::name", sub_raw .call_name
|
91
|
+
assert_equal "Sub::name", temp .call_name # returns "Sub" not "Temp"!
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_call_name_overridable ()
|
95
|
+
assert_equal "Base::name_overridable", base .call_name_overridable
|
96
|
+
assert_equal "Base::name_overridable", base_raw.call_name_overridable
|
97
|
+
assert_equal "Sub::name_overridable", sub .call_name_overridable
|
98
|
+
assert_equal "Sub::name_overridable", sub_raw .call_name_overridable
|
99
|
+
assert_equal "Temp::name_overridable", temp .call_name_overridable
|
100
|
+
end
|
101
|
+
|
102
|
+
class X < Sub; end
|
103
|
+
|
104
|
+
def test_is_overridden ()
|
105
|
+
m = :name_overridable_faster
|
106
|
+
def is_overridden (o) o.is_name_overridable_faster_overridden; end
|
107
|
+
|
108
|
+
assert_equal true, is_overridden(temp)
|
109
|
+
|
110
|
+
o = X.new
|
111
|
+
assert_equal false, is_overridden(o)
|
112
|
+
def o.name_overridable_faster () end
|
113
|
+
assert_equal true, is_overridden(o)
|
114
|
+
|
115
|
+
o = X.new
|
116
|
+
assert_equal false, is_overridden(o)
|
117
|
+
eval "class X; def #{m}; end; end"
|
118
|
+
assert_equal true, is_overridden(o)
|
119
|
+
eval "class X; remove_method :#{m}; end"
|
120
|
+
assert_equal false, is_overridden(o)
|
121
|
+
|
122
|
+
o = X.new
|
123
|
+
assert_equal false, is_overridden(o)
|
124
|
+
X.send(:define_method, m) {}
|
125
|
+
assert_equal true, is_overridden(o)
|
126
|
+
X.send :remove_method, m
|
127
|
+
assert_equal false, is_overridden(o)
|
128
|
+
end
|
129
|
+
|
130
|
+
def test_gc ()
|
131
|
+
def gc () 10.times {GC.start} end
|
132
|
+
rt = Rucy::Tester
|
133
|
+
|
134
|
+
gc
|
135
|
+
rt.clear_logs
|
136
|
+
|
137
|
+
o = RubyObj.new
|
138
|
+
assert_equal 'RubyObj()', last_log
|
139
|
+
gc
|
140
|
+
assert_equal 'RubyObj()', last_log
|
141
|
+
o = nil
|
142
|
+
gc
|
143
|
+
assert_equal '~RubyObj()', last_log
|
144
|
+
|
145
|
+
gc
|
146
|
+
rt.clear_logs
|
147
|
+
|
148
|
+
o = RubyObj.new
|
149
|
+
assert_equal 'RubyObj()', last_log
|
150
|
+
RubyObj.set_ref o
|
151
|
+
gc
|
152
|
+
assert_equal 'RubyObj()', last_log
|
153
|
+
o = nil
|
154
|
+
gc
|
155
|
+
assert_equal 'RubyObj()', last_log
|
156
|
+
RubyObj.clear_ref
|
157
|
+
gc
|
158
|
+
assert_equal '~RubyObj()', last_log
|
159
|
+
end
|
160
|
+
|
161
|
+
end# TestClass
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require_relative 'helpers'
|
5
|
+
|
6
|
+
|
7
|
+
class TestException < Test::Unit::TestCase
|
8
|
+
|
9
|
+
include Rucy::Tester
|
10
|
+
|
11
|
+
def test_raise_ruby_exception ()
|
12
|
+
assert_raise(StandardError) {raise_ruby_exception}
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_raise_in_eval ()
|
16
|
+
assert_raise(RuntimeError) {raise_in_eval}
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_throw_std_exception ()
|
20
|
+
assert_raise(Rucy::NativeError) {throw_std_exception}
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_throw_std_runtime_error ()
|
24
|
+
assert_raise(Rucy::NativeError) {throw_std_runtime_error}
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_throw_custom_exception ()
|
28
|
+
assert_raise(Rucy::NativeError) {throw_custom_exception}
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_throw_std_string ()
|
32
|
+
assert_raise(Rucy::NativeError) {throw_std_string}
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_throw_cstring ()
|
36
|
+
assert_raise(Rucy::NativeError) {throw_cstring}
|
37
|
+
end
|
38
|
+
|
39
|
+
end# TestException
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require_relative 'helpers'
|
5
|
+
|
6
|
+
|
7
|
+
class TestFunction < Test::Unit::TestCase
|
8
|
+
|
9
|
+
include Rucy::Tester
|
10
|
+
|
11
|
+
def test_do_nothing_returns_nil ()
|
12
|
+
assert_equal nil, do_nothing
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_returns_nil ()
|
16
|
+
assert_equal nil, return_nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_return_int ()
|
20
|
+
assert_kind_of Integer, return_int
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_return_float ()
|
24
|
+
assert_kind_of Float, return_float
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_return_string ()
|
28
|
+
assert_kind_of String, return_string
|
29
|
+
end
|
30
|
+
|
31
|
+
end# TestFunction
|
data/test/test_struct.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require_relative 'helpers'
|
5
|
+
|
6
|
+
|
7
|
+
class TestStruct < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup ()
|
10
|
+
@x = Rucy::Tester::Struct.new
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_default_value_is_0 ()
|
14
|
+
assert_equal 0, @x.num
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_get_set_num ()
|
18
|
+
@x.num = 1
|
19
|
+
assert_equal 1, @x.num
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_dup ()
|
23
|
+
assert_equal 0, @x.num
|
24
|
+
x = @x.dup
|
25
|
+
@x.num = 1
|
26
|
+
assert_equal 1, @x.num
|
27
|
+
assert_equal 0, x.num
|
28
|
+
end
|
29
|
+
|
30
|
+
end# TestStruct
|
data/test/test_value.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
|
4
|
+
require_relative 'helpers'
|
5
|
+
|
6
|
+
|
7
|
+
class TestFunction < Test::Unit::TestCase
|
8
|
+
|
9
|
+
include Rucy::Tester
|
10
|
+
|
11
|
+
def test_to_value ()
|
12
|
+
assert_equal true, true_to_value
|
13
|
+
assert_equal false, false_to_value
|
14
|
+
assert_equal nil, null_to_value
|
15
|
+
assert_equal nil, nil_value
|
16
|
+
end
|
17
|
+
|
18
|
+
end# TestFunction
|