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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 69203af0ce59eee2b3131a2df44cae9a7ca517be
4
- data.tar.gz: f5fc80c6a9fed850298d7eb9b5812af45474e0d6
3
+ metadata.gz: 16766d44b49b6e361fcd92e76421a0ba4f815fa6
4
+ data.tar.gz: 92aaedfe9cda6fcfc87ce9f6b158adbb3237e847
5
5
  SHA512:
6
- metadata.gz: 82f4dcc9b9114d38049baddc9675bbbde98ced25699cf4c03f9ff01c83217e265c06d096b6d945e967424ddad6b2975b755d821d5bfaecb1e9553b97c52d9bb3
7
- data.tar.gz: 4818136ee80be83560ed4432889eb80de6b14973f1f8448cadebfc35cd47103f6ede63753656fc3b9ffcb32bdf814381abce98fd8dcd4d240f182182075bd497
6
+ metadata.gz: 5cab2a47cbb54f031fe4a8f57360657a9790cd1f56843b53d613e40c840612fd35f3910822e2a1f46e9a5f33eb3b84c60635c842d71ec0c1963e19e107cadbfc
7
+ data.tar.gz: bd806cad97401ba874414b63f0c35cd095e7dae9e28f9ac3e16cc4bcb7caf123a88713d24a05bc2f0f0619dd0ed965e8a000171f47a47a2b55ac1ea4f39def04
@@ -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
@@ -1,3 +1,3 @@
1
1
  module BTC
2
- VERSION = "1.2".freeze
2
+ VERSION = "1.2.1".freeze
3
3
  end
@@ -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: '1.2'
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-08 00:00:00.000000000 Z
12
+ date: 2015-09-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ffi