rtype-native 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +62 -40
- data/ext/rtype/{extconf.rb → c/extconf.rb} +0 -0
- data/ext/rtype/{rtype.c → c/rtype.c} +8 -8
- data/ext/rtype/{rtype.h → c/rtype.h} +0 -0
- data/spec/rtype_spec.rb +8 -2
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7628a99152b791414bf7a6651d3fec5229718c2c
|
4
|
+
data.tar.gz: 1fe92f38dc1995a88342ce8d9a80c7dca9de5a6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ecde7d0cebc9796d8e29845f341fe8f913d1e1cd3a424741c7b8c35ab16083a305a5b7c695e3a70d5da9606f552825e7a6cc110bed4553f6c20746a6d958e74
|
7
|
+
data.tar.gz: c06b26503bd67776e2592d2bc956ae9a83879b04d81bee393312433f7c66d7219f2c469cc9230cb572053e744f086fb06a63dbf43516a12095da734d4829595c
|
data/README.md
CHANGED
@@ -31,7 +31,10 @@ Test::invert(state: 0)
|
|
31
31
|
|
32
32
|
## Requirements
|
33
33
|
- Ruby >= 2.1
|
34
|
-
- MRI or RBX
|
34
|
+
- MRI or RBX
|
35
|
+
- If C native extension is used, otherwise it is not required
|
36
|
+
- JRuby
|
37
|
+
- If Java extension is used, otherwise it is not required
|
35
38
|
|
36
39
|
## Features
|
37
40
|
- Provide type checking for argument and return
|
@@ -49,12 +52,29 @@ require 'rtype'
|
|
49
52
|
```
|
50
53
|
|
51
54
|
### Native extension
|
52
|
-
Rtype itself is pure-ruby gem. but you can make it more faster by native extension.
|
55
|
+
Rtype itself is pure-ruby gem. but you can make it more faster by using native extension.
|
53
56
|
|
54
|
-
|
55
|
-
|
57
|
+
#### Native extension for MRI, RBX
|
58
|
+
Just run
|
59
|
+
```ruby
|
60
|
+
gem install rtype-native
|
61
|
+
```
|
62
|
+
or add to your `Gemfile`:
|
63
|
+
```ruby
|
64
|
+
gem 'rtype-native'
|
65
|
+
```
|
66
|
+
then, Rtype use it. (Do not `require 'rtype-native'`)
|
56
67
|
|
57
|
-
|
68
|
+
#### Java extension for JRuby
|
69
|
+
Just run
|
70
|
+
```ruby
|
71
|
+
gem install rtype-java
|
72
|
+
```
|
73
|
+
or add to your `Gemfile`:
|
74
|
+
```ruby
|
75
|
+
gem 'rtype-java'
|
76
|
+
```
|
77
|
+
then, Rtype use it. (Do not `require 'rtype-java'`)
|
58
78
|
|
59
79
|
## Usage
|
60
80
|
|
@@ -370,68 +390,70 @@ Result of `rake benchmark` ([source](https://github.com/sputnikgugja/rtype/tree/
|
|
370
390
|
|
371
391
|
### MRI
|
372
392
|
```
|
393
|
+
Rtype with C native extension
|
373
394
|
Ruby version: 2.1.7
|
374
395
|
Ruby engine: ruby
|
375
396
|
Ruby description: ruby 2.1.7p400 (2015-08-18 revision 51632) [x64-mingw32]
|
376
|
-
Rtype version: 0.
|
397
|
+
Rtype version: 0.3.0
|
377
398
|
Rubype version: 0.3.1
|
378
399
|
Sig version: 1.0.1
|
379
400
|
Contracts version: 0.13.0
|
380
401
|
Typecheck version: 0.1.2
|
381
402
|
Warming up --------------------------------------
|
382
|
-
pure 85.
|
383
|
-
rtype 25.
|
384
|
-
rubype
|
385
|
-
sig 8.
|
386
|
-
contracts 4.
|
387
|
-
typecheck 1.
|
403
|
+
pure 85.328k i/100ms
|
404
|
+
rtype 25.665k i/100ms
|
405
|
+
rubype 21.414k i/100ms
|
406
|
+
sig 8.921k i/100ms
|
407
|
+
contracts 4.638k i/100ms
|
408
|
+
typecheck 1.110k i/100ms
|
388
409
|
Calculating -------------------------------------
|
389
|
-
pure 3.
|
390
|
-
rtype
|
391
|
-
rubype
|
392
|
-
sig
|
393
|
-
contracts
|
394
|
-
typecheck 11.
|
410
|
+
pure 3.282M (± 2.7%) i/s - 16.468M
|
411
|
+
rtype 339.065k (± 2.6%) i/s - 1.720M
|
412
|
+
rubype 266.893k (± 5.9%) i/s - 1.349M
|
413
|
+
sig 99.952k (± 2.1%) i/s - 499.576k
|
414
|
+
contracts 49.693k (± 1.5%) i/s - 250.452k
|
415
|
+
typecheck 11.356k (± 1.6%) i/s - 57.720k
|
395
416
|
|
396
417
|
Comparison:
|
397
|
-
pure:
|
398
|
-
rtype:
|
399
|
-
rubype:
|
400
|
-
sig:
|
401
|
-
contracts:
|
402
|
-
typecheck:
|
418
|
+
pure: 3282431.9 i/s
|
419
|
+
rtype: 339064.9 i/s - 9.68x slower
|
420
|
+
rubype: 266892.9 i/s - 12.30x slower
|
421
|
+
sig: 99952.2 i/s - 32.84x slower
|
422
|
+
contracts: 49693.0 i/s - 66.05x slower
|
423
|
+
typecheck: 11355.9 i/s - 289.05x slower
|
403
424
|
```
|
404
425
|
|
405
426
|
### JRuby
|
406
427
|
Without Rubype that doesn't support JRuby
|
407
428
|
|
408
429
|
```
|
430
|
+
Rtype with Java extension
|
409
431
|
Ruby version: 2.2.3
|
410
432
|
Ruby engine: jruby
|
411
433
|
Ruby description: jruby 9.0.5.0 (2.2.3) 2016-01-26 7bee00d Java HotSpot(TM) 64-Bit Server VM 25.60-b23 on 1.8.0_60-b27 +jit [Windows 10-amd64]
|
412
|
-
Rtype version: 0.
|
434
|
+
Rtype version: 0.3.0
|
413
435
|
Sig version: 1.0.1
|
414
436
|
Contracts version: 0.13.0
|
415
437
|
Typecheck version: 0.1.2
|
416
438
|
Warming up --------------------------------------
|
417
|
-
pure
|
418
|
-
rtype
|
419
|
-
sig 4.
|
420
|
-
contracts
|
421
|
-
typecheck
|
439
|
+
pure 9.994k i/100ms
|
440
|
+
rtype 6.181k i/100ms
|
441
|
+
sig 4.041k i/100ms
|
442
|
+
contracts 951.000 i/100ms
|
443
|
+
typecheck 970.000 i/100ms
|
422
444
|
Calculating -------------------------------------
|
423
|
-
pure
|
424
|
-
rtype
|
425
|
-
sig
|
426
|
-
contracts
|
427
|
-
typecheck 12.
|
445
|
+
pure 7.128M (?±35.6%) i/s - 30.831M
|
446
|
+
rtype 121.556k (?± 6.2%) i/s - 605.738k
|
447
|
+
sig 72.187k (?± 6.4%) i/s - 359.649k
|
448
|
+
contracts 24.984k (?± 3.9%) i/s - 125.532k
|
449
|
+
typecheck 12.041k (?± 9.5%) i/s - 60.140k
|
428
450
|
|
429
451
|
Comparison:
|
430
|
-
pure:
|
431
|
-
rtype:
|
432
|
-
sig:
|
433
|
-
contracts:
|
434
|
-
typecheck:
|
452
|
+
pure: 7128373.0 i/s
|
453
|
+
rtype: 121555.8 i/s - 58.64x slower
|
454
|
+
sig: 72186.8 i/s - 98.75x slower
|
455
|
+
contracts: 24984.5 i/s - 285.31x slower
|
456
|
+
typecheck: 12041.0 i/s - 592.01x slower
|
435
457
|
```
|
436
458
|
|
437
459
|
## Rubype, Sig
|
File without changes
|
@@ -37,10 +37,10 @@ rb_rtype_valid(VALUE self, VALUE expected, VALUE value) {
|
|
37
37
|
case T_FALSE:
|
38
38
|
return !RTEST(value) ? Qtrue : Qfalse;
|
39
39
|
default:
|
40
|
-
if(
|
40
|
+
if(rb_obj_is_kind_of(expected, rb_cRange)) {
|
41
41
|
return rb_funcall(expected, rb_intern("include?"), 1, value);
|
42
42
|
}
|
43
|
-
else if(
|
43
|
+
else if(rb_obj_is_kind_of(expected, rb_cProc)) {
|
44
44
|
return RTEST(rb_funcall(expected, rb_intern("call"), 1, value)) ? Qtrue : Qfalse;
|
45
45
|
}
|
46
46
|
else if( RTEST(rb_obj_is_kind_of(expected, rb_cRtypeBehaviorBase)) ) {
|
@@ -95,13 +95,13 @@ rb_rtype_assert_return_type(VALUE self, VALUE expected, VALUE result) {
|
|
95
95
|
if(expected == Qnil) {
|
96
96
|
if(result != Qnil) {
|
97
97
|
VALUE msg = rb_funcall(rb_mRtype, rb_intern("type_error_message"), 2, expected, result);
|
98
|
-
rb_raise(rb_eRtypeReturnTypeError, "for return:\n
|
98
|
+
rb_raise(rb_eRtypeReturnTypeError, "for return:\n%s", StringValueCStr(msg));
|
99
99
|
}
|
100
100
|
}
|
101
101
|
else {
|
102
102
|
if( !RTEST(rb_rtype_valid(self, expected, result)) ) {
|
103
103
|
VALUE msg = rb_funcall(rb_mRtype, rb_intern("type_error_message"), 2, expected, result);
|
104
|
-
rb_raise(rb_eRtypeReturnTypeError, "for return:\n
|
104
|
+
rb_raise(rb_eRtypeReturnTypeError, "for return:\n%s", StringValueCStr(msg));
|
105
105
|
}
|
106
106
|
}
|
107
107
|
return Qnil;
|
@@ -115,8 +115,8 @@ void Init_rtype_native(void) {
|
|
115
115
|
rb_eRtypeTypeSignatureError = rb_define_class_under(rb_mRtype, "TypeSignatureError", rb_eArgError);
|
116
116
|
rb_eRtypeReturnTypeError = rb_define_class_under(rb_mRtype, "ReturnTypeError", rb_eStandardError);
|
117
117
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
118
|
+
rb_define_method(rb_mRtype, "valid?", rb_rtype_valid, 2);
|
119
|
+
rb_define_method(rb_mRtype, "assert_arguments_type", rb_rtype_assert_arguments_type, 2);
|
120
|
+
rb_define_method(rb_mRtype, "assert_arguments_type_with_keywords", rb_rtype_assert_arguments_type_with_keywords, 4);
|
121
|
+
rb_define_method(rb_mRtype, "assert_return_type", rb_rtype_assert_return_type, 2);
|
122
122
|
}
|
File without changes
|
data/spec/rtype_spec.rb
CHANGED
@@ -236,29 +236,35 @@ describe Rtype do
|
|
236
236
|
describe 'true' do
|
237
237
|
it "is right" do
|
238
238
|
klass.send :rtype, :return_arg, [true] => Any
|
239
|
+
instance.return_arg(true)
|
239
240
|
instance.return_arg(123)
|
240
241
|
end
|
241
242
|
it "is wrong args" do
|
242
243
|
klass.send :rtype, :return_arg, [true] => Any
|
244
|
+
expect {instance.return_arg(false)}.to raise_error Rtype::ArgumentTypeError
|
243
245
|
expect {instance.return_arg(nil)}.to raise_error Rtype::ArgumentTypeError
|
244
246
|
end
|
245
247
|
it "is wrong result" do
|
246
|
-
klass.send :rtype, :
|
247
|
-
expect {instance.
|
248
|
+
klass.send :rtype, :return_arg, [Any] => true
|
249
|
+
expect {instance.return_arg(false)}.to raise_error Rtype::ReturnTypeError
|
250
|
+
expect {instance.return_arg(nil)}.to raise_error Rtype::ReturnTypeError
|
248
251
|
end
|
249
252
|
end
|
250
253
|
|
251
254
|
describe 'false' do
|
252
255
|
it "is right" do
|
253
256
|
klass.send :rtype, :return_arg, [false] => Any
|
257
|
+
instance.return_arg(false)
|
254
258
|
instance.return_arg(nil)
|
255
259
|
end
|
256
260
|
it "is wrong args" do
|
257
261
|
klass.send :rtype, :return_arg, [false] => Any
|
262
|
+
expect {instance.return_arg(true)}.to raise_error Rtype::ArgumentTypeError
|
258
263
|
expect {instance.return_arg(123)}.to raise_error Rtype::ArgumentTypeError
|
259
264
|
end
|
260
265
|
it "is wrong result" do
|
261
266
|
klass.send :rtype, :return_arg, [Any] => false
|
267
|
+
expect {instance.return_arg(true)}.to raise_error Rtype::ReturnTypeError
|
262
268
|
expect {instance.return_arg(123)}.to raise_error Rtype::ReturnTypeError
|
263
269
|
end
|
264
270
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rtype-native
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sputnik Gugja
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rtype
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.3.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.3.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -71,7 +71,7 @@ email:
|
|
71
71
|
- sputnikgugja@gmail.com
|
72
72
|
executables: []
|
73
73
|
extensions:
|
74
|
-
- ext/rtype/extconf.rb
|
74
|
+
- ext/rtype/c/extconf.rb
|
75
75
|
extra_rdoc_files: []
|
76
76
|
files:
|
77
77
|
- Gemfile
|
@@ -79,9 +79,9 @@ files:
|
|
79
79
|
- README.md
|
80
80
|
- Rakefile
|
81
81
|
- benchmark/benchmark.rb
|
82
|
-
- ext/rtype/extconf.rb
|
83
|
-
- ext/rtype/rtype.c
|
84
|
-
- ext/rtype/rtype.h
|
82
|
+
- ext/rtype/c/extconf.rb
|
83
|
+
- ext/rtype/c/rtype.c
|
84
|
+
- ext/rtype/c/rtype.h
|
85
85
|
- spec/rtype_spec.rb
|
86
86
|
- spec/spec_helper.rb
|
87
87
|
homepage: https://github.com/sputnikgugja/rtype
|