erlang-etf 1.1.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (118) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +20 -0
  3. data/.gitignore +10 -18
  4. data/.ruby-gemset +1 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +15 -4
  7. data/CHANGELOG.md +7 -0
  8. data/Gemfile +10 -6
  9. data/LICENSE.txt +1 -1
  10. data/README.md +13 -13
  11. data/Rakefile +8 -6
  12. data/erlang-etf.gemspec +10 -10
  13. data/lib/erlang-etf.rb +1 -0
  14. data/lib/erlang/etf.rb +363 -30
  15. data/lib/erlang/etf/atom.rb +28 -48
  16. data/lib/erlang/etf/atom_utf8.rb +28 -48
  17. data/lib/erlang/etf/binary.rb +24 -23
  18. data/lib/erlang/etf/bit_binary.rb +35 -27
  19. data/lib/erlang/etf/compressed.rb +61 -35
  20. data/lib/erlang/etf/export.rb +44 -21
  21. data/lib/erlang/etf/float.rb +33 -29
  22. data/lib/erlang/etf/fun.rb +54 -32
  23. data/lib/erlang/etf/integer.rb +24 -12
  24. data/lib/erlang/etf/large_big.rb +31 -37
  25. data/lib/erlang/etf/large_tuple.rb +41 -30
  26. data/lib/erlang/etf/list.rb +55 -25
  27. data/lib/erlang/etf/map.rb +58 -28
  28. data/lib/erlang/etf/new_float.rb +25 -14
  29. data/lib/erlang/etf/new_fun.rb +70 -47
  30. data/lib/erlang/etf/new_reference.rb +51 -24
  31. data/lib/erlang/etf/nil.rb +21 -6
  32. data/lib/erlang/etf/pid.rb +48 -21
  33. data/lib/erlang/etf/port.rb +49 -13
  34. data/lib/erlang/etf/reference.rb +49 -13
  35. data/lib/erlang/etf/small_atom.rb +31 -27
  36. data/lib/erlang/etf/small_atom_utf8.rb +31 -27
  37. data/lib/erlang/etf/small_big.rb +30 -39
  38. data/lib/erlang/etf/small_integer.rb +27 -12
  39. data/lib/erlang/etf/small_tuple.rb +41 -30
  40. data/lib/erlang/etf/string.rb +23 -23
  41. data/lib/erlang/etf/term.rb +109 -70
  42. data/lib/erlang/etf/version.rb +1 -1
  43. metadata +33 -169
  44. data/.rspec +0 -2
  45. data/lib/erlang/etf/bert.rb +0 -74
  46. data/lib/erlang/etf/extensions.rb +0 -144
  47. data/lib/erlang/etf/extensions/array.rb +0 -27
  48. data/lib/erlang/etf/extensions/big_decimal.rb +0 -20
  49. data/lib/erlang/etf/extensions/erlang-export.rb +0 -24
  50. data/lib/erlang/etf/extensions/erlang-list.rb +0 -29
  51. data/lib/erlang/etf/extensions/erlang-map.rb +0 -26
  52. data/lib/erlang/etf/extensions/erlang-nil.rb +0 -20
  53. data/lib/erlang/etf/extensions/erlang-pid.rb +0 -20
  54. data/lib/erlang/etf/extensions/erlang-string.rb +0 -31
  55. data/lib/erlang/etf/extensions/erlang-tuple.rb +0 -29
  56. data/lib/erlang/etf/extensions/false_class.rb +0 -26
  57. data/lib/erlang/etf/extensions/float.rb +0 -18
  58. data/lib/erlang/etf/extensions/hash.rb +0 -30
  59. data/lib/erlang/etf/extensions/integer.rb +0 -46
  60. data/lib/erlang/etf/extensions/nil_class.rb +0 -27
  61. data/lib/erlang/etf/extensions/object.rb +0 -22
  62. data/lib/erlang/etf/extensions/regexp.rb +0 -32
  63. data/lib/erlang/etf/extensions/string.rb +0 -33
  64. data/lib/erlang/etf/extensions/symbol.rb +0 -43
  65. data/lib/erlang/etf/extensions/time.rb +0 -27
  66. data/lib/erlang/etf/extensions/true_class.rb +0 -26
  67. data/lib/erlang/etf/terms.rb +0 -132
  68. data/spec/erlang/etf/atom_spec.rb +0 -90
  69. data/spec/erlang/etf/atom_utf8_spec.rb +0 -90
  70. data/spec/erlang/etf/binary_spec.rb +0 -90
  71. data/spec/erlang/etf/bit_binary_spec.rb +0 -99
  72. data/spec/erlang/etf/compressed_spec.rb +0 -37
  73. data/spec/erlang/etf/export_spec.rb +0 -58
  74. data/spec/erlang/etf/extensions/array_spec.rb +0 -40
  75. data/spec/erlang/etf/extensions/big_decimal_spec.rb +0 -26
  76. data/spec/erlang/etf/extensions/erlang-export_spec.rb +0 -32
  77. data/spec/erlang/etf/extensions/erlang-list_spec.rb +0 -76
  78. data/spec/erlang/etf/extensions/erlang-map_spec.rb +0 -48
  79. data/spec/erlang/etf/extensions/erlang-nil_spec.rb +0 -24
  80. data/spec/erlang/etf/extensions/erlang-pid_spec.rb +0 -33
  81. data/spec/erlang/etf/extensions/erlang-string_spec.rb +0 -41
  82. data/spec/erlang/etf/extensions/erlang-tuple_spec.rb +0 -57
  83. data/spec/erlang/etf/extensions/false_class_spec.rb +0 -29
  84. data/spec/erlang/etf/extensions/float_spec.rb +0 -24
  85. data/spec/erlang/etf/extensions/hash_spec.rb +0 -90
  86. data/spec/erlang/etf/extensions/integer_spec.rb +0 -259
  87. data/spec/erlang/etf/extensions/nil_class_spec.rb +0 -29
  88. data/spec/erlang/etf/extensions/object_spec.rb +0 -30
  89. data/spec/erlang/etf/extensions/regexp_spec.rb +0 -35
  90. data/spec/erlang/etf/extensions/string_spec.rb +0 -43
  91. data/spec/erlang/etf/extensions/symbol_spec.rb +0 -64
  92. data/spec/erlang/etf/extensions/time_spec.rb +0 -32
  93. data/spec/erlang/etf/extensions/true_class_spec.rb +0 -29
  94. data/spec/erlang/etf/float_spec.rb +0 -92
  95. data/spec/erlang/etf/fun_spec.rb +0 -132
  96. data/spec/erlang/etf/integer_spec.rb +0 -57
  97. data/spec/erlang/etf/large_big_spec.rb +0 -67
  98. data/spec/erlang/etf/large_tuple_spec.rb +0 -119
  99. data/spec/erlang/etf/list_spec.rb +0 -159
  100. data/spec/erlang/etf/map_spec.rb +0 -100
  101. data/spec/erlang/etf/new_float_spec.rb +0 -92
  102. data/spec/erlang/etf/new_fun_spec.rb +0 -146
  103. data/spec/erlang/etf/new_reference_spec.rb +0 -60
  104. data/spec/erlang/etf/nil_spec.rb +0 -50
  105. data/spec/erlang/etf/pid_spec.rb +0 -61
  106. data/spec/erlang/etf/port_spec.rb +0 -58
  107. data/spec/erlang/etf/reference_spec.rb +0 -58
  108. data/spec/erlang/etf/small_atom_spec.rb +0 -90
  109. data/spec/erlang/etf/small_atom_utf8_spec.rb +0 -90
  110. data/spec/erlang/etf/small_big_spec.rb +0 -67
  111. data/spec/erlang/etf/small_integer_spec.rb +0 -57
  112. data/spec/erlang/etf/small_tuple_spec.rb +0 -112
  113. data/spec/erlang/etf/string_spec.rb +0 -92
  114. data/spec/erlang/etf/term_spec.rb +0 -27
  115. data/spec/erlang/etf/terms_spec.rb +0 -23
  116. data/spec/erlang/etf_spec.rb +0 -23
  117. data/spec/erlang_spec.rb +0 -95
  118. data/spec/spec_helper.rb +0 -31
@@ -1,67 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Erlang::ETF::SmallBig do
6
- let(:term_class) { Erlang::ETF::SmallBig }
7
-
8
- describe '[class]' do
9
- describe 'deserialize' do
10
- let(:buffer) { StringIO.new(bytes.pack('C*')) }
11
- subject { term_class.deserialize(buffer) }
12
-
13
- let(:n) { 128 }
14
- let(:sign) { 0 }
15
- let(:integer) { (+1 << (128 * 8)) - 1 }
16
- let(:bytes) { [128, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255] }
17
-
18
- its(:n) { should eq(n) }
19
- its(:sign) { should eq(sign) }
20
- its(:integer) { should eq(integer) }
21
- end
22
-
23
- describe 'new' do
24
- subject { term_class.new(integer).tap(&:serialize) }
25
-
26
- let(:n) { 128 }
27
- let(:sign) { 1 }
28
- let(:integer) { (-1 << (128 * 8)) + 1 }
29
-
30
- its(:n) { should eq(n) }
31
- its(:sign) { should eq(sign) }
32
- its(:integer) { should eq(integer) }
33
- end
34
- end
35
-
36
- describe '[instance]' do
37
- let(:term) { term_class.new(integer) }
38
-
39
- describe 'serialize' do
40
- subject { term.serialize }
41
-
42
- let(:n) { 128 }
43
- let(:sign) { 1 }
44
- let(:integer) { (-1 << (128 * 8)) + 1 }
45
- let(:bytes) { [110, 128, 1, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255].pack('C*') }
46
-
47
- it { should eq(bytes) }
48
- end
49
-
50
- describe '__erlang_type__' do
51
- subject { term.__erlang_type__ }
52
-
53
- let(:integer) { (+1 << (128 * 8)) - 1 }
54
- it { should eq(:small_big) }
55
- end
56
-
57
- describe '__ruby_evolve__' do
58
- subject { term.__ruby_evolve__ }
59
-
60
- let(:ruby_obj) { (+1 << (128 * 8)) - 1 }
61
- let(:integer) { (+1 << (128 * 8)) - 1 }
62
-
63
- it { should eq(ruby_obj) }
64
- end
65
- end
66
-
67
- end
@@ -1,57 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Erlang::ETF::SmallInteger do
6
- let(:term_class) { Erlang::ETF::SmallInteger }
7
-
8
- describe '[class]' do
9
- describe 'deserialize' do
10
- let(:buffer) { StringIO.new(bytes.pack('C*')) }
11
- subject { term_class.deserialize(buffer) }
12
-
13
- let(:int) { 13 }
14
- let(:bytes) { [13] }
15
-
16
- its(:int) { should eq(int) }
17
- end
18
-
19
- describe 'new' do
20
- subject { term_class.new(int) }
21
-
22
- let(:int) { 13 }
23
-
24
- its(:int) { should eq(int) }
25
- end
26
- end
27
-
28
- describe '[instance]' do
29
- let(:term) { term_class.new(int) }
30
-
31
- describe 'serialize' do
32
- subject { term.serialize }
33
-
34
- let(:int) { 13 }
35
- let(:bytes) { [97, 13].pack('C*') }
36
-
37
- it { should eq(bytes) }
38
- end
39
-
40
- describe '__erlang_type__' do
41
- subject { term.__erlang_type__ }
42
-
43
- let(:int) { 13 }
44
- it { should eq(:small_integer) }
45
- end
46
-
47
- describe '__ruby_evolve__' do
48
- subject { term.__ruby_evolve__ }
49
-
50
- let(:ruby_obj) { 13 }
51
- let(:int) { 13 }
52
-
53
- it { should eq(ruby_obj) }
54
- end
55
- end
56
-
57
- end
@@ -1,112 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Erlang::ETF::SmallTuple do
6
- let(:term_class) { Erlang::ETF::SmallTuple }
7
-
8
- let(:atom) { Erlang::ETF::SmallAtom.new("test").tap(&:serialize) }
9
- let(:binary) { Erlang::ETF::Binary.new("test").tap(&:serialize) }
10
- let(:new_float) { Erlang::ETF::NewFloat.new(1.1) }
11
- let(:small_integer) { Erlang::ETF::SmallInteger.new(13) }
12
- let(:small_list) { Erlang::ETF::List.new([atom, binary, new_float, small_integer]) }
13
- let(:small_tuple) { Erlang::ETF::SmallTuple.new([atom, binary, new_float, small_integer, small_list]) }
14
-
15
- let(:erlang_nil) { Erlang::ETF::Nil.new }
16
-
17
- describe '[class]' do
18
- describe 'deserialize' do
19
- let(:buffer) { StringIO.new(bytes.pack('C*')) }
20
- subject { term_class.deserialize(buffer) }
21
-
22
- context 'single item tuple' do
23
- let(:bytes) { [1, 100, 0, 1, 97] }
24
- let(:atom_a) { Erlang::ETF::Atom.new("a").tap(&:serialize) }
25
-
26
- its(:arity) { should eq(1) }
27
- its(:elements) { should eq([atom_a]) }
28
- end
29
-
30
- context 'multiple item tuple' do
31
- let(:bytes) { [6, 115, 4, 116, 101, 115, 116, 109, 0, 0, 0, 4, 116, 101, 115, 116, 70, 63, 241, 153, 153, 153, 153, 153, 154, 97, 13, 104, 5, 115, 4, 116, 101, 115, 116, 109, 0, 0, 0, 4, 116, 101, 115, 116, 70, 63, 241, 153, 153, 153, 153, 153, 154, 97, 13, 108, 0, 0, 0, 4, 115, 4, 116, 101, 115, 116, 109, 0, 0, 0, 4, 116, 101, 115, 116, 70, 63, 241, 153, 153, 153, 153, 153, 154, 97, 13, 106, 108, 0, 0, 0, 4, 115, 4, 116, 101, 115, 116, 109, 0, 0, 0, 4, 116, 101, 115, 116, 70, 63, 241, 153, 153, 153, 153, 153, 154, 97, 13, 106] }
32
-
33
- its(:arity) { should eq(6) }
34
- its(:elements) { should eq([atom, binary, new_float, small_integer, small_tuple, small_list]) }
35
- end
36
- end
37
- end
38
-
39
- describe '[instance]' do
40
- let(:term) { term_class.new(elements) }
41
-
42
- let(:atom_a) { Erlang::ETF::Atom.new("a").tap(&:serialize) }
43
-
44
- describe 'serialize' do
45
- subject { term.serialize }
46
-
47
- context 'single item tuple' do
48
- let(:bytes) { [104, 1, 100, 0, 1, 97].pack('C*') }
49
-
50
- let(:elements) { [atom_a] }
51
-
52
- it { should eq(bytes) }
53
- end
54
-
55
- context 'multiple item tuple' do
56
- let(:bytes) { [104, 6, 115, 4, 116, 101, 115, 116, 109, 0, 0, 0, 4, 116, 101, 115, 116, 70, 63, 241, 153, 153, 153, 153, 153, 154, 97, 13, 104, 5, 115, 4, 116, 101, 115, 116, 109, 0, 0, 0, 4, 116, 101, 115, 116, 70, 63, 241, 153, 153, 153, 153, 153, 154, 97, 13, 108, 0, 0, 0, 4, 115, 4, 116, 101, 115, 116, 109, 0, 0, 0, 4, 116, 101, 115, 116, 70, 63, 241, 153, 153, 153, 153, 153, 154, 97, 13, 106, 108, 0, 0, 0, 4, 115, 4, 116, 101, 115, 116, 109, 0, 0, 0, 4, 116, 101, 115, 116, 70, 63, 241, 153, 153, 153, 153, 153, 154, 97, 13, 106].pack('C*') }
57
-
58
- let(:elements) { [atom, binary, new_float, small_integer, small_tuple, small_list] }
59
-
60
- it { should eq(bytes) }
61
- end
62
- end
63
-
64
- describe 'serialize_header' do
65
- subject { term.serialize_header("") }
66
-
67
- context 'single item tuple' do
68
- let(:bytes) { [104, 1].pack('C*') }
69
-
70
- let(:elements) { [atom_a] }
71
-
72
- it { should eq(bytes) }
73
- end
74
-
75
- context 'multiple item tuple' do
76
- let(:bytes) { [104, 6].pack('C*') }
77
-
78
- let(:elements) { [atom, binary, new_float, small_integer, small_tuple, small_list] }
79
-
80
- it { should eq(bytes) }
81
- end
82
- end
83
-
84
- describe '__erlang_type__' do
85
- subject { term.__erlang_type__ }
86
-
87
- let(:elements) { [atom_a] }
88
- it { should eq(:small_tuple) }
89
- end
90
-
91
- describe '__ruby_evolve__' do
92
- context 'single item tuple' do
93
- let(:ruby_obj) { ::Erlang::Tuple[:a] }
94
- subject { term.__ruby_evolve__ }
95
-
96
- let(:elements) { [atom_a] }
97
-
98
- it { should eq(ruby_obj) }
99
- end
100
-
101
- context 'multiple item tuple' do
102
- let(:ruby_obj) { ::Erlang::Tuple[:test, "test", 1.1, 13, ::Erlang::Tuple[:test, "test", 1.1, 13, ::Erlang::List[:test, "test", 1.1, 13]], ::Erlang::List[:test, "test", 1.1, 13]] }
103
- subject { term.__ruby_evolve__ }
104
-
105
- let(:elements) { [atom, binary, new_float, small_integer, small_tuple, small_list] }
106
-
107
- it { should eq(ruby_obj) }
108
- end
109
- end
110
- end
111
-
112
- end
@@ -1,92 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Erlang::ETF::String do
6
- let(:term_class) { Erlang::ETF::String }
7
-
8
- describe '[class]' do
9
- describe 'deserialize' do
10
- let(:buffer) { StringIO.new(bytes.pack('C*')) }
11
- subject { term_class.deserialize(buffer) }
12
-
13
- context "ASCII bytes" do
14
- let(:bytes) { [0, 4, 116, 101, 115, 116] }
15
-
16
- its(:len) { should eq(4) }
17
- its(:characters) { should eq("test") }
18
- end
19
-
20
- context "UTF-8 bytes" do
21
- let(:bytes) { [0, 2, 206, 169] }
22
-
23
- its(:len) { should eq(2) }
24
- its(:characters) { should eq("Ω") }
25
- end
26
- end
27
-
28
- describe 'new' do
29
- subject { term_class.new(characters) }
30
-
31
- context "ASCII" do
32
- let(:characters) { "test" }
33
-
34
- its(:characters) { should eq(characters) }
35
- end
36
-
37
- context "UTF-8" do
38
- let(:characters) { "Ω" }
39
-
40
- its(:characters) { should eq(characters) }
41
- end
42
- end
43
- end
44
-
45
- describe '[instance]' do
46
- let(:term) { term_class.new(characters) }
47
-
48
- describe 'serialize' do
49
- subject { term.serialize }
50
-
51
- context "ASCII" do
52
- let(:characters) { "test" }
53
- let(:bytes) { [107, 0, 4, 116, 101, 115, 116].pack('C*') }
54
-
55
- it { should eq(bytes) }
56
- end
57
-
58
- context "UTF-8" do
59
- let(:characters) { "Ω" }
60
- let(:bytes) { [107, 0, 2, 206, 169].pack('C*') }
61
-
62
- it { should eq(bytes) }
63
- end
64
- end
65
-
66
- describe '__erlang_type__' do
67
- subject { term.__erlang_type__ }
68
-
69
- let(:characters) { "test" }
70
- it { should eq(:string) }
71
- end
72
-
73
- describe '__ruby_evolve__' do
74
- subject { term.__ruby_evolve__ }
75
-
76
- context "ASCII" do
77
- let(:ruby_obj) { ::Erlang::String.new("test") }
78
- let(:characters) { "test" }
79
-
80
- it { should eq(ruby_obj) }
81
- end
82
-
83
- context "UTF-8" do
84
- let(:ruby_obj) { ::Erlang::String.new("Ω") }
85
- let(:characters) { "Ω" }
86
-
87
- it { should eq(ruby_obj) }
88
- end
89
- end
90
- end
91
-
92
- end
@@ -1,27 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Erlang::ETF::Term do
6
- let(:term_class) do
7
- Class.new do
8
- include Erlang::ETF::Term
9
-
10
- term :atom, always: -> { Erlang::ETF::Atom.new("atom") }
11
- term :binary, default: -> { Erlang::ETF::Binary.new("binary") }
12
-
13
- finalize
14
- end
15
- end
16
- let(:term) { term_class.new }
17
-
18
- describe '__erlang_evolve__' do
19
- subject { term.__erlang_evolve__ }
20
- it { should eq(term) }
21
- end
22
-
23
- describe '__ruby_evolve__' do
24
- subject { term.__ruby_evolve__ }
25
- it { should eq(term) }
26
- end
27
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Erlang::ETF::Terms do
6
- describe 'deserialize' do
7
- context 'with unknown Erlang External Format tag' do
8
- subject { -> { Erlang::ETF::Terms.deserialize(buffer) } }
9
- let(:buffer) { StringIO.new([82].pack('C*')) }
10
-
11
- it { should raise_error(NotImplementedError) }
12
- end
13
- end
14
-
15
- describe 'evolve' do
16
- context 'with unknown Erlang External Format tag' do
17
- subject { -> { Erlang::ETF::Terms.evolve(buffer) } }
18
- let(:buffer) { StringIO.new([82].pack('C*')) }
19
-
20
- it { should raise_error(NotImplementedError) }
21
- end
22
- end
23
- end
@@ -1,23 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Erlang::ETF do
6
- it 'has a version number' do
7
- expect(Erlang::ETF::VERSION).to_not be_nil
8
- end
9
-
10
- describe 'decode' do
11
- context 'without magic byte' do
12
- subject { -> { Erlang::ETF.decode(StringIO.new("")) } }
13
- it { should raise_error(NotImplementedError) }
14
- end
15
- end
16
-
17
- describe 'encode' do
18
- context 'when term cannot evolve' do
19
- subject { -> { Erlang::ETF.encode(Object.new) } }
20
- it { should raise_error(NotImplementedError) }
21
- end
22
- end
23
- end
@@ -1,95 +0,0 @@
1
- # encoding: utf-8
2
-
3
- require 'spec_helper'
4
-
5
- describe Erlang do
6
- describe 'binary_to_term' do
7
- context 'without magic byte' do
8
- subject { -> { Erlang.binary_to_term("") } }
9
- it { should raise_error(NotImplementedError) }
10
- end
11
- end
12
-
13
- describe 'term_to_binary' do
14
- context 'when term cannot evolve' do
15
- subject { -> { Erlang.term_to_binary(Object.new) } }
16
- it { should raise_error(NotImplementedError) }
17
- end
18
- end
19
-
20
- def roundtrip(term)
21
- expect(term).to eq(Erlang.binary_to_term(Erlang.term_to_binary(term)))
22
- end
23
-
24
- def roundtrip_compressed(term, compression)
25
- expect(term).to eq(Erlang.binary_to_term(Erlang.term_to_binary(term, compressed: compression)))
26
- end
27
-
28
- roundtrip_variables = [
29
- 1,
30
- 1.0,
31
- :a,
32
- Erlang::Tuple[],
33
- Erlang::Tuple[:a],
34
- Erlang::Tuple[:a, :b],
35
- Erlang::Tuple[Erlang::Tuple[:a, 1], Erlang::Tuple[:b, 2]],
36
- Erlang::Tuple[:bert, :unknown],
37
- Erlang::Tuple[:bert, "bad value"],
38
- [],
39
- [:a],
40
- [:a, 1],
41
- [[:a, 1], [:b, 2]],
42
- Erlang::List[:a].tail(:b),
43
- Erlang::List[:a, :b],
44
- "a",
45
- Erlang::String.new("a"),
46
- Erlang::Nil.new,
47
- nil,
48
- true,
49
- false,
50
- {},
51
- {:a => 1},
52
- {:a => 1, :b => 2},
53
- {a: {b: 1}},
54
- Erlang::Tuple[:bert, :dict, :invalid],
55
- Erlang::Tuple[:bert, :dict],
56
- Erlang::Tuple[:bert, :dict, Erlang::Tuple[:a]],
57
- # Time.now,
58
- Time.at(1363190400, 31388),
59
- Erlang::Tuple[:bert, :time],
60
- Erlang::Tuple[:bert, :time, 1, 1],
61
- Erlang::Tuple[:bert, :time, 1, 1, 1, 1],
62
- /^c(a)t$/imx,
63
- Erlang::Tuple[:bert, :regex, ".", "invalid"],
64
- Erlang::Tuple[:bert, :regex],
65
- 178,
66
- (256 ** 256) - 1,
67
- :true,
68
- :false,
69
- :nil,
70
- Erlang::Tuple[:bert, *([0] * 256)],
71
-
72
- Erlang::Export.new(:erlang, :now, 0),
73
- Erlang::Pid.new(:'node@host', 100, 10, 1),
74
- Erlang::String.new("test"),
75
- Erlang::Map[],
76
- Erlang::Map[:atom, 1],
77
- Erlang::Map[Erlang::Map[:atom, 1], 2]
78
- ]
79
-
80
- roundtrip_variables.each do |roundtrip_variable|
81
- it "roundtrips #{roundtrip_variable.inspect}" do
82
- roundtrip(roundtrip_variable)
83
- end
84
- end
85
-
86
- [false, true, *Erlang::ETF::Compressed::LEVEL_RANGE].each do |compression|
87
- context "when compression is #{compression}" do
88
- roundtrip_variables.each do |roundtrip_variable|
89
- it "roundtrips #{roundtrip_variable.inspect}" do
90
- roundtrip_compressed(roundtrip_variable, compression)
91
- end
92
- end
93
- end
94
- end
95
- end