btcruby 1.2 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|