bit-struct 0.13.5 → 0.17

Sign up to get free protection for your applications and to get access to all the features.
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