btcruby 1.2 → 1.2.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 +4 -4
- data/RELEASE_NOTES.md +12 -0
- data/lib/btcruby/script/script_number.rb +36 -5
- data/lib/btcruby/version.rb +1 -1
- data/spec/script_number_spec.rb +78 -10
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16766d44b49b6e361fcd92e76421a0ba4f815fa6
|
4
|
+
data.tar.gz: 92aaedfe9cda6fcfc87ce9f6b158adbb3237e847
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5cab2a47cbb54f031fe4a8f57360657a9790cd1f56843b53d613e40c840612fd35f3910822e2a1f46e9a5f33eb3b84c60635c842d71ec0c1963e19e107cadbfc
|
7
|
+
data.tar.gz: bd806cad97401ba874414b63f0c35cd095e7dae9e28f9ac3e16cc4bcb7caf123a88713d24a05bc2f0f0619dd0ed965e8a000171f47a47a2b55ac1ea4f39def04
|
data/RELEASE_NOTES.md
CHANGED
@@ -2,6 +2,18 @@
|
|
2
2
|
BTCRuby Release Notes
|
3
3
|
=====================
|
4
4
|
|
5
|
+
1.2.1 (September 8, 2015)
|
6
|
+
-----------------------
|
7
|
+
|
8
|
+
* Added more arithmetic operators to `BTC::ScriptNumber`.
|
9
|
+
|
10
|
+
|
11
|
+
1.2 (September 8, 2015)
|
12
|
+
-----------------------
|
13
|
+
|
14
|
+
* Renamed Script Plugin to Script Extension.
|
15
|
+
|
16
|
+
|
5
17
|
1.1.6 (August 26, 2015)
|
6
18
|
-----------------------
|
7
19
|
|
@@ -10,7 +10,7 @@ module BTC
|
|
10
10
|
|
11
11
|
class ScriptNumber
|
12
12
|
DEFAULT_MAX_SIZE = 4
|
13
|
-
|
13
|
+
|
14
14
|
INT64_MAX = 0x7fffffffffffffff
|
15
15
|
INT64_MIN = -INT64_MAX - 1
|
16
16
|
|
@@ -57,10 +57,10 @@ module BTC
|
|
57
57
|
def <(other); @integer < other.to_i; end
|
58
58
|
def >=(other); @integer >= other.to_i; end
|
59
59
|
def >(other); @integer > other.to_i; end
|
60
|
-
|
60
|
+
|
61
61
|
def +(other); self.class.new(integer: @integer + other.to_i); end
|
62
62
|
def -(other); self.class.new(integer: @integer - other.to_i); end
|
63
|
-
|
63
|
+
|
64
64
|
def +@
|
65
65
|
self
|
66
66
|
end
|
@@ -69,7 +69,38 @@ module BTC
|
|
69
69
|
assert(@integer > INT64_MIN && @integer <= INT64_MAX, "Integer will not be within int64 range after negation")
|
70
70
|
self.class.new(integer: -@integer)
|
71
71
|
end
|
72
|
-
|
72
|
+
|
73
|
+
def *(other)
|
74
|
+
# TODO: add asserts to check that result fits within int64 limits
|
75
|
+
self.class.new(integer: @integer * other.to_i)
|
76
|
+
end
|
77
|
+
|
78
|
+
def /(other)
|
79
|
+
# TODO: add asserts to check that result fits within int64 limits
|
80
|
+
self.class.new(integer: @integer / other.to_i)
|
81
|
+
end
|
82
|
+
|
83
|
+
def <<(other)
|
84
|
+
# TODO: add asserts to check that result fits within int64 limits
|
85
|
+
assert(other >= 0, "Shift amount must not be negative")
|
86
|
+
a = @integer.abs
|
87
|
+
r = a << other.to_i
|
88
|
+
if a != @integer
|
89
|
+
r = -r
|
90
|
+
end
|
91
|
+
self.class.new(integer: r)
|
92
|
+
end
|
93
|
+
|
94
|
+
def >>(other)
|
95
|
+
# TODO: add asserts to check that result fits within int64 limits
|
96
|
+
assert(other >= 0, "Shift amount must not be negative")
|
97
|
+
a = @integer.abs
|
98
|
+
r = a >> other.to_i
|
99
|
+
if a != @integer
|
100
|
+
r = -r
|
101
|
+
end
|
102
|
+
self.class.new(integer: r)
|
103
|
+
end
|
73
104
|
|
74
105
|
|
75
106
|
# Conversion Methods
|
@@ -138,7 +169,7 @@ module BTC
|
|
138
169
|
|
139
170
|
BTC.data_from_bytes(result)
|
140
171
|
end
|
141
|
-
|
172
|
+
|
142
173
|
def assert(condition, message)
|
143
174
|
raise message if !condition
|
144
175
|
end
|
data/lib/btcruby/version.rb
CHANGED
data/spec/script_number_spec.rb
CHANGED
@@ -7,7 +7,7 @@ describe BTC::ScriptNumber do
|
|
7
7
|
BTC::ScriptNumber.new(integer: i).to_i.must_equal i
|
8
8
|
end
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it "should validate a range of back-and-forth conversions" do
|
12
12
|
(-100000..10000).each do |i|
|
13
13
|
BTC::ScriptNumber.new(integer: i).to_i.must_equal i
|
@@ -45,7 +45,7 @@ describe BTC::ScriptNumber do
|
|
45
45
|
it "should decode -255." do
|
46
46
|
BTC::ScriptNumber.new(data: "\xff\x80").to_i.must_equal -255
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it "should raise exception for non-minimally-encoded data" do
|
50
50
|
should_raise('non-minimally encoded script number') { BTC::ScriptNumber.new(data: "\x00") }
|
51
51
|
should_raise('non-minimally encoded script number') { BTC::ScriptNumber.new(data: "\x80") }
|
@@ -55,23 +55,23 @@ describe BTC::ScriptNumber do
|
|
55
55
|
should_raise('non-minimally encoded script number') { BTC::ScriptNumber.new(data: "\x00\x10\x80") }
|
56
56
|
should_raise('non-minimally encoded script number') { BTC::ScriptNumber.new(data: "\x10\x00\x80") }
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
it "should raise exception for invalid encoding" do
|
60
|
-
should_raise('script number overflow (3 > 2)') { BTC::ScriptNumber.new(data: "\x00\x00\x80", max_size: 2) }
|
60
|
+
should_raise('script number overflow (3 > 2)') { BTC::ScriptNumber.new(data: "\x00\x00\x80", max_size: 2) }
|
61
61
|
end
|
62
|
-
|
62
|
+
|
63
63
|
it "should encode booleans" do
|
64
64
|
BTC::ScriptNumber.new(boolean: true).must_equal 1
|
65
65
|
BTC::ScriptNumber.new(boolean: true).data.must_equal "\x01"
|
66
66
|
BTC::ScriptNumber.new(boolean: false).must_equal 0
|
67
67
|
BTC::ScriptNumber.new(boolean: false).data.must_equal ""
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
it "should check equality checks" do
|
71
71
|
(BTC::ScriptNumber.new(integer: 0) == 0).must_equal true
|
72
72
|
(BTC::ScriptNumber.new(integer: 1) == 1).must_equal true
|
73
73
|
(BTC::ScriptNumber.new(integer: -1) == -1).must_equal true
|
74
|
-
|
74
|
+
|
75
75
|
(BTC::ScriptNumber.new(integer: 0) == BTC::ScriptNumber.new(integer: 0)).must_equal true
|
76
76
|
(BTC::ScriptNumber.new(integer: 1) == BTC::ScriptNumber.new(integer: 1)).must_equal true
|
77
77
|
(BTC::ScriptNumber.new(integer: -1) == BTC::ScriptNumber.new(integer: -1)).must_equal true
|
@@ -83,7 +83,7 @@ describe BTC::ScriptNumber do
|
|
83
83
|
(BTC::ScriptNumber.new(integer: 1) != BTC::ScriptNumber.new(integer: 1)).must_equal false
|
84
84
|
(BTC::ScriptNumber.new(integer: -1) != BTC::ScriptNumber.new(integer: -1)).must_equal false
|
85
85
|
end
|
86
|
-
|
86
|
+
|
87
87
|
it "should support #-" do
|
88
88
|
sn = BTC::ScriptNumber.new(integer: 123)
|
89
89
|
sn = sn - 20
|
@@ -97,19 +97,87 @@ describe BTC::ScriptNumber do
|
|
97
97
|
sn += 7
|
98
98
|
sn.must_equal 150
|
99
99
|
end
|
100
|
-
|
100
|
+
|
101
101
|
it "should support unary minus operator" do
|
102
102
|
sn = BTC::ScriptNumber.new(integer: 123)
|
103
103
|
sn = -sn
|
104
104
|
sn.must_equal -123
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
it "should support unary plus operator" do
|
108
108
|
sn = BTC::ScriptNumber.new(integer: 123)
|
109
109
|
sn = +sn
|
110
110
|
sn.must_equal 123
|
111
111
|
end
|
112
112
|
|
113
|
+
it "should support #*" do
|
114
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
115
|
+
sn = sn * 10
|
116
|
+
sn.must_equal 1230
|
117
|
+
|
118
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
119
|
+
sn = sn * -10
|
120
|
+
sn.must_equal -1230
|
121
|
+
|
122
|
+
sn = BTC::ScriptNumber.new(integer: -123)
|
123
|
+
sn = sn * 10
|
124
|
+
sn.must_equal -1230
|
125
|
+
|
126
|
+
sn = BTC::ScriptNumber.new(integer: -123)
|
127
|
+
sn = sn * -10
|
128
|
+
sn.must_equal 1230
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should support integer #/ rounding to a lower value" do
|
132
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
133
|
+
sn = sn / 10
|
134
|
+
sn.must_equal 12
|
135
|
+
|
136
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
137
|
+
sn = sn / -10
|
138
|
+
sn.must_equal -13
|
139
|
+
|
140
|
+
sn = BTC::ScriptNumber.new(integer: -123)
|
141
|
+
sn = sn / -10
|
142
|
+
sn.must_equal 12
|
143
|
+
|
144
|
+
sn = BTC::ScriptNumber.new(integer: -123)
|
145
|
+
sn = sn / 10
|
146
|
+
sn.must_equal -13
|
147
|
+
end
|
148
|
+
|
149
|
+
it "should support << (LSHIFT)" do
|
150
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
151
|
+
sn = sn << 0
|
152
|
+
sn.must_equal 123
|
153
|
+
|
154
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
155
|
+
sn = sn << 2
|
156
|
+
sn.must_equal 492
|
157
|
+
end
|
158
|
+
|
159
|
+
it "should support >> (RSHIFT) with overflow" do
|
160
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
161
|
+
sn = sn >> 0
|
162
|
+
sn.must_equal 123
|
163
|
+
|
164
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
165
|
+
sn = sn >> 1
|
166
|
+
sn.must_equal 61
|
167
|
+
|
168
|
+
sn = BTC::ScriptNumber.new(integer: -123)
|
169
|
+
sn = sn >> 1
|
170
|
+
sn.must_equal -61
|
171
|
+
|
172
|
+
sn = BTC::ScriptNumber.new(integer: 123)
|
173
|
+
sn = sn >> 7
|
174
|
+
sn.must_equal 0
|
175
|
+
|
176
|
+
sn = BTC::ScriptNumber.new(integer: -123)
|
177
|
+
sn = sn >> 7
|
178
|
+
sn.must_equal 0
|
179
|
+
end
|
180
|
+
|
113
181
|
def should_raise(message)
|
114
182
|
raised = false
|
115
183
|
begin
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: btcruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Andreev
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-09-
|
12
|
+
date: 2015-09-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|