overflow 0.0.1 → 0.1.0

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.
@@ -3,4 +3,3 @@ begin
3
3
  rescue LoadError
4
4
  require "overflow/overflow"
5
5
  end
6
- require "overflow/version"
@@ -1,11 +1,10 @@
1
1
  # coding: utf-8
2
2
  lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'overflow/version'
5
4
 
6
5
  Gem::Specification.new do |spec|
7
6
  spec.name = "overflow"
8
- spec.version = Overflow::VERSION
7
+ spec.version = "0.1.0"
9
8
  spec.author = "ksss"
10
9
  spec.email = "co000ri@gmail.com"
11
10
  spec.description = %q{Overflow is a class to overflow calculated as C language in Ruby.}
@@ -23,4 +22,5 @@ Gem::Specification.new do |spec|
23
22
  spec.add_development_dependency "rake"
24
23
  spec.add_development_dependency "rspec", ['~> 2.11']
25
24
  spec.add_development_dependency "rake-compiler", ["~> 0.8.3"]
25
+ spec.add_development_dependency "limits"
26
26
  end
@@ -0,0 +1,167 @@
1
+ require 'spec_helper'
2
+
3
+ describe Overflow do
4
+ it "class" do
5
+ expect(Overflow).to be_include(Comparable)
6
+ expect(Overflow.superclass).to eq(Numeric)
7
+ end
8
+
9
+ it "clone" do
10
+ over = Overflow.new "c", 1
11
+ expect(over.clone).to be_a_kind_of(Overflow)
12
+ end
13
+
14
+ it "coerce" do
15
+ over = Overflow.new "c", 1
16
+ c = Overflow.new "c", 2
17
+ expect(over.coerce(2)).to eq([2,1])
18
+ expect(over.coerce(c)).to eq([2,1])
19
+ expect(2 + over).to eq(3)
20
+ expect(2.1 + over).to eq(3.1)
21
+ end
22
+
23
+ it "i" do
24
+ over = Overflow.new "c", 1
25
+ expect(over.i).to be_a_kind_of(Complex)
26
+ end
27
+
28
+ it "<=>" do
29
+ over = Overflow.new "Q", 1
30
+ expect(over <=> 1).to eq(0)
31
+ expect(over <=> 0xffffffffffffffff).to eq(-1)
32
+
33
+ over.set 0xffffffffffffffff
34
+ expect(over <=> 1).to eq(1)
35
+ expect(over <=> 0xffffffffffffffff).to eq(0)
36
+ end
37
+
38
+ it "+@" do
39
+ over = Overflow.new "c", 1
40
+ expect((+over).to_i).to eq(1)
41
+ end
42
+
43
+ it "-@" do
44
+ over = Overflow.new "c", 1
45
+ expect((-over).to_i).to eq(-1)
46
+ end
47
+
48
+ it "hash" do
49
+ a = Overflow.new "i", 10
50
+ b = Overflow.new "i", 10
51
+ c = Overflow.new "Q", 10
52
+ d = Overflow.new "i", 100
53
+ expect(a.hash == b.hash).to be true
54
+ expect(a.hash == c.hash).to be false
55
+ expect(a.hash == d.hash).to be false
56
+
57
+ ary = []
58
+ hash = {}
59
+ 100.times { ary << c *= 3 }
60
+ ary.each_with_index {|x, i| hash[x] = i}
61
+ ary.each_with_index do |x, i|
62
+ expect(hash[x]).to eq(i)
63
+ end
64
+ end
65
+
66
+ it "eql?" do
67
+ a = Overflow.new "i", 10
68
+ b = Overflow.new "i", 10
69
+ c = Overflow.new "Q", 10
70
+ d = Overflow.new "i", 100
71
+ fix = 10
72
+ expect(a.eql?(fix)).to be false
73
+ expect(a.eql?(b)).to be true
74
+ expect(a.eql?(c)).to be false
75
+ expect(a.eql?(d)).to be false
76
+ expect(fix.eql?(a)).to be false
77
+ end
78
+
79
+ it "to_f" do
80
+ a = Overflow.new "c", 10
81
+ expect(a.to_f).to eq(10.0)
82
+ end
83
+
84
+ it "fdiv" do
85
+ a = Overflow.new "c", 10
86
+ expect(a.fdiv(2)).to eq(5.0)
87
+ end
88
+
89
+ it "div" do
90
+ a = Overflow.new "c", 10
91
+ expect(a.div(3)).to eq(3)
92
+ end
93
+
94
+ it "divmod" do
95
+ a = Overflow.new "c", 10
96
+ expect(a.divmod(3)).to eq([3, 1])
97
+ end
98
+
99
+ it "modulo" do
100
+ a = Overflow.new "c", 10
101
+ expect(a.modulo(3)).to eq(1)
102
+ expect(a % 3).to eq(1)
103
+ end
104
+
105
+ it "remainder" do
106
+ a = Overflow.new "c", 13
107
+ expect(a.remainder(4)).to eq(1)
108
+ expect(a.remainder(4.25)).to eq(0.25)
109
+ end
110
+
111
+ it "abs" do
112
+ a = Overflow.new "c", -10
113
+ b = Overflow.new "c", 10
114
+ expect(a.abs).to eq(10)
115
+ expect(a.magnitude).to eq(10)
116
+ expect(b.abs).to eq(10)
117
+ end
118
+
119
+ it "to_int" do
120
+ a = Overflow.new "c", 10
121
+ expect(a.to_int).to eq(10)
122
+ end
123
+
124
+ it "real?" do
125
+ a = Overflow.new "c", 10
126
+ expect(a.real?).to be true
127
+ end
128
+
129
+ it "integer?" do
130
+ a = Overflow.new "c", 10
131
+ expect(a.integer?).to be true
132
+ end
133
+
134
+ it "zero?" do
135
+ a = Overflow.new "c", 0
136
+ b = Overflow.new "c", 10
137
+ expect(a.zero?).to be true
138
+ expect(b.zero?).to be false
139
+ end
140
+
141
+ it "nonzero?" do
142
+ a = Overflow.new "c", 0
143
+ b = Overflow.new "c", 10
144
+ expect(a.nonzero?).to be nil
145
+ expect(b.nonzero?).to eq(b)
146
+ end
147
+
148
+ it "floor" do
149
+ a = Overflow.new "c", 10
150
+ expect(a.floor).to eq(10)
151
+ end
152
+
153
+ it "ceil" do
154
+ a = Overflow.new "c", 10
155
+ expect(a.ceil).to eq(10)
156
+ end
157
+
158
+ it "round" do
159
+ a = Overflow.new "c", 10
160
+ expect(a.round).to eq(10)
161
+ end
162
+
163
+ it "truncate" do
164
+ a = Overflow.new "c", 10
165
+ expect(a.truncate).to eq(10)
166
+ end
167
+ end
@@ -1,29 +1,18 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Overflow do
4
- CHAR_MAX = 0x7f
5
- CHAR_MIN = -0x80
6
- UCHAR_MAX = 0xff
7
-
8
- SHRT_MAX = 0x7fff
9
- SHRT_MIN = -0x8000
10
- USHRT_MAX = 0xffff
11
-
12
- INT_MAX = 0x7fffffff
13
- INT_MIN = -0x80000000
14
- UINT_MAX = 0xffffffff
15
-
16
- LLONG_MAX = 0x7fffffffffffffff
17
- LLONG_MIN = -0x8000000000000000
18
- ULLONG_MAX = 0xffffffffffffffff
19
-
20
4
  it "initialize" do
21
5
  %w{c C s S i I l L q Q}.each do |i|
22
- Overflow.new i
6
+ expect(Overflow.new i).to be_a_kind_of(Overflow)
7
+ expect(Overflow.new i, 1).to be_a_kind_of(Overflow)
23
8
  end
24
9
  end
25
10
 
26
- it "set and to_i type 'c'" do
11
+ it "to_i" do
12
+ expect((Overflow.new "c").to_i).to eq(0)
13
+ end
14
+
15
+ it "set type 'c'" do
27
16
  over = Overflow.new "c"
28
17
  expect(over.set(0).to_i).to eq(0)
29
18
  expect(over.set(CHAR_MAX).to_i).to eq(CHAR_MAX)
@@ -33,7 +22,16 @@ describe Overflow do
33
22
  expect(over.set(UCHAR_MAX + 2).to_i).to eq(1)
34
23
  end
35
24
 
36
- it "set and to_i type 'i'" do
25
+ it "set type 's'" do
26
+ over = Overflow.new "s"
27
+ expect(over.set(SHRT_MAX).to_i).to eq(SHRT_MAX)
28
+ expect(over.set(SHRT_MAX + 1).to_i).to eq(SHRT_MIN)
29
+ expect(over.set(USHRT_MAX).to_i).to eq(-1)
30
+ expect(over.set(USHRT_MAX + 1).to_i).to eq(0)
31
+ expect(over.set(USHRT_MAX + 2).to_i).to eq(1)
32
+ end
33
+
34
+ it "set type 'i'" do
37
35
  over = Overflow.new "i"
38
36
  expect(over.set(INT_MAX).to_i).to eq(INT_MAX)
39
37
  expect(over.set(INT_MAX + 1).to_i).to eq(INT_MIN)
@@ -42,7 +40,17 @@ describe Overflow do
42
40
  expect(over.set(UINT_MAX + 2).to_i).to eq(1)
43
41
  end
44
42
 
45
- it "set and to_i type 'q'" do
43
+ # FIXME write test
44
+ # it "set type 'l'" do
45
+ # over = Overflow.new "l"
46
+ # expect(over.set(INT_MAX).to_i).to eq(INT_MAX)
47
+ # expect(over.set(INT_MAX + 1).to_i).to eq(INT_MIN)
48
+ # expect(over.set(UINT_MAX).to_i).to eq(-1)
49
+ # expect(over.set(UINT_MAX + 1).to_i).to eq(0)
50
+ # expect(over.set(UINT_MAX + 2).to_i).to eq(1)
51
+ # end
52
+
53
+ it "set type 'q'" do
46
54
  over = Overflow.new "q"
47
55
  expect(over.set(LLONG_MAX).to_i).to eq(LLONG_MAX)
48
56
  expect(over.set(LLONG_MAX + 1).to_i).to eq(LLONG_MIN)
@@ -51,201 +59,204 @@ describe Overflow do
51
59
  expect(over.set(ULLONG_MAX + 2).to_i).to eq(1)
52
60
  end
53
61
 
62
+ it "<<" do
63
+ over = Overflow.new "c", 1
64
+ expect(over << 1).to be_a_kind_of(Overflow)
65
+ expect(over.to_i).to eq(1)
66
+ end
67
+
54
68
  it "<< 8bit" do
55
- over = Overflow.new "c"
56
- over.set(CHAR_MAX)
69
+ over = Overflow.new "c", CHAR_MAX
57
70
  over = over << 7
58
71
  expect(over.to_i).to eq(CHAR_MIN)
59
72
 
60
- over = Overflow.new "C"
61
- over.set(UCHAR_MAX)
73
+ over = Overflow.new "C", UCHAR_MAX
62
74
  over = over << 7
63
75
  expect(over.to_i).to eq(CHAR_MAX + 1)
64
76
  end
65
77
 
66
78
  it "<< 16bit" do
67
- over = Overflow.new "s"
68
- over.set(SHRT_MAX)
79
+ over = Overflow.new "s", SHRT_MAX
69
80
  over = over << 15
70
81
  expect(over.to_i).to eq(SHRT_MIN)
71
82
 
72
- over = Overflow.new "S"
73
- over.set(USHRT_MAX)
83
+ over = Overflow.new "S", USHRT_MAX
74
84
  over = over << 15
75
85
  expect(over.to_i).to eq(SHRT_MAX + 1)
76
86
  end
77
87
 
78
88
  it "<< 32bit" do
79
- over = Overflow.new "i"
80
- over.set(INT_MAX)
89
+ over = Overflow.new "i", INT_MAX
81
90
  over = over << 31
82
91
  expect(over.to_i).to eq(INT_MIN)
83
92
 
84
- over = Overflow.new "I"
85
- over.set(UINT_MAX)
93
+ over = Overflow.new "I", UINT_MAX
86
94
  over = over << 31
87
95
  expect(over.to_i).to eq(INT_MAX + 1)
88
96
  end
89
97
 
90
98
  it "<< 64bit" do
91
- over = Overflow.new "q"
92
- over.set(LLONG_MAX)
99
+ over = Overflow.new "q", LLONG_MAX
93
100
  over = over << 63
94
101
  expect(over.to_i).to eq(LLONG_MIN)
95
102
 
96
- over = Overflow.new "Q"
97
- over.set(ULLONG_MAX)
103
+ over = Overflow.new "Q", ULLONG_MAX
98
104
  over = over << 63
99
105
  expect(over.to_i).to eq(LLONG_MAX + 1)
100
106
  end
101
107
 
108
+ it ">>" do
109
+ over = Overflow.new "c", 1
110
+ expect(over >> 1).to be_a_kind_of(Overflow)
111
+ expect(over.to_i).to eq(1)
112
+ end
113
+
102
114
  it ">> 8bit" do
103
- over = Overflow.new "c"
104
- over.set(CHAR_MAX)
115
+ over = Overflow.new "c", CHAR_MAX
105
116
  over = over >> 7
106
117
  expect(over.to_i).to eq(0)
107
118
 
108
- over = Overflow.new "C"
109
- over.set(UCHAR_MAX)
119
+ over = Overflow.new "C", UCHAR_MAX
110
120
  over = over >> 7
111
121
  expect(over.to_i).to eq(1)
112
122
  end
113
123
 
114
124
  it ">> 16bit" do
115
- over = Overflow.new "s"
116
- over.set(SHRT_MAX)
125
+ over = Overflow.new "s", SHRT_MAX
117
126
  over = over >> 15
118
127
  expect(over.to_i).to eq(0)
119
128
 
120
- over = Overflow.new "S"
121
- over.set(USHRT_MAX)
129
+ over = Overflow.new "S", USHRT_MAX
122
130
  over = over >> 15
123
131
  expect(over.to_i).to eq(1)
124
132
  end
125
133
 
126
134
  it ">> 32bit" do
127
- over = Overflow.new "i"
128
- over.set(INT_MAX)
135
+ over = Overflow.new "i", INT_MAX
129
136
  over = over >> 31
130
137
  expect(over.to_i).to eq(0)
131
138
 
132
- over = Overflow.new "I"
133
- over.set(UINT_MAX)
139
+ over = Overflow.new "I", UINT_MAX
134
140
  over = over >> 31
135
141
  expect(over.to_i).to eq(1)
136
142
  end
137
143
 
138
144
  it ">> 64bit" do
139
- over = Overflow.new "q"
140
- over.set(LLONG_MAX)
145
+ over = Overflow.new "q", LLONG_MAX
141
146
  over = over >> 63
142
147
  expect(over.to_i).to eq(0)
143
148
 
144
- over = Overflow.new "Q"
145
- over.set(ULLONG_MAX)
149
+ over = Overflow.new "Q", ULLONG_MAX
146
150
  over = over >> 63
147
151
  expect(over.to_i).to eq(1)
148
152
  end
149
153
 
154
+ it "+" do
155
+ over = Overflow.new "c", 1
156
+ clone = over.clone
157
+ expect(over + 1).to be_a_kind_of(Overflow)
158
+ expect(over.to_i).to eq(clone.to_i)
159
+ expect((over + clone).to_i).to eq(2)
160
+ end
161
+
150
162
  it "+ 8bit" do
151
- over = Overflow.new "c"
152
- over.set(CHAR_MAX)
163
+ over = Overflow.new "c", CHAR_MAX
153
164
  over += 1
154
165
  expect(over.to_i).to eq(CHAR_MIN)
155
166
 
156
- over = Overflow.new "C"
157
- over.set(UCHAR_MAX)
167
+ over = Overflow.new "C", UCHAR_MAX
158
168
  over += 1
159
169
  expect(over.to_i).to eq(0)
160
170
  end
161
171
 
162
172
  it "+ 16bit" do
163
- over = Overflow.new "s"
164
- over.set(SHRT_MAX)
173
+ over = Overflow.new "s", SHRT_MAX
165
174
  over += 1
166
175
  expect(over.to_i).to eq(SHRT_MIN)
167
176
 
168
- over = Overflow.new "S"
169
- over.set(USHRT_MAX)
177
+ over = Overflow.new "S", USHRT_MAX
170
178
  over += 1
171
179
  expect(over.to_i).to eq(0)
172
180
  end
173
181
 
174
182
  it "+ 32bit" do
175
- over = Overflow.new "l"
176
- over.set(INT_MAX)
183
+ over = Overflow.new "l", INT_MAX
177
184
  over += 1
178
185
  expect(over.to_i).to eq(INT_MIN)
179
186
 
180
- over = Overflow.new "L"
181
- over.set(UINT_MAX)
187
+ over = Overflow.new "L", UINT_MAX
182
188
  over += 1
183
189
  expect(over.to_i).to eq(0)
184
190
  end
185
191
 
186
192
  it "+ 64bit" do
187
- over = Overflow.new "q"
188
- over.set(LLONG_MAX)
193
+ over = Overflow.new "q", LLONG_MAX
189
194
  over += 1
190
195
  expect(over.to_i).to eq(LLONG_MIN)
191
196
 
192
- over = Overflow.new "Q"
193
- over.set(ULLONG_MAX)
197
+ over = Overflow.new "Q", ULLONG_MAX
194
198
  over += 1
195
199
  expect(over.to_i).to eq(0)
196
200
  end
197
201
 
202
+ it "-" do
203
+ over = Overflow.new "c", 1
204
+ clone = over.clone
205
+ expect(over - 1).to be_a_kind_of(Overflow)
206
+ expect(over.to_i).to eq(clone.to_i)
207
+ expect((over - clone).to_i).to eq(0)
208
+ end
209
+
198
210
  it "- 8bit" do
199
- over = Overflow.new "c"
200
- over.set(CHAR_MIN)
211
+ over = Overflow.new "c", CHAR_MIN
201
212
  over -= 1
202
213
  expect(over.to_i).to eq(CHAR_MAX)
203
214
 
204
- over = Overflow.new "C"
205
- over.set(0)
215
+ over = Overflow.new "C", 0
206
216
  over -= 1
207
217
  expect(over.to_i).to eq(UCHAR_MAX)
208
218
  end
209
219
 
210
220
  it "- 16bit" do
211
- over = Overflow.new "s"
212
- over.set(SHRT_MIN)
221
+ over = Overflow.new "s", SHRT_MIN
213
222
  over -= 1
214
223
  expect(over.to_i).to eq(SHRT_MAX)
215
224
 
216
- over = Overflow.new "S"
217
- over.set(0)
225
+ over = Overflow.new "S", 0
218
226
  over -= 1
219
227
  expect(over.to_i).to eq(USHRT_MAX)
220
228
  end
221
229
 
222
230
  it "- 32bit" do
223
- over = Overflow.new "l"
224
- over.set(INT_MIN)
231
+ over = Overflow.new "l", INT_MIN
225
232
  over -= 1
226
233
  expect(over.to_i).to eq(INT_MAX)
227
234
 
228
- over = Overflow.new "L"
229
- over.set(0)
235
+ over = Overflow.new "L", 0
230
236
  over -= 1
231
237
  expect(over.to_i).to eq(UINT_MAX)
232
238
  end
233
239
 
234
240
  it "- 64bit" do
235
- over = Overflow.new "q"
236
- over.set(LLONG_MIN)
241
+ over = Overflow.new "q", LLONG_MIN
237
242
  over -= 1
238
243
  expect(over.to_i).to eq(LLONG_MAX)
239
244
 
240
- over = Overflow.new "Q"
241
- over.set(0)
245
+ over = Overflow.new "Q", 0
242
246
  over -= 1
243
247
  expect(over.to_i).to eq(ULLONG_MAX)
244
248
  end
245
249
 
250
+ it "*" do
251
+ over = Overflow.new "c", 1
252
+ clone = over.clone
253
+ expect(over * 2).to be_a_kind_of(Overflow)
254
+ expect(over.to_i).to eq(clone.to_i)
255
+ expect((over * clone).to_i).to eq(1)
256
+ end
257
+
246
258
  it "* 8bit" do
247
- over = Overflow.new "c"
248
- over.set(CHAR_MAX)
259
+ over = Overflow.new "c", CHAR_MAX
249
260
  over *= CHAR_MAX
250
261
  expect(over.to_i).to eq(1)
251
262
 
@@ -253,15 +264,13 @@ describe Overflow do
253
264
  over *= CHAR_MIN
254
265
  expect(over.to_i).to eq(0)
255
266
 
256
- over = Overflow.new "C"
257
- over.set(UCHAR_MAX)
267
+ over = Overflow.new "C", UCHAR_MAX
258
268
  over *= UCHAR_MAX
259
269
  expect(over.to_i).to eq(1)
260
270
  end
261
271
 
262
272
  it "* 16bit" do
263
- over = Overflow.new "s"
264
- over.set(SHRT_MAX)
273
+ over = Overflow.new "s", SHRT_MAX
265
274
  over *= SHRT_MAX
266
275
  expect(over.to_i).to eq(1)
267
276
 
@@ -269,15 +278,13 @@ describe Overflow do
269
278
  over *= SHRT_MIN
270
279
  expect(over.to_i).to eq(0)
271
280
 
272
- over = Overflow.new "S"
273
- over.set(USHRT_MAX)
281
+ over = Overflow.new "S", USHRT_MAX
274
282
  over *= USHRT_MAX
275
283
  expect(over.to_i).to eq(1)
276
284
  end
277
285
 
278
286
  it "* 32bit" do
279
- over = Overflow.new "l"
280
- over.set(INT_MAX)
287
+ over = Overflow.new "l", INT_MAX
281
288
  over *= INT_MAX
282
289
  expect(over.to_i).to eq(1)
283
290
 
@@ -285,15 +292,13 @@ describe Overflow do
285
292
  over *= INT_MIN
286
293
  expect(over.to_i).to eq(0)
287
294
 
288
- over = Overflow.new "L"
289
- over.set(UINT_MAX)
295
+ over = Overflow.new "L", UINT_MAX
290
296
  over *= UINT_MAX
291
297
  expect(over.to_i).to eq(1)
292
298
  end
293
299
 
294
300
  it "* 64bit" do
295
- over = Overflow.new "q"
296
- over.set(LLONG_MAX)
301
+ over = Overflow.new "q", LLONG_MAX
297
302
  over *= LLONG_MAX
298
303
  expect(over.to_i).to eq(1)
299
304
 
@@ -301,13 +306,57 @@ describe Overflow do
301
306
  over *= LLONG_MIN
302
307
  expect(over.to_i).to eq(0)
303
308
 
304
- over = Overflow.new "Q"
305
- over.set(ULLONG_MAX)
309
+ over = Overflow.new "Q", ULLONG_MAX
306
310
  over *= ULLONG_MAX
307
311
  expect(over.to_i).to eq(1)
308
312
  end
309
313
 
310
- end
314
+ it "/" do
315
+ over = Overflow.new "c", 5
316
+ clone = over.clone
317
+ expect(over / 2).to be_a_kind_of(Overflow)
318
+ expect((over / 2).to_i).to eq(2)
319
+ expect(over.to_i).to eq(clone.to_i)
320
+ expect((over / clone).to_i).to eq(1)
321
+ end
311
322
 
323
+ it "~" do
324
+ over = Overflow.new "C", 0xaa
325
+ rev = ~over
326
+ expect(over.to_i).to eq(0xaa)
327
+ expect(rev.to_i).to eq(0x55)
328
+ end
329
+
330
+ it "&" do
331
+ over = Overflow.new "C", 0xaa
332
+ clone = over.clone
333
+ a = over & 0x99
334
+ expect(over.to_i).to eq(0xaa)
335
+ expect(a.to_i).to eq(0x88)
336
+ over &= 0xffffffffffffffffff
337
+ expect(over.to_i).to eq(0xaa)
338
+ expect((over & clone).to_i).to eq(0xaa)
339
+ end
312
340
 
341
+ it "|" do
342
+ over = Overflow.new "C", 0xaa
343
+ clone = over.clone
344
+ a = over | 0x99
345
+ expect(over.to_i).to eq(0xaa)
346
+ expect(a.to_i).to eq(0xbb)
347
+ over |= 0xffffffffffffffffff
348
+ expect(over.to_i).to eq(0xff)
349
+ expect((over | clone).to_i).to eq(0xff)
350
+ end
313
351
 
352
+ it "^" do
353
+ over = Overflow.new "C", 0xaa
354
+ clone = over.clone
355
+ a = over ^ 0x99
356
+ expect(over.to_i).to eq(0xaa)
357
+ expect(a.to_i).to eq(0x33)
358
+ over ^= 0xffffffffffffffffff
359
+ expect(over.to_i).to eq(0x55)
360
+ expect((over ^ clone).to_i).to eq(0xff)
361
+ end
362
+ end