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 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