bindata 2.4.10 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/ChangeLog.rdoc +39 -0
  3. data/LICENSE +25 -0
  4. data/NEWS.rdoc +5 -0
  5. data/README.md +6 -9
  6. data/bindata.gemspec +9 -4
  7. data/examples/NBT.txt +1 -1
  8. data/examples/list.rb +1 -1
  9. data/lib/bindata/alignment.rb +15 -7
  10. data/lib/bindata/array.rb +54 -54
  11. data/lib/bindata/base.rb +14 -25
  12. data/lib/bindata/base_primitive.rb +24 -20
  13. data/lib/bindata/bits.rb +15 -15
  14. data/lib/bindata/buffer.rb +89 -11
  15. data/lib/bindata/choice.rb +9 -6
  16. data/lib/bindata/count_bytes_remaining.rb +1 -1
  17. data/lib/bindata/delayed_io.rb +18 -10
  18. data/lib/bindata/dsl.rb +37 -35
  19. data/lib/bindata/float.rb +3 -3
  20. data/lib/bindata/framework.rb +8 -10
  21. data/lib/bindata/int.rb +14 -16
  22. data/lib/bindata/io.rb +276 -253
  23. data/lib/bindata/name.rb +1 -1
  24. data/lib/bindata/params.rb +9 -7
  25. data/lib/bindata/primitive.rb +3 -3
  26. data/lib/bindata/registry.rb +18 -18
  27. data/lib/bindata/rest.rb +1 -1
  28. data/lib/bindata/sanitize.rb +9 -16
  29. data/lib/bindata/section.rb +97 -0
  30. data/lib/bindata/skip.rb +140 -51
  31. data/lib/bindata/string.rb +9 -9
  32. data/lib/bindata/stringz.rb +12 -10
  33. data/lib/bindata/struct.rb +92 -68
  34. data/lib/bindata/trace.rb +35 -42
  35. data/lib/bindata/transform/brotli.rb +35 -0
  36. data/lib/bindata/transform/lz4.rb +35 -0
  37. data/lib/bindata/transform/lzma.rb +35 -0
  38. data/lib/bindata/transform/xor.rb +19 -0
  39. data/lib/bindata/transform/xz.rb +35 -0
  40. data/lib/bindata/transform/zlib.rb +33 -0
  41. data/lib/bindata/transform/zstd.rb +35 -0
  42. data/lib/bindata/uint8_array.rb +2 -2
  43. data/lib/bindata/version.rb +1 -1
  44. data/lib/bindata/virtual.rb +4 -7
  45. data/lib/bindata/warnings.rb +1 -1
  46. data/lib/bindata.rb +1 -0
  47. data/test/alignment_test.rb +8 -8
  48. data/test/array_test.rb +98 -96
  49. data/test/base_primitive_test.rb +47 -47
  50. data/test/base_test.rb +24 -24
  51. data/test/bits_test.rb +15 -15
  52. data/test/buffer_test.rb +31 -22
  53. data/test/choice_test.rb +32 -32
  54. data/test/count_bytes_remaining_test.rb +8 -8
  55. data/test/delayed_io_test.rb +91 -30
  56. data/test/float_test.rb +8 -8
  57. data/test/int_test.rb +14 -14
  58. data/test/io_test.rb +110 -302
  59. data/test/lazy_test.rb +38 -38
  60. data/test/params_test.rb +19 -19
  61. data/test/primitive_test.rb +26 -26
  62. data/test/record_test.rb +99 -99
  63. data/test/registry_test.rb +43 -43
  64. data/test/rest_test.rb +5 -5
  65. data/test/section_test.rb +111 -0
  66. data/test/skip_test.rb +71 -26
  67. data/test/string_test.rb +60 -60
  68. data/test/stringz_test.rb +34 -26
  69. data/test/struct_test.rb +167 -92
  70. data/test/system_test.rb +159 -41
  71. data/test/test_helper.rb +24 -13
  72. data/test/uint8_array_test.rb +6 -6
  73. data/test/virtual_test.rb +7 -7
  74. data/test/warnings_test.rb +14 -2
  75. metadata +19 -22
  76. data/.gitignore +0 -2
  77. data/.travis.yml +0 -15
  78. data/BSDL +0 -22
  79. data/COPYING +0 -52
  80. data/INSTALL +0 -12
  81. data/lib/bindata/offset.rb +0 -94
  82. data/test/offset_test.rb +0 -100
data/test/struct_test.rb CHANGED
@@ -5,14 +5,14 @@ require File.expand_path(File.join(File.dirname(__FILE__), "test_helper"))
5
5
  describe BinData::Struct, "when initializing" do
6
6
  it "fails on non registered types" do
7
7
  params = {fields: [[:non_registered_type, :a]]}
8
- lambda {
8
+ _ {
9
9
  BinData::Struct.new(params)
10
10
  }.must_raise BinData::UnRegisteredTypeError
11
11
  end
12
12
 
13
13
  it "fails on duplicate names" do
14
14
  params = {fields: [[:int8, :a], [:int8, :b], [:int8, :a]]}
15
- lambda {
15
+ _ {
16
16
  BinData::Struct.new(params)
17
17
  }.must_raise NameError
18
18
  end
@@ -20,21 +20,21 @@ describe BinData::Struct, "when initializing" do
20
20
  it "fails on reserved names" do
21
21
  # note that #invert is from Hash.instance_methods
22
22
  params = {fields: [[:int8, :a], [:int8, :invert]]}
23
- lambda {
23
+ _ {
24
24
  BinData::Struct.new(params)
25
25
  }.must_raise NameError
26
26
  end
27
27
 
28
28
  it "fails when field name shadows an existing method" do
29
29
  params = {fields: [[:int8, :object_id]]}
30
- lambda {
30
+ _ {
31
31
  BinData::Struct.new(params)
32
32
  }.must_raise NameError
33
33
  end
34
34
 
35
35
  it "fails on unknown endian" do
36
36
  params = {endian: 'bad value', fields: []}
37
- lambda {
37
+ _ {
38
38
  BinData::Struct.new(params)
39
39
  }.must_raise ArgumentError
40
40
  end
@@ -45,24 +45,65 @@ describe BinData::Struct, "with anonymous fields" do
45
45
  params = { fields: [
46
46
  [:int8, :a, {initial_value: 5}],
47
47
  [:int8, nil],
48
- [:int8, '', {value: :a}]
48
+ [:int8, '', {value: :a}],
49
+ [:int8, :b]
49
50
  ] }
50
51
  BinData::Struct.new(params)
51
52
  }
52
53
 
53
54
  it "only shows non anonymous fields" do
54
- obj.field_names.must_equal [:a]
55
+ _(obj.field_names).must_equal [:a, :b]
55
56
  end
56
57
 
57
58
  it "does not include anonymous fields in snapshot" do
58
- obj.a = 5
59
- obj.snapshot.must_equal({a: 5})
59
+ obj.a = 6
60
+ _(obj.snapshot).must_equal({a: 6, b: 0})
60
61
  end
61
62
 
62
63
  it "writes anonymous fields" do
63
- obj.read("\001\002\003")
64
+ obj.read("\001\002\003\004")
64
65
  obj.a.clear
65
- obj.to_binary_s.must_equal_binary "\005\002\005"
66
+ _(obj.to_binary_s).must_equal_binary "\005\002\005\004"
67
+ end
68
+
69
+ it "does not include anonymous fields in each_pair" do
70
+ _(obj.each_pair.count).must_equal 2
71
+ end
72
+
73
+ it "includes anonymous fields in each_pair when specified" do
74
+ _(obj.each_pair(true).count).must_equal 4
75
+ end
76
+
77
+ it "clears" do
78
+ obj.b = 3
79
+ refute obj.clear?
80
+
81
+ obj.clear
82
+ assert obj.clear?
83
+ end
84
+ end
85
+
86
+ describe BinData::Struct, "with onlyif fields" do
87
+ let(:obj) {
88
+ params = { fields: [
89
+ [:int8, :a, {initial_value: 2}],
90
+ [:int8, :b, {onlyif: -> { a.odd? }}]
91
+ ] }
92
+ BinData::Struct.new(params)
93
+ }
94
+
95
+ it "#fieldnames includes all fields" do
96
+ _(obj.field_names).must_equal [:a, :b]
97
+ end
98
+
99
+ it "#snapshot checks for onlyif" do
100
+ _(obj.snapshot.keys).must_equal [:a]
101
+ end
102
+
103
+ it "includes fields when required" do
104
+ refute obj.b?
105
+ obj.a = 3
106
+ assert obj.b?
66
107
  end
67
108
  end
68
109
 
@@ -78,24 +119,24 @@ describe BinData::Struct, "with hidden fields" do
78
119
  }
79
120
 
80
121
  it "only shows fields that aren't hidden" do
81
- obj.field_names.must_equal [:a, :d]
122
+ _(obj.field_names).must_equal [:a, :d]
82
123
  end
83
124
 
84
125
  it "shows all fields when requested" do
85
- obj.field_names(true).must_equal [:a, :b, :c, :d]
126
+ _(obj.field_names(true)).must_equal [:a, :b, :c, :d]
86
127
  end
87
128
 
88
129
  it "accesses hidden fields directly" do
89
- obj.b.must_equal 5
130
+ _(obj.b).must_equal 5
90
131
  obj.c = 15
91
- obj.c.must_equal 15
132
+ _(obj.c).must_equal 15
92
133
 
93
- obj.must_respond_to :b=
134
+ _(obj).must_respond_to :b=
94
135
  end
95
136
 
96
137
  it "does not include hidden fields in snapshot" do
97
138
  obj.b = 7
98
- obj.snapshot.must_equal({a: 0, d: 7})
139
+ _(obj.snapshot).must_equal({a: 0, d: 7})
99
140
  end
100
141
 
101
142
  it "detects hidden fields with has_key?" do
@@ -107,19 +148,19 @@ describe BinData::Struct, "with multiple fields" do
107
148
  let(:params) { { fields: [ [:int8, :a], [:int8, :b] ] } }
108
149
  let(:obj) { BinData::Struct.new({a: 1, b: 2}, params) }
109
150
 
110
- specify { obj.field_names.must_equal [:a, :b] }
111
- specify { obj.to_binary_s.must_equal_binary "\x01\x02" }
151
+ specify { _(obj.field_names).must_equal [:a, :b] }
152
+ specify { _(obj.to_binary_s).must_equal_binary "\x01\x02" }
112
153
 
113
154
  it "returns num_bytes" do
114
- obj.a.num_bytes.must_equal 1
115
- obj.b.num_bytes.must_equal 1
116
- obj.num_bytes.must_equal 2
155
+ _(obj.a.num_bytes).must_equal 1
156
+ _(obj.b.num_bytes).must_equal 1
157
+ _(obj.num_bytes).must_equal 2
117
158
  end
118
159
 
119
160
  it "identifies accepted parameters" do
120
- BinData::Struct.accepted_parameters.all.must_include :fields
121
- BinData::Struct.accepted_parameters.all.must_include :hide
122
- BinData::Struct.accepted_parameters.all.must_include :endian
161
+ _(BinData::Struct.accepted_parameters.all).must_include :fields
162
+ _(BinData::Struct.accepted_parameters.all).must_include :hide
163
+ _(BinData::Struct.accepted_parameters.all).must_include :endian
123
164
  end
124
165
 
125
166
  it "clears" do
@@ -137,16 +178,22 @@ describe BinData::Struct, "with multiple fields" do
137
178
  end
138
179
 
139
180
  it "reads elements dynamically" do
140
- obj[:a].must_equal 1
181
+ _(obj[:a]).must_equal 1
182
+ end
183
+
184
+ it "handles nonexistent elements" do
185
+ _(obj[:does_not_exist]).must_be_nil
141
186
  end
142
187
 
143
- it "handles not existing elements" do
144
- obj[:does_not_exist].must_be_nil
188
+ it "ignores setting nonexistent elements" do
189
+ snap = obj.snapshot
190
+ obj[:does_not_exist] = 3
191
+ _(obj.snapshot).must_equal snap
145
192
  end
146
193
 
147
194
  it "writes elements dynamically" do
148
195
  obj[:a] = 2
149
- obj.a.must_equal 2
196
+ _(obj.a).must_equal 2
150
197
  end
151
198
 
152
199
  it "implements has_key?" do
@@ -156,28 +203,28 @@ describe BinData::Struct, "with multiple fields" do
156
203
  it "reads ordered" do
157
204
  obj.read("\x03\x04")
158
205
 
159
- obj.a.must_equal 3
160
- obj.b.must_equal 4
206
+ _(obj.a).must_equal 3
207
+ _(obj.b).must_equal 4
161
208
  end
162
209
 
163
210
  it "returns a snapshot" do
164
211
  snap = obj.snapshot
165
212
  assert snap.respond_to?(:a)
166
- snap.a.must_equal 1
167
- snap.b.must_equal 2
168
- snap.must_equal({ a: 1, b: 2 })
213
+ _(snap.a).must_equal 1
214
+ _(snap.b).must_equal 2
215
+ _(snap).must_equal({ a: 1, b: 2 })
169
216
  end
170
217
 
171
218
  it "assigns from partial hash" do
172
219
  obj.assign(a: 3)
173
- obj.a.must_equal 3
174
- obj.b.must_equal 0
220
+ _(obj.a).must_equal 3
221
+ _(obj.b).must_equal 0
175
222
  end
176
223
 
177
224
  it "assigns from hash" do
178
225
  obj.assign(a: 3, b: 4)
179
- obj.a.must_equal 3
180
- obj.b.must_equal 4
226
+ _(obj.a).must_equal 3
227
+ _(obj.b).must_equal 4
181
228
  end
182
229
 
183
230
  it "assigns from nil" do
@@ -191,8 +238,8 @@ describe BinData::Struct, "with multiple fields" do
191
238
  src.b = 4
192
239
 
193
240
  obj.assign(src)
194
- obj.a.must_equal 3
195
- obj.b.must_equal 4
241
+ _(obj.a).must_equal 3
242
+ _(obj.b).must_equal 4
196
243
  end
197
244
 
198
245
  it "assigns from snapshot" do
@@ -201,29 +248,43 @@ describe BinData::Struct, "with multiple fields" do
201
248
  src.b = 4
202
249
 
203
250
  obj.assign(src.snapshot)
204
- obj.a.must_equal 3
205
- obj.b.must_equal 4
251
+ _(obj.a).must_equal 3
252
+ _(obj.b).must_equal 4
206
253
  end
207
254
 
208
255
  it "fails on unknown method call" do
209
- lambda { obj.does_not_exist }.must_raise NoMethodError
256
+ _ { obj.does_not_exist }.must_raise NoMethodError
210
257
  end
211
258
 
212
259
  describe "#snapshot" do
213
260
  it "has ordered #keys" do
214
- obj.snapshot.keys.must_equal [:a, :b]
261
+ _(obj.snapshot.keys).must_equal [:a, :b]
215
262
  end
216
263
 
217
264
  it "has ordered #each" do
218
265
  keys = []
219
266
  obj.snapshot.each { |el| keys << el[0] }
220
- keys.must_equal [:a, :b]
267
+ _(keys).must_equal [:a, :b]
221
268
  end
222
269
 
223
270
  it "has ordered #each_pair" do
224
271
  keys = []
225
272
  obj.snapshot.each_pair { |k, v| keys << k }
226
- keys.must_equal [:a, :b]
273
+ _(keys).must_equal [:a, :b]
274
+ end
275
+
276
+ it "accesses field" do
277
+ _(obj.snapshot[:a]).must_equal 1
278
+ end
279
+
280
+ it "fails on unknown method call" do
281
+ _ { obj.snapshot.does_not_exist }.must_raise NoMethodError
282
+ end
283
+
284
+ it "will not set attribute with nil value" do
285
+ refute obj.snapshot.key?(:foo)
286
+ obj.snapshot[:foo] = nil
287
+ refute obj.snapshot.key?(:foo)
227
288
  end
228
289
  end
229
290
  end
@@ -243,27 +304,27 @@ describe BinData::Struct, "with nested structs" do
243
304
  BinData::Struct.new(params)
244
305
  }
245
306
 
246
- specify { obj.field_names.must_equal [:a, :b, :c] }
307
+ specify { _(obj.field_names).must_equal [:a, :b, :c] }
247
308
 
248
309
  it "returns num_bytes" do
249
- obj.b.num_bytes.must_equal 2
250
- obj.c.num_bytes.must_equal 2
251
- obj.num_bytes.must_equal 5
310
+ _(obj.b.num_bytes).must_equal 2
311
+ _(obj.c.num_bytes).must_equal 2
312
+ _(obj.num_bytes).must_equal 5
252
313
  end
253
314
 
254
315
  it "accesses nested fields" do
255
- obj.a.must_equal 6
256
- obj.b.w.must_equal 3
257
- obj.b.x.must_equal 6
258
- obj.c.y.must_equal 3
259
- obj.c.z.must_equal 0
316
+ _(obj.a).must_equal 6
317
+ _(obj.b.w).must_equal 3
318
+ _(obj.b.x).must_equal 6
319
+ _(obj.c.y).must_equal 3
320
+ _(obj.c.z).must_equal 0
260
321
  end
261
322
 
262
323
  it "returns correct abs_offset" do
263
- obj.b.abs_offset.must_equal 1
264
- obj.b.w.abs_offset.must_equal 1
265
- obj.c.abs_offset.must_equal 3
266
- obj.c.z.abs_offset.must_equal 4
324
+ _(obj.b.abs_offset).must_equal 1
325
+ _(obj.b.w.abs_offset).must_equal 1
326
+ _(obj.c.abs_offset).must_equal 3
327
+ _(obj.c.z.abs_offset).must_equal 4
267
328
  end
268
329
  end
269
330
 
@@ -300,7 +361,7 @@ describe BinData::Struct, "with an endian defined" do
300
361
 
301
362
  expected = [1, 2.0, 3, 4, 5, 6, 7, 8].pack('veCCVvNv')
302
363
 
303
- obj.to_binary_s.must_equal_binary expected
364
+ _(obj.to_binary_s).must_equal_binary expected
304
365
  end
305
366
  end
306
367
 
@@ -310,23 +371,23 @@ describe BinData::Struct, "with bit fields" do
310
371
  BinData::Struct.new({a: 1, b: 2, c: 3, d: 1}, params)
311
372
  }
312
373
 
313
- specify { obj.num_bytes.must_equal 3 }
314
- specify { obj.to_binary_s.must_equal_binary [0b0000_0101, 3, 1].pack("C*") }
374
+ specify { _(obj.num_bytes).must_equal 3 }
375
+ specify { _(obj.to_binary_s).must_equal_binary [0b0000_0101, 3, 1].pack("C*") }
315
376
 
316
377
  it "reads" do
317
378
  str = [0b0000_0110, 5, 0].pack("C*")
318
379
  obj.read(str)
319
- obj.a.must_equal 0
320
- obj.b.must_equal 3
321
- obj.c.must_equal 5
322
- obj.d.must_equal 0
380
+ _(obj.a).must_equal 0
381
+ _(obj.b).must_equal 3
382
+ _(obj.c).must_equal 5
383
+ _(obj.d).must_equal 0
323
384
  end
324
385
 
325
386
  it "has correct offsets" do
326
- obj.a.rel_offset.must_equal 0
327
- obj.b.rel_offset.must_equal 0
328
- obj.c.rel_offset.must_equal 1
329
- obj.d.rel_offset.must_equal 2
387
+ _(obj.a.rel_offset).must_equal 0
388
+ _(obj.b.rel_offset).must_equal 0
389
+ _(obj.c.rel_offset).must_equal 1
390
+ _(obj.d.rel_offset).must_equal 2
330
391
  end
331
392
  end
332
393
 
@@ -341,10 +402,10 @@ describe BinData::Struct, "with nested endian" do
341
402
  obj = BinData::Struct.new(params)
342
403
  obj.read("\x00\x01\x02\x00\x03\x00\x00\x04")
343
404
 
344
- obj.a.must_equal 1
345
- obj.s.b.must_equal 2
346
- obj.s.c.must_equal 3
347
- obj.d.must_equal 4
405
+ _(obj.a).must_equal 1
406
+ _(obj.s.b).must_equal 2
407
+ _(obj.s.c).must_equal 3
408
+ _(obj.d).must_equal 4
348
409
  end
349
410
  end
350
411
 
@@ -355,46 +416,46 @@ describe BinData::Struct, "with a search_prefix" do
355
416
  it "searches symbol prefixes" do
356
417
  obj = BinData::Struct.new(search_prefix: :a,
357
418
  fields: [ [:short, :f] ])
358
- obj.f.class.name.must_equal "AShort"
419
+ _(obj.f.class.name).must_equal "AShort"
359
420
  end
360
421
 
361
422
  it "searches string prefixes" do
362
423
  obj = BinData::Struct.new(search_prefix: "a",
363
424
  fields: [ [:short, :f] ])
364
- obj.f.class.name.must_equal "AShort"
425
+ _(obj.f.class.name).must_equal "AShort"
365
426
  end
366
427
 
367
428
  it "searches string prefixes with optional underscore" do
368
429
  obj = BinData::Struct.new(search_prefix: "a_",
369
430
  fields: [ [:short, :f] ])
370
- obj.f.class.name.must_equal "AShort"
431
+ _(obj.f.class.name).must_equal "AShort"
371
432
  end
372
433
 
373
434
  it "searches multiple prefixes" do
374
435
  obj = BinData::Struct.new(search_prefix: [:x, :a],
375
436
  fields: [ [:short, :f] ])
376
- obj.f.class.name.must_equal "AShort"
437
+ _(obj.f.class.name).must_equal "AShort"
377
438
  end
378
439
 
379
440
  it "uses parent search_prefix" do
380
441
  nested_params = { fields: [[:short, :f]] }
381
442
  obj = BinData::Struct.new(search_prefix: :a,
382
443
  fields: [[:struct, :s, nested_params]])
383
- obj.s.f.class.name.must_equal "AShort"
444
+ _(obj.s.f.class.name).must_equal "AShort"
384
445
  end
385
446
 
386
447
  it "searches parent search_prefix" do
387
448
  nested_params = { search_prefix: :x, fields: [[:short, :f]] }
388
449
  obj = BinData::Struct.new(search_prefix: :a,
389
450
  fields: [[:struct, :s, nested_params]])
390
- obj.s.f.class.name.must_equal "AShort"
451
+ _(obj.s.f.class.name).must_equal "AShort"
391
452
  end
392
453
 
393
454
  it "prioritises nested search_prefix" do
394
455
  nested_params = { search_prefix: :a, fields: [[:short, :f]] }
395
456
  obj = BinData::Struct.new(search_prefix: :b,
396
457
  fields: [[:struct, :s, nested_params]])
397
- obj.s.f.class.name.must_equal "AShort"
458
+ _(obj.s.f.class.name).must_equal "AShort"
398
459
  end
399
460
  end
400
461
 
@@ -402,30 +463,44 @@ describe BinData::Struct, "with byte_align" do
402
463
  let(:obj) {
403
464
  params = { fields: [[:int8, :a],
404
465
  [:int8, :b, byte_align: 5],
405
- [:bit2, :c],
466
+ [:bit2, :c, onlyif: -> { a == 1}],
406
467
  [:int8, :d, byte_align: 3]] }
407
468
  BinData::Struct.new(params)
408
469
  }
409
470
 
410
471
  it "has #num_bytes" do
411
- obj.num_bytes.must_equal 10
472
+ _(obj.num_bytes).must_equal 7
412
473
  end
413
474
 
414
- it "reads" do
475
+ it "has #num_bytes with onlyif" do
476
+ obj.a = 1
477
+ _(obj.num_bytes).must_equal 10
478
+ end
479
+
480
+ it "reads with onlyif" do
415
481
  obj.read("\x01\x00\x00\x00\x00\x02\xc0\x00\x00\x04")
416
- obj.snapshot.must_equal({ a: 1, b: 2, c: 3, d: 4 })
482
+ _(obj.snapshot).must_equal({ a: 1, b: 2, c: 3, d: 4 })
483
+ end
484
+
485
+ it "reads without onlyif" do
486
+ obj.read("\x00\x00\x00\x00\x00\x02\x04")
487
+ _(obj.snapshot).must_equal({ a: 0, b: 2, d: 4 })
417
488
  end
418
489
 
419
- it "writes" do
490
+ it "writes with onlyif" do
420
491
  obj.assign(a: 1, b: 2, c: 3, d: 4)
421
- obj.to_binary_s.must_equal_binary "\x01\x00\x00\x00\x00\x02\xc0\x00\x00\x04"
492
+ _(obj.to_binary_s).must_equal_binary "\x01\x00\x00\x00\x00\x02\xc0\x00\x00\x04"
493
+ end
494
+
495
+ it "writes without onlyif" do
496
+ obj.assign(a: 0, b: 2, c: 3, d: 4)
497
+ _(obj.to_binary_s).must_equal_binary "\x00\x00\x00\x00\x00\x02\x04"
422
498
  end
423
499
 
424
500
  it "has correct offsets" do
425
- obj.a.rel_offset.must_equal 0
426
- obj.b.rel_offset.must_equal 5
427
- obj.c.rel_offset.must_equal 6
428
- obj.d.rel_offset.must_equal 9
501
+ _(obj.a.rel_offset).must_equal 0
502
+ _(obj.b.rel_offset).must_equal 5
503
+ _(obj.d.rel_offset).must_equal 6
429
504
  end
430
505
  end
431
506
 
@@ -435,6 +510,6 @@ describe BinData::Struct, "with dynamically named types" do
435
510
 
436
511
  obj = BinData::Struct.new(fields: [[:my_struct, :v]])
437
512
 
438
- obj.v.a.must_equal 3
513
+ _(obj.v.a).must_equal 3
439
514
  end
440
515
  end