bit-struct 0.13.5 → 0.17

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.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/History.txt +22 -1
  3. data/LICENSE +56 -0
  4. data/{README.txt → README.md} +94 -92
  5. data/Rakefile +56 -30
  6. data/examples/field-ripper.rb +1 -1
  7. data/examples/ip.rb +6 -6
  8. data/examples/longlong.rb +2 -2
  9. data/examples/md.rb +1 -1
  10. data/examples/modular-def.rb +2 -2
  11. data/examples/native.rb +3 -3
  12. data/examples/ping.rb +1 -1
  13. data/examples/raw.rb +1 -1
  14. data/examples/switch-endian.rb +2 -2
  15. data/examples/vector.rb +2 -2
  16. data/lib/bit-struct.rb +0 -11
  17. data/lib/bit-struct/bit-struct.rb +61 -143
  18. data/lib/bit-struct/char-field.rb +3 -3
  19. data/lib/bit-struct/field.rb +94 -0
  20. data/lib/bit-struct/fields.rb +13 -13
  21. data/lib/bit-struct/float-field.rb +4 -4
  22. data/lib/bit-struct/hex-octet-field.rb +3 -3
  23. data/lib/bit-struct/nested-field.rb +8 -8
  24. data/lib/bit-struct/octet-field.rb +4 -4
  25. data/lib/bit-struct/signed-field.rb +23 -28
  26. data/lib/bit-struct/text-field.rb +2 -2
  27. data/lib/bit-struct/unsigned-field.rb +24 -27
  28. data/lib/bit-struct/vector-field.rb +7 -7
  29. data/lib/bit-struct/vector.rb +24 -22
  30. data/lib/bit-struct/yaml.rb +22 -3
  31. data/test/test-endian.rb +5 -5
  32. data/test/test-vector.rb +6 -6
  33. data/test/test.rb +71 -46
  34. metadata +43 -69
  35. data/.gitignore +0 -3
  36. data/TODO +0 -20
  37. data/tasks/ann.rake +0 -80
  38. data/tasks/bones.rake +0 -20
  39. data/tasks/gem.rake +0 -201
  40. data/tasks/git.rake +0 -40
  41. data/tasks/notes.rake +0 -27
  42. data/tasks/post_load.rake +0 -34
  43. data/tasks/rdoc.rake +0 -51
  44. data/tasks/rubyforge.rake +0 -55
  45. data/tasks/setup.rb +0 -292
  46. data/tasks/spec.rake +0 -54
  47. data/tasks/svn.rake +0 -47
  48. data/tasks/test.rake +0 -40
  49. data/tasks/zentest.rake +0 -36
data/test/test-vector.rb CHANGED
@@ -1,7 +1,7 @@
1
- require 'test/unit'
1
+ require 'minitest/autorun'
2
2
  require 'bit-struct'
3
3
 
4
- class Test_Vector < Test::Unit::TestCase
4
+ class Test_Vector < Minitest::Test
5
5
  class Packet < BitStruct
6
6
  unsigned :stuff, 32, "whatever"
7
7
 
@@ -9,20 +9,20 @@ class Test_Vector < Test::Unit::TestCase
9
9
  unsigned :x, 16
10
10
  signed :y, 32
11
11
  end
12
-
12
+
13
13
  unsigned :other, 16, "other stuff"
14
14
  end
15
-
15
+
16
16
  attr_reader :pkt
17
17
 
18
18
  def setup
19
19
  @pkt = Packet.new
20
20
  end
21
-
21
+
22
22
  def test_length
23
23
  assert_equal(Packet.round_byte_length, pkt.length)
24
24
  end
25
-
25
+
26
26
  def test_writers
27
27
  assert_equal(pkt.v[2].x, 0)
28
28
  v = pkt.v
data/test/test.rb CHANGED
@@ -1,9 +1,7 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'test/unit'
1
+ require 'minitest/autorun'
4
2
  require 'bit-struct'
5
3
 
6
- class Test_BitStruct < Test::Unit::TestCase
4
+ class Test_BitStruct < Minitest::Test
7
5
 
8
6
  class T1 < BitStruct
9
7
  unsigned :foo, 8
@@ -12,18 +10,18 @@ class Test_BitStruct < Test::Unit::TestCase
12
10
  class T2 < BitStruct
13
11
  unsigned :bar, 8
14
12
  end
15
-
13
+
16
14
  class Rest < BitStruct
17
15
  unsigned :zap, 8
18
16
  rest :body, T2
19
17
  end
20
-
18
+
21
19
  class NestedPart < BitStruct
22
20
  unsigned :x, 5
23
21
  unsigned :y, 3, :default => 2
24
22
  char :s, 5*8
25
23
  end
26
-
24
+
27
25
  class Container < BitStruct
28
26
  nest :n1, NestedPart, :default => NestedPart.new(:x=>1, :s=>"deflt")
29
27
  nest :n2, NestedPart
@@ -68,7 +66,7 @@ class Test_BitStruct < Test::Unit::TestCase
68
66
  float next_name, 64, :format => "%10.5f"
69
67
 
70
68
  octets next_name, 32, :default => "192.168.1.123"
71
-
69
+
72
70
  hex_octets next_name, 48, :default => "ab:cd:ef:01:23:45"
73
71
 
74
72
  unsigned next_name, 1
@@ -78,14 +76,14 @@ class Test_BitStruct < Test::Unit::TestCase
78
76
  signed next_name, 7, :fixed => 1000 # unaligned!
79
77
 
80
78
  char next_name, 24
81
-
79
+
82
80
  rest :bs_body
83
-
81
+
84
82
  INITIAL_VALUES = {
85
83
  f1 => 1234,
86
84
  f2 => 5678
87
85
  }
88
-
86
+
89
87
  INITIAL_VALUES.each do |f, v|
90
88
  initial_value.send "#{f}=", v
91
89
  end
@@ -108,11 +106,11 @@ class Test_BitStruct < Test::Unit::TestCase
108
106
  unsigned next_name, 8
109
107
 
110
108
  unsigned next_name, 1
111
-
109
+
112
110
  rest :bs1_body
113
111
 
114
112
  end
115
-
113
+
116
114
  def setup
117
115
  srand(767343)
118
116
  @bs = BS.new
@@ -129,7 +127,7 @@ class Test_BitStruct < Test::Unit::TestCase
129
127
  bs.fields.each do |field|
130
128
  iv = initial_values && initial_values[field.name]
131
129
  iv ||= field.default
132
-
130
+
133
131
  if iv
134
132
  case field
135
133
  when BitStruct::FloatField
@@ -143,21 +141,21 @@ class Test_BitStruct < Test::Unit::TestCase
143
141
  end
144
142
  end
145
143
  end
146
-
144
+
147
145
  def test_init_with_value
148
146
  randomize(@bs_1)
149
147
 
150
148
  b = BS_1.new(@bs_1)
151
149
  assert_equal(@bs_1, b, "Initialize with argument failed.")
152
-
150
+
153
151
  c = BS_1.new(b)
154
152
  assert_equal(@bs_1, c, "Initialize with argument failed.")
155
-
153
+
156
154
  b1 = BS_1.new("")
157
155
  b2 = BS_1.new(nil)
158
156
  assert_equal(b1, b2, "Initialize with short argument failed.")
159
157
  end
160
-
158
+
161
159
  def test_init_with_hash
162
160
  randomize(@bs_1)
163
161
 
@@ -169,25 +167,25 @@ class Test_BitStruct < Test::Unit::TestCase
169
167
  b = BS_1.new(h)
170
168
  assert_equal(@bs_1, b, "Initialize with argument failed.")
171
169
  end
172
-
170
+
173
171
  def test_join
174
172
  assert_equal(@bs+@bs_1, BitStruct.join(@bs,@bs_1))
175
173
  assert_equal(@bs+@bs_1, [@bs,@bs_1].join(""))
176
174
  end
177
-
175
+
178
176
  def test_parse
179
177
  orig = @testers
180
178
  orig.each do |bs|
181
179
  randomize(bs)
182
180
  end
183
-
181
+
184
182
  data = BitStruct.join(orig)
185
183
  round_trip = BitStruct.parse(data, orig.map{|bs|bs.class})
186
184
  orig.zip(round_trip) do |bs1, bs2|
187
185
  assert_equal(bs1, bs2)
188
186
  end
189
187
  end
190
-
188
+
191
189
  def test_closed
192
190
  assert_raises(BitStruct::ClosedClassError) do
193
191
  BS.class_eval do
@@ -195,7 +193,7 @@ class Test_BitStruct < Test::Unit::TestCase
195
193
  end
196
194
  end
197
195
  end
198
-
196
+
199
197
  def test_rest
200
198
  len0 = @bs_1.length
201
199
 
@@ -206,16 +204,16 @@ class Test_BitStruct < Test::Unit::TestCase
206
204
  @bs_1.bs1_body = "b"*60
207
205
  assert_equal("b"*60, @bs_1.bs1_body)
208
206
  assert_equal(len0+60, @bs_1.length)
209
-
207
+
210
208
  @bs_1.bs1_body = "c"*40
211
209
  assert_equal("c"*40, @bs_1.bs1_body)
212
210
  assert_equal(len0+40, @bs_1.length)
213
-
211
+
214
212
  @bs_1.bs1_body = ""
215
213
  assert_equal("", @bs_1.bs1_body)
216
214
  assert_equal(len0, @bs_1.length)
217
215
  end
218
-
216
+
219
217
  def test_rest_with_class
220
218
  r = Rest.new
221
219
  t2 = T2.new
@@ -223,38 +221,44 @@ class Test_BitStruct < Test::Unit::TestCase
223
221
  r.body = t2
224
222
  assert_equal(123, r.body.bar)
225
223
  end
226
-
224
+
225
+ def test_rest_with_class_constructed
226
+ r = Rest.new(['0011'].pack('H*'))
227
+ assert_equal(0x00, r.zap)
228
+ assert_equal(0x11, r.body.bar)
229
+ end
230
+
227
231
  def test_nest
228
232
  cont = Container.new
229
233
  n1 = cont.n1
230
-
234
+
231
235
  assert_equal(1, n1.x)
232
236
  assert_equal(2, n1.y)
233
237
  assert_equal("deflt", n1.s)
234
-
238
+
235
239
  n1.sub(/./, " ")
236
240
 
237
241
  assert_equal(1, n1.x)
238
242
  assert_equal(2, n1.y)
239
243
  assert_equal("deflt", n1.s)
240
-
244
+
241
245
  n1 = cont.n1
242
246
  n2 = cont.n2
243
-
247
+
244
248
  assert_equal(0, n2.x)
245
249
  assert_equal(2, n2.y)
246
250
  assert_equal("\0"*5, n2.s)
247
-
251
+
248
252
  n = NestedPart.new(:x=>4, :y=>1, :s=>"qwert")
249
253
  cont.n1 = n
250
254
 
251
255
  assert_equal(4, cont.n1.x)
252
256
  assert_equal(1, cont.n1.y)
253
257
  assert_equal("qwert", cont.n1.s)
254
-
258
+
255
259
  assert_raises(ArgumentError) {cont.n2 = Container.new}
256
260
  end
257
-
261
+
258
262
  def test_overflow
259
263
  ov = Overflow.new
260
264
  empty = ov.dup
@@ -289,21 +293,21 @@ class Test_BitStruct < Test::Unit::TestCase
289
293
 
290
294
  repeat_access_test(@bs_1, 10)
291
295
  end
292
-
296
+
293
297
  def test_initial_value
294
298
  bs = @bs
295
299
  bs.class::INITIAL_VALUES.each do |f,v|
296
300
  assert_equal(v, bs.send(f), "In #{f} of a #{bs.class}")
297
301
  end
298
302
  end
299
-
303
+
300
304
  def test_inherited_initial_value
301
305
  bs = @bs_1
302
306
  bs.class::INITIAL_VALUES.each do |f,v|
303
307
  assert_equal(v, bs.send(f), "In #{f} of a #{bs.class}")
304
308
  end
305
309
  end
306
-
310
+
307
311
  def test_to_h
308
312
  h = @bs_1.to_h(:convert_keys => :to_s)
309
313
  field_names = @bs_1.fields.map{|f|f.name.to_s}
@@ -312,7 +316,28 @@ class Test_BitStruct < Test::Unit::TestCase
312
316
  assert_equal(@bs_1.send(name), h[name])
313
317
  end
314
318
  end
315
-
319
+
320
+ def test_to_a_exclude_rest
321
+ include_rest = false
322
+ a = @bs_1.to_a(include_rest)
323
+ field_names = @bs_1.fields.map{|f|f.name.to_s}
324
+ assert_equal(a.size, field_names.size)
325
+ field_names.each_with_index do |name, i|
326
+ assert_equal(@bs_1.send(name), a[i])
327
+ end
328
+ end
329
+
330
+ def test_to_a
331
+ include_rest = true
332
+ a = @bs_1.to_a(include_rest)
333
+ field_names = @bs_1.fields.map{|f|f.name.to_s}
334
+ field_names << @bs_1.rest_field.name
335
+ assert_equal(a.size, field_names.size)
336
+ field_names.each_with_index do |name, i|
337
+ assert_equal(@bs_1.send(name), a[i])
338
+ end
339
+ end
340
+
316
341
  def test_format_option
317
342
  formatted_fields = @bs.fields.select {|f|f.format}
318
343
  formatted_fields.each do |f|
@@ -320,18 +345,18 @@ class Test_BitStruct < Test::Unit::TestCase
320
345
  assert_equal(f.format % val, f.inspect_in_object(@bs, {}))
321
346
  end
322
347
  end
323
-
348
+
324
349
  def test_yaml
325
350
  assert_equal(@bs_1, YAML.load(@bs_1.to_yaml))
326
351
  end
327
-
352
+
328
353
  def test_field_by_name
329
354
  name = :f007
330
355
  f = @bs.field_by_name(name)
331
356
  assert(f)
332
357
  assert_equal(f.name, name)
333
358
  end
334
-
359
+
335
360
  #--------
336
361
  def repeat_access_test(bs, n)
337
362
  last_set_value = {}
@@ -352,7 +377,7 @@ class Test_BitStruct < Test::Unit::TestCase
352
377
  begin
353
378
  assert_equal(lsv2, bs.send(f2.name))
354
379
  rescue Test::Unit::AssertionFailedError => ex
355
- msg =
380
+ msg =
356
381
  "In #{f2.inspect} after setting #{field.inspect} to" +
357
382
  " #{last_set_value[field].inspect}"
358
383
  raise ex, msg + "\n" + ex.message, ex.backtrace
@@ -367,7 +392,7 @@ class Test_BitStruct < Test::Unit::TestCase
367
392
 
368
393
  assert_equal(start_length, finish_length, "Length differs after test!")
369
394
  end
370
-
395
+
371
396
  def randomize(bs)
372
397
  bs.fields.each do |f|
373
398
  randomize_field(bs, f)
@@ -413,13 +438,13 @@ class Test_BitStruct < Test::Unit::TestCase
413
438
  value = s * (field.length/8)
414
439
  bs.send "#{field.name}=", value
415
440
  last_set_value = value
416
-
441
+
417
442
  when BitStruct::TextField
418
443
  s = (rand(64)+32).chr
419
444
  value = s * rand(field.length*2/8)
420
445
  bs.send "#{field.name}=", value
421
446
  last_set_value = s * [field.length/8, value.length].min
422
-
447
+
423
448
  when BitStruct::FloatField
424
449
  value = rand(2**30)
425
450
  bs.send "#{field.name}=", value
@@ -427,7 +452,7 @@ class Test_BitStruct < Test::Unit::TestCase
427
452
 
428
453
  else raise
429
454
  end
430
-
455
+
431
456
  return last_set_value
432
457
  end
433
458
  end
metadata CHANGED
@@ -1,44 +1,29 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: bit-struct
3
- version: !ruby/object:Gem::Version
4
- version: 0.13.5
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.17'
5
5
  platform: ruby
6
- authors:
6
+ authors:
7
7
  - Joel VanderWerf
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
-
12
- date: 2009-07-21 00:00:00 -07:00
13
- default_executable:
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
16
- name: bones
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
20
- requirements:
21
- - - ">="
22
- - !ruby/object:Gem::Version
23
- version: 2.5.1
24
- version:
25
- description: |
26
- Library for packed binary data stored in ruby Strings. Useful for accessing fields in network packets and binary files.
27
-
11
+ date: 2021-04-20 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Library for packed binary data stored in ruby Strings. Useful for accessing
14
+ fields in network packets and binary files.
28
15
  email: vjoel@users.sourceforge.net
29
16
  executables: []
30
-
31
17
  extensions: []
32
-
33
- extra_rdoc_files:
18
+ extra_rdoc_files:
34
19
  - History.txt
35
- - README.txt
36
- files:
37
- - .gitignore
20
+ - README.md
21
+ - LICENSE
22
+ files:
38
23
  - History.txt
39
- - README.txt
24
+ - LICENSE
25
+ - README.md
40
26
  - Rakefile
41
- - TODO
42
27
  - examples/ara-player-data.rb
43
28
  - examples/bignum.rb
44
29
  - examples/bits.rb
@@ -63,6 +48,7 @@ files:
63
48
  - lib/bit-struct.rb
64
49
  - lib/bit-struct/bit-struct.rb
65
50
  - lib/bit-struct/char-field.rb
51
+ - lib/bit-struct/field.rb
66
52
  - lib/bit-struct/fields.rb
67
53
  - lib/bit-struct/float-field.rb
68
54
  - lib/bit-struct/hex-octet-field.rb
@@ -75,52 +61,40 @@ files:
75
61
  - lib/bit-struct/vector-field.rb
76
62
  - lib/bit-struct/vector.rb
77
63
  - lib/bit-struct/yaml.rb
78
- - tasks/ann.rake
79
- - tasks/bones.rake
80
- - tasks/gem.rake
81
- - tasks/git.rake
82
- - tasks/notes.rake
83
- - tasks/post_load.rake
84
- - tasks/rdoc.rake
85
- - tasks/rubyforge.rake
86
- - tasks/setup.rb
87
- - tasks/spec.rake
88
- - tasks/svn.rake
89
- - tasks/test.rake
90
- - tasks/zentest.rake
91
64
  - test/test-endian.rb
92
65
  - test/test-vector.rb
93
66
  - test/test.rb
94
- has_rdoc: true
95
- homepage: http://rubyforge.org/projects/bit-struct/
96
- licenses: []
97
-
98
- post_install_message:
99
- rdoc_options:
100
- - --main
101
- - README.txt
102
- require_paths:
67
+ homepage: https://github.com/vjoel/bit-struct
68
+ licenses:
69
+ - Ruby
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options:
73
+ - "--quiet"
74
+ - "--line-numbers"
75
+ - "--inline-source"
76
+ - "--title"
77
+ - BitStruct
78
+ - "--main"
79
+ - README.md
80
+ require_paths:
103
81
  - lib
104
- required_ruby_version: !ruby/object:Gem::Requirement
105
- requirements:
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
106
84
  - - ">="
107
- - !ruby/object:Gem::Version
108
- version: "0"
109
- version:
110
- required_rubygems_version: !ruby/object:Gem::Requirement
111
- requirements:
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
112
89
  - - ">="
113
- - !ruby/object:Gem::Version
114
- version: "0"
115
- version:
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
116
92
  requirements: []
117
-
118
- rubyforge_project: bit-struct
119
- rubygems_version: 1.3.5
120
- signing_key:
121
- specification_version: 3
93
+ rubygems_version: 3.2.15
94
+ signing_key:
95
+ specification_version: 4
122
96
  summary: Library for packed binary data stored in ruby Strings
123
- test_files:
97
+ test_files:
124
98
  - test/test-endian.rb
125
- - test/test.rb
126
99
  - test/test-vector.rb
100
+ - test/test.rb