BitStructEx 0.0.64 → 0.0.65

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.
metadata CHANGED
@@ -3,7 +3,7 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: BitStructEx
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.64
6
+ version: 0.0.65
7
7
  date: 2006-04-13 00:00:00 +02:00
8
8
  summary: Simple DSL for defining bit-based structures on byte data.
9
9
  require_paths:
@@ -28,20 +28,12 @@ cert_chain:
28
28
  authors:
29
29
  - The.French.DJ
30
30
  files:
31
- - lib/ruby/rake/version.rb
32
31
  - src/ruby/bit_struct/bit_slicer.rb
33
32
  - src/ruby/bit_struct/field.rb
34
33
  - src/ruby/bit_struct/nested.rb
35
34
  - src/ruby/bit_struct/struct_base.rb
36
35
  - src/ruby/bit_struct/text.rb
37
36
  - src/ruby/bit_struct/unsigned.rb
38
- - test/ruby/runner.rb
39
- - test/ruby/bit_struct/test_bit_slicer.rb
40
- - test/ruby/bit_struct/test_struct_base.rb
41
- - test/ruby/bit_struct/test_text.rb
42
- - test/ruby/bit_struct/test_text_struct.rb
43
- - Rakefile
44
- - Version
45
37
  test_files: []
46
38
 
47
39
  rdoc_options: []
data/Rakefile DELETED
@@ -1,55 +0,0 @@
1
-
2
- require 'rake/clean'
3
- require 'rake/gempackagetask'
4
- require 'rake/version'
5
-
6
-
7
- PROJECT_NAME='BitStructEx'
8
- PROJECT_FORGE_ID='bit-struct-ex'
9
-
10
- SRC_DIR='src/ruby'
11
- TEST_DIR='test/ruby'
12
-
13
- PKG_VERSION = Rake::Version.new
14
- PKG_FILES = FileList[
15
- 'lib/**/*.rb',
16
- 'src/**/*.rb',
17
- 'test/**/*.rb',
18
- 'Rakefile',
19
- 'Version'
20
- ]
21
-
22
- CLOBBER.include 'pkg'
23
-
24
-
25
- desc "Run all tests, update build number and build gem"
26
- task :default => [ :run_tests, :increment_build_number, :build_gem ]
27
-
28
- desc "Execute the unit tests using the specialized test runner"
29
- task :run_tests do
30
- sh "ruby -I#{TEST_DIR} #{TEST_DIR}/runner.rb --verbose=v"
31
- end
32
-
33
- desc "Increment the build number and upate the Version file"
34
- task :increment_build_number => [ :run_tests ] do
35
- src = Dir.glob "#{SRC_DIR}/**/*"
36
- test = Dir.glob "#{TEST_DIR}/**/*"
37
- files = src + test
38
- target = 'Version'
39
- unless uptodate?( target, files )
40
- new_version = PKG_VERSION.increment( :build )
41
- puts "Version: #{new_version}"
42
- end
43
- end
44
-
45
- desc "Build the gem package"
46
- task :build_gem => [ :run_tests, :define_gem, :gem ]
47
-
48
- desc "Define the Gem specification and associated task(s)"
49
- task :define_gem do
50
- PKG_SPEC = eval IO.read( 'GemSpec' ), binding
51
- Rake::GemPackageTask.new( PKG_SPEC ) do |pkg|
52
- pkg.need_zip = true
53
- pkg.need_tar = true
54
- end
55
- end
data/Version DELETED
@@ -1 +0,0 @@
1
- 0.0.64
@@ -1,71 +0,0 @@
1
- module Rake
2
-
3
- #
4
- # Simple helper class for maintaining a Version number within a Rakefile.
5
- # Provides an easy way increase the version tags. Supports purely numeric
6
- # version tags only.
7
- #
8
- class Version
9
-
10
- def self.increment( symbol )
11
- Version.new.increment symbol
12
- end
13
-
14
- def initialize( config = {} )
15
- @config = config
16
- @config[ :version_file ] ||= 'Version'
17
- @config[ :version_regex ] ||= /\A(\d+)\.(\d+).(\d+)\Z/
18
- @config[ :version_tags ] ||= [ :release, :version, :build ]
19
- @tag_values = {}
20
- read
21
- end
22
-
23
- def increment( symbol )
24
- raise "Unknown tag: #{symbol}" unless version_tags.include? symbol
25
- read
26
- @tag_values[ symbol ] += 1
27
- write
28
- current_version
29
- end
30
-
31
- def current_version
32
- version_tags.map { |tag| @tag_values[ tag ] }.join( '.' )
33
- end
34
-
35
- alias version current_version
36
-
37
- alias to_s version
38
-
39
- private
40
-
41
- def read
42
- version = IO.read version_file
43
- raise "Error reading #{version_file}" unless version_regex =~ version
44
- version_tags.each_index do |idx|
45
- @tag_values[ version_tags[ idx ] ] = Regexp.last_match[ 1 + idx ].to_i
46
- end
47
- self
48
- end
49
-
50
- def write
51
- File.open( version_file, 'w' ) do |file|
52
- file.write current_version
53
- end
54
- self
55
- end
56
-
57
- def version_file
58
- @config[ :version_file ]
59
- end
60
-
61
- def version_regex
62
- @config[ :version_regex ]
63
- end
64
-
65
- def version_tags
66
- @config[ :version_tags ]
67
- end
68
-
69
- end
70
-
71
- end
@@ -1,299 +0,0 @@
1
-
2
- require 'test/unit'
3
-
4
- require 'bit_struct/bit_slicer'
5
-
6
-
7
-
8
- class TestBitSlicer < Test::Unit::TestCase
9
-
10
- def test_endianess
11
- slicer = BitStruct::BitSlicer.new 0, 16, BitStruct::BitSlicer::MOTOROLA
12
- slicer.data = test_data
13
- assert_equal '0x01 0x23 0x45 0x67 0x89', slicer.data.hexify
14
- end
15
-
16
- def test_right_shifted
17
- assert_equal '34', BitStruct::BitSlicer.right_shifted( 0x12, 0x34, 0 ).hexify
18
- assert_equal '23', BitStruct::BitSlicer.right_shifted( 0x12, 0x34, 4 ).hexify
19
- assert_equal '12', BitStruct::BitSlicer.right_shifted( 0x12, 0x34, 8 ).hexify
20
- end
21
-
22
- def test_left_shifted
23
- assert_equal '12', BitStruct::BitSlicer.left_shifted( 0x12, 0x34, 0 ).hexify
24
- assert_equal '23', BitStruct::BitSlicer.left_shifted( 0x12, 0x34, 4 ).hexify
25
- assert_equal '34', BitStruct::BitSlicer.left_shifted( 0x12, 0x34, 8 ).hexify
26
-
27
- assert_equal '11000011', BitStruct::BitSlicer.left_shifted( 0xF0, 0xF0, 2 ).binarize
28
- end
29
-
30
- def test_first_byte
31
- assert_equal 4, slicer( 0, 1 ).first_byte
32
- assert_equal 4, slicer( 0, 7 ).first_byte
33
- assert_equal 4, slicer( 0, 8 ).first_byte
34
- assert_equal 3, slicer( 0, 12 ).first_byte
35
- assert_equal 3, slicer( 0, 16 ).first_byte
36
- assert_equal 3, slicer( 2, 8 ).first_byte
37
- assert_equal 4, slicer( 2, 2 ).first_byte
38
- assert_equal 2, slicer( 2, 16 ).first_byte
39
- assert_equal 2, slicer( 4, 16 ).first_byte
40
- assert_equal 2, slicer( 6, 16 ).first_byte
41
- assert_equal 2, slicer( 7, 16 ).first_byte
42
- assert_equal 2, slicer( 8, 16 ).first_byte
43
- assert_equal 1, slicer( 9, 16 ).first_byte
44
- assert_equal 1, slicer( 15, 16 ).first_byte
45
- assert_equal 1, slicer( 16, 16 ).first_byte
46
- assert_equal 0, slicer( 17, 16 ).first_byte
47
- end
48
-
49
- def test_last_byte
50
- assert_equal 4, slicer( 0, 16 ).last_byte
51
- assert_equal 4, slicer( 2, 16 ).last_byte
52
- assert_equal 4, slicer( 4, 16 ).last_byte
53
- assert_equal 4, slicer( 6, 16 ).last_byte
54
- assert_equal 4, slicer( 7, 16 ).last_byte
55
- assert_equal 3, slicer( 8, 16 ).last_byte
56
- assert_equal 3, slicer( 9, 16 ).last_byte
57
- assert_equal 3, slicer( 15, 16 ).last_byte
58
- assert_equal 2, slicer( 16, 16 ).last_byte
59
- assert_equal 2, slicer( 17, 16 ).last_byte
60
- end
61
-
62
- def test_length_in_bytes
63
- assert_equal 1, slicer( 0, 1 ).length_in_bytes
64
- assert_equal 1, slicer( 0, 4 ).length_in_bytes
65
- assert_equal 1, slicer( 0, 8 ).length_in_bytes
66
- assert_equal 2, slicer( 0, 9 ).length_in_bytes
67
- assert_equal 2, slicer( 0, 14 ).length_in_bytes
68
- assert_equal 2, slicer( 0, 16 ).length_in_bytes
69
- assert_equal 3, slicer( 0, 20 ).length_in_bytes
70
-
71
- assert_equal 1, slicer( 4, 1 ).length_in_bytes
72
- assert_equal 1, slicer( 4, 4 ).length_in_bytes
73
- assert_equal 1, slicer( 5, 8 ).length_in_bytes
74
- assert_equal 2, slicer( 6, 9 ).length_in_bytes
75
- assert_equal 2, slicer( 7, 14 ).length_in_bytes
76
- assert_equal 2, slicer( 7, 16 ).length_in_bytes
77
- assert_equal 3, slicer( 8, 20 ).length_in_bytes
78
- end
79
-
80
- def test_insert_length_in_bytes
81
- assert_equal 1, slicer( 0, 1 ).insert_length_in_bytes
82
- assert_equal 1, slicer( 0, 4 ).insert_length_in_bytes
83
- assert_equal 1, slicer( 0, 8 ).insert_length_in_bytes
84
- assert_equal 2, slicer( 0, 9 ).insert_length_in_bytes
85
- assert_equal 2, slicer( 0, 14 ).insert_length_in_bytes
86
- assert_equal 2, slicer( 0, 16 ).insert_length_in_bytes
87
- assert_equal 3, slicer( 0, 20 ).insert_length_in_bytes
88
-
89
- assert_equal 1, slicer( 8, 8 ).insert_length_in_bytes
90
-
91
- assert_equal 1, slicer( 4, 1 ).insert_length_in_bytes
92
- assert_equal 1, slicer( 4, 4 ).insert_length_in_bytes
93
- assert_equal 2, slicer( 5, 8 ).insert_length_in_bytes
94
- assert_equal 2, slicer( 6, 9 ).insert_length_in_bytes
95
- assert_equal 3, slicer( 7, 14 ).insert_length_in_bytes
96
- assert_equal 3, slicer( 7, 16 ).insert_length_in_bytes
97
- assert_equal 3, slicer( 8, 20 ).insert_length_in_bytes
98
- assert_equal 3, slicer( 8, 24 ).insert_length_in_bytes
99
- assert_equal 4, slicer( 8, 25 ).insert_length_in_bytes
100
- assert_equal 3, slicer( 9, 16 ).insert_length_in_bytes
101
- end
102
-
103
- def test_highest_byte_mask
104
- assert_equal '00111111', slicer( 2, 22 ).highest_byte_mask.binarize
105
- assert_equal '00111111', slicer( 0, 22 ).highest_byte_mask.binarize
106
- assert_equal '11111111', slicer( 0, 16 ).highest_byte_mask.binarize
107
- assert_equal '00111111', slicer( 2, 14 ).highest_byte_mask.binarize
108
- assert_equal '11111111', slicer( 2, 16 ).highest_byte_mask.binarize
109
- assert_equal '11111111', slicer( 4, 16 ).highest_byte_mask.binarize
110
- assert_equal '11111111', slicer( 6, 16 ).highest_byte_mask.binarize
111
- assert_equal '11111111', slicer( 7, 16 ).highest_byte_mask.binarize
112
- assert_equal '11111111', slicer( 8, 16 ).highest_byte_mask.binarize
113
- assert_equal '11111111', slicer( 9, 16 ).highest_byte_mask.binarize
114
- assert_equal '11111111', slicer( 15, 16 ).highest_byte_mask.binarize
115
- assert_equal '11111111', slicer( 16, 16 ).highest_byte_mask.binarize
116
- assert_equal '11111111', slicer( 17, 16 ).highest_byte_mask.binarize
117
- end
118
-
119
- def test_insert_first_byte_mask
120
- assert_equal '11111111', slicer( 0, 8 ).insert_first_byte_mask.binarize
121
- assert_equal '00000011', slicer( 2, 8 ).insert_first_byte_mask.binarize
122
- assert_equal '00001111', slicer( 4, 8 ).insert_first_byte_mask.binarize
123
- assert_equal '00111111', slicer( 6, 8 ).insert_first_byte_mask.binarize
124
- assert_equal '11111111', slicer( 8, 8 ).insert_first_byte_mask.binarize
125
- assert_equal '00000011', slicer( 10, 8 ).insert_first_byte_mask.binarize
126
- end
127
-
128
- def test_insert_last_byte_mask
129
- assert_equal '11111111', slicer( 0, 8 ).insert_last_byte_mask.binarize
130
- assert_equal '11111100', slicer( 2, 8 ).insert_last_byte_mask.binarize
131
- assert_equal '11110000', slicer( 4, 8 ).insert_last_byte_mask.binarize
132
- assert_equal '11000000', slicer( 6, 8 ).insert_last_byte_mask.binarize
133
- assert_equal '11111111', slicer( 8, 8 ).insert_last_byte_mask.binarize
134
- end
135
-
136
- def test_masked_last_byte
137
- slicer = slicer( 12, 24 )
138
- assert_equal '00000001', slicer.data[ slicer.first_byte ].binarize
139
- assert_equal '11110000', slicer.merge_first_byte_mask.binarize
140
- assert_equal '00000000', slicer.masked_first_byte.binarize
141
-
142
- assert_equal '01100111', slicer.data[ slicer.last_byte ].binarize
143
- assert_equal '00001111', slicer.merge_last_byte_mask.binarize
144
- assert_equal '00000111', slicer.masked_last_byte.binarize
145
- end
146
-
147
- def test_required_shift
148
- assert_equal 0, slicer( 0, 16 ).required_shift
149
- assert_equal 2, slicer( 2, 16 ).required_shift
150
- assert_equal 4, slicer( 4, 16 ).required_shift
151
- assert_equal 6, slicer( 6, 16 ).required_shift
152
- assert_equal 0, slicer( 8, 4 ).required_shift
153
- assert_equal 0, slicer( 8, 16 ).required_shift
154
- assert_equal 2, slicer( 10, 16 ).required_shift
155
- end
156
-
157
- def test_get_raw_bytes
158
- # test_data = [ 0x01, 0x23, 0x45, 0x67, 0x89 ].pack( 'C*' )
159
-
160
- assert_equal '0x89', slicer( 0, 8 ).get_raw_bytes.hexify
161
- assert_equal '0x67 0x89', slicer( 0, 16 ).get_raw_bytes.hexify
162
- assert_equal '0x45 0x67 0x89', slicer( 0, 24 ).get_raw_bytes.hexify
163
-
164
- assert_equal '0x45 0x67 0x89', slicer( 4, 16 ).get_raw_bytes.hexify
165
- assert_equal '0x45 0x67 0x89', slicer( 4, 20 ).get_raw_bytes.hexify
166
- assert_equal '0x23 0x45 0x67 0x89', slicer( 6, 20 ).get_raw_bytes.hexify
167
-
168
- assert_equal '0x45 0x67', slicer( 12, 8 ).get_raw_bytes.hexify
169
-
170
- assert_equal '0x67', slicer( 8, 4 ).get_raw_bytes.hexify
171
-
172
- assert_equal '0x45 0x67', slicer( 8, 16 ).get_raw_bytes.hexify
173
- assert_equal '0x23 0x45', slicer( 16, 16 ).get_raw_bytes.hexify
174
- end
175
-
176
- def test_shift_bytes_right
177
- assert_equal '0x01 0x23 0x45', BitStruct::BitSlicer.shift_bytes_right( [ 0x12, 0x34, 0x56 ], 4 ).hexify
178
- assert_equal '0x00 0x12 0x34', BitStruct::BitSlicer.shift_bytes_right( [ 0x12, 0x34, 0x56 ], 8 ).hexify
179
- end
180
-
181
- def test_shift_bytes_left
182
- assert_equal '0x23 0x45 0x60', BitStruct::BitSlicer.shift_bytes_left( [ 0x12, 0x34, 0x56 ], 4 ).hexify
183
- assert_equal '0x34 0x56 0x00', BitStruct::BitSlicer.shift_bytes_left( [ 0x12, 0x34, 0x56 ], 8 ).hexify
184
- end
185
-
186
- def test_get_bytes
187
- assert_equal '0x89', slicer( 0, 8 ).get_bytes.hexify
188
- assert_equal '0x09', slicer( 0, 4 ).get_bytes.hexify
189
- assert_equal '0x08', slicer( 4, 4 ).get_bytes.hexify
190
-
191
- assert_equal '0x07', slicer( 8, 4 ).get_bytes.hexify
192
- assert_equal '0x06', slicer( 12, 4 ).get_bytes.hexify
193
-
194
- assert_equal '0x67 0x89', slicer( 4, 8 ).get_raw_bytes.hexify
195
- assert_equal '0x06 0x78', BitStruct::BitSlicer.shift_bytes_right( [ 0x67, 0x89 ], 4 ).hexify
196
- assert_equal '0x78', slicer( 4, 8 ).get_bytes.hexify
197
-
198
- assert_equal '0x45 0x67', slicer( 12, 8 ).get_raw_bytes.hexify
199
- assert_equal '0x04 0x56', BitStruct::BitSlicer.shift_bytes_right( [ 0x45, 0x67 ], 4 ).hexify
200
- assert_equal '0x56', slicer( 12, 8 ).get_bytes.hexify
201
-
202
- assert_equal '0x67 0x89', slicer( 0, 16 ).get_bytes.hexify
203
- assert_equal '0x45 0x67 0x89', slicer( 0, 24 ).get_bytes.hexify
204
- assert_equal '0x05 0x67 0x89', slicer( 0, 22 ).get_bytes.hexify
205
-
206
- assert_equal '0x45 0x67', slicer( 8, 16 ).get_bytes.hexify
207
- assert_equal '0x23 0x45', slicer( 16, 16 ).get_bytes.hexify
208
-
209
- assert_equal '0x23 0x45 0x67', slicer( 12, 16 ).get_raw_bytes.hexify
210
- assert_equal '0x34 0x56', slicer( 12, 16 ).get_bytes.hexify
211
- assert_equal '0x04 0x56', slicer( 12, 12 ).get_bytes.hexify
212
- assert_equal '0x56', slicer( 12, 8 ).get_bytes.hexify
213
- assert_equal '0x16', slicer( 12, 6 ).get_bytes.hexify
214
- assert_equal '0x06', slicer( 12, 4 ).get_bytes.hexify
215
- assert_equal '0x02', slicer( 12, 2 ).get_bytes.hexify
216
- end
217
-
218
- def test_set_bytes
219
- slicer = slicer( 0, 8 )
220
- assert_equal 4, slicer.first_byte
221
- assert_equal 4, slicer.last_byte
222
- assert_equal 1, slicer.length_in_bytes
223
- assert_equal 1, slicer.insert_length_in_bytes
224
- assert_equal 4, slicer.first_byte
225
- assert_equal 4, slicer.last_byte
226
- # assert_equal '0x01 0x23 0x45 0x67 0xcd', slicer.set_bytes( [ 0xCD ] ).hexify
227
-
228
- slicer = slicer( 8, 8 )
229
- assert_equal 3, slicer.first_byte
230
- assert_equal 3, slicer.last_byte
231
- assert_equal 1, slicer.length_in_bytes
232
- assert_equal 1, slicer.insert_length_in_bytes
233
- # assert_equal '0x01 0x23 0x45 0xcd 0x89', slicer.set_bytes( [ 0xCD ] ).hexify
234
-
235
- slicer = slicer( 4, 8 )
236
- assert_equal 3, slicer.first_byte
237
- assert_equal 4, slicer.last_byte
238
- assert_equal 1, slicer.length_in_bytes
239
- assert_equal 2, slicer.insert_length_in_bytes
240
- # assert_equal '0x01 0x23 0x45 0x6c 0xd9', slicer.set_bytes( [ 0xCD ] ).hexify
241
-
242
- slicer = slicer( 4, 2 )
243
- assert_equal 4, slicer.first_byte
244
- assert_equal 4, slicer.last_byte
245
- assert_equal 1, slicer.length_in_bytes
246
- assert_equal 1, slicer.insert_length_in_bytes
247
-
248
- assert_equal '00111111', slicer.insert_first_byte_mask.binarize
249
- assert_equal '11110000', slicer.insert_last_byte_mask.binarize
250
-
251
- assert_equal '11000000', slicer.merge_first_byte_mask.binarize
252
- assert_equal '00001111', slicer.merge_last_byte_mask.binarize
253
-
254
- assert_equal '10000000', slicer.masked_first_byte.binarize
255
- assert_equal '00001001', slicer.masked_last_byte.binarize
256
-
257
- assert_equal '0x01 0x23 0x45 0x67 0x89', slicer.data.hexify
258
- assert_equal '0x01 0x23 0x45 0x67 0x89', slicer.set_bytes( [ 0x00 ] ).hexify
259
- assert_equal '0x01 0x23 0x45 0x67 0xb9', slicer.set_bytes( [ 0xFF ] ).hexify
260
-
261
- slicer = slicer( 12, 24 )
262
- assert_equal 0, slicer.first_byte
263
- assert_equal 3, slicer.last_byte
264
- assert_equal 3, slicer.length_in_bytes
265
- assert_equal 4, slicer.insert_length_in_bytes
266
-
267
- assert_equal '00001111', slicer.insert_first_byte_mask.binarize
268
- assert_equal '11110000', slicer.insert_last_byte_mask.binarize
269
-
270
- assert_equal '11110000', slicer.merge_first_byte_mask.binarize
271
- assert_equal '00001111', slicer.merge_last_byte_mask.binarize
272
-
273
- assert_equal '00000001', slicer.data[ slicer.first_byte ].binarize
274
- assert_equal '00000000', slicer.masked_first_byte.binarize
275
-
276
- assert_equal '01100111', slicer.data[ slicer.last_byte ].binarize
277
- assert_equal '00000111', slicer.masked_last_byte.binarize
278
-
279
- assert_equal '0x01 0x23 0x45 0x67 0x89', slicer.data.hexify
280
- assert_equal '0x12 0x34 0x56', slicer.get_bytes.hexify
281
- assert_equal '0x07 0x75 0x53 0x37 0x89', slicer.set_bytes( [ 0x99, 0x77, 0x55, 0x33 ] ).hexify
282
- assert_equal '0x07 0x75 0x53 0x37 0x89', slicer.set_bytes( [ 0xAA, 0xFF, 0x99, 0x77, 0x55, 0x33 ] ).hexify
283
- end
284
-
285
- def slicer( bit_offset, bit_length )
286
- slicer = BitStruct::BitSlicer.new bit_offset, bit_length
287
- slicer.data = test_data.dup
288
- slicer
289
- end
290
-
291
- def test_data
292
- [ 0x01, 0x23, 0x45, 0x67, 0x89 ].pack( 'C*' )
293
- end
294
-
295
- def test_data_intel
296
- [ 0x89, 0x67, 0x45, 0x23, 0x01].pack( 'C*' )
297
- end
298
-
299
- end
@@ -1,127 +0,0 @@
1
-
2
- require 'test/unit'
3
-
4
- require 'bit_struct/struct_base'
5
-
6
- include BitStruct
7
-
8
-
9
-
10
- class Flags < StructBase
11
- unsigned :direction, 4
12
- unsigned :multiplier, 2
13
- unsigned :offset, 2
14
- end
15
-
16
- class Entry < StructBase
17
- unsigned :offset, 4
18
- nested :flags, Flags
19
- unsigned :address, 24
20
- unsigned :cache_id, 16
21
- end
22
-
23
-
24
-
25
- class TestBitStruct < Test::Unit::TestCase
26
-
27
- def test_flags_class
28
- fields = Flags.fields
29
- assert_equal 3, fields.size
30
-
31
- assert_equal :direction, fields[ 0 ].name
32
- assert_equal 4, fields[ 0 ].length
33
- assert_equal :multiplier, fields[ 1 ].name
34
- assert_equal 2, fields[ 1 ].length
35
- assert_equal :offset, fields[ 2 ].name
36
- assert_equal 2, fields[ 2 ].length
37
- end
38
-
39
- def test_attributes_class
40
- fields = Entry.fields
41
- assert_equal 4, fields.size
42
-
43
- assert_equal :offset, fields[ 0 ].name
44
- assert_equal 4, fields[ 0 ].length
45
- assert_equal :flags, fields[ 1 ].name
46
- assert_equal 8, fields[ 1 ].length
47
- assert_equal :address, fields[ 2 ].name
48
- assert_equal 24, fields[ 2 ].length
49
- assert_equal :cache_id, fields[ 3 ].name
50
- assert_equal 16, fields[ 3 ].length
51
- end
52
-
53
- def test_flags_read
54
- flags = Flags.new [ 0xFF ].pack( 'C*' )
55
- assert_equal 0x0F, flags.direction
56
- assert_equal 0x03, flags.multiplier
57
- assert_equal 0x03, flags.offset
58
-
59
- flags = Flags.new [ 0x0F ].pack( 'C*' )
60
- assert_equal 0x0F, flags.direction
61
- assert_equal 0x00, flags.multiplier
62
- assert_equal 0x00, flags.offset
63
-
64
- flags = Flags.new [ 0x3F ].pack( 'C*' )
65
- assert_equal 0x0F, flags.direction
66
- assert_equal 0x03, flags.multiplier
67
- assert_equal 0x00, flags.offset
68
-
69
- flags = Flags.new [ 0xCF ].pack( 'C*' )
70
- assert_equal 0x0F, flags.direction
71
- assert_equal 0x00, flags.multiplier
72
- assert_equal 0x03, flags.offset
73
- end
74
-
75
- def test_flags_write
76
- data = [ 0xFF ].pack( 'C*' )
77
-
78
- flags = Flags.new data
79
- assert_equal '0xff', flags.data.hexify
80
- assert_equal 0x0F, flags.direction
81
- assert_equal 0x03, flags.multiplier
82
- assert_equal 0x03, flags.offset
83
-
84
- flags.multiplier = 0
85
- assert_equal '0xcf', flags.data.hexify
86
- assert_equal 0x0F, flags.direction
87
- assert_equal 0x00, flags.multiplier
88
- assert_equal 0x03, flags.offset
89
- end
90
-
91
- def test_entry_read
92
- data = [ 0xAA, 0xFF, 0x01, 0x23, 0x45, 0x67, 0x89 ].pack( 'C*' )
93
- entry = Entry.new data
94
-
95
- assert_equal 9, entry.offset
96
- assert_equal '0x12 0x34 0x56', entry.address.bytes.hexify
97
- assert_equal '0xaf 0xf0', entry.cache_id.bytes.hexify
98
-
99
- flags = entry.flags
100
- assert_equal 8, flags.direction
101
- assert_equal 3, flags.multiplier
102
- assert_equal 1, flags.offset
103
- end
104
-
105
- def test_attributes_write
106
- data = [ 0xAA, 0xFF, 0x01, 0x23, 0x45, 0x67, 0x89 ].pack( 'C*' )
107
- entry = Entry.new data
108
-
109
- entry.offset = 15
110
- assert_equal '0x0f', entry.offset.bytes.hexify
111
- assert_equal '0xaa 0xff 0x01 0x23 0x45 0x67 0x8f', entry.data.hexify
112
-
113
- entry.address = 0x44332211
114
- assert_equal '0x33 0x22 0x11', entry.address.bytes.hexify
115
- assert_equal '0xaa 0xff 0x03 0x32 0x21 0x17 0x8f', entry.data.hexify
116
-
117
- entry.cache_id = 0xAABBCCDD
118
- assert_equal '0xcc 0xdd', entry.cache_id.bytes.hexify
119
- assert_equal '0xac 0xcd 0xd3 0x32 0x21 0x17 0x8f', entry.data.hexify
120
-
121
- flags = entry.flags
122
- assert_equal 8, flags.direction
123
- assert_equal 3, flags.multiplier
124
- assert_equal 1, flags.offset
125
- end
126
-
127
- end
@@ -1,54 +0,0 @@
1
-
2
- require 'test/unit'
3
-
4
- require 'bit_struct/text'
5
-
6
- include BitStruct
7
-
8
-
9
-
10
- class TestTextField < Test::Unit::TestCase
11
-
12
- # Note: The TextField doesn't check the length. It is part of the
13
- # contract between the field and the slicer that only the expected
14
- # number of bytes (or less) are passed to the field :)
15
-
16
- def test_initialize
17
- TextField.new 'dummy', 8
18
- TextField.new 'dummy', 16
19
- TextField.new 'dummy', 24
20
- assert_raise( RuntimeError ) { TextField.new 'dummy', 5 }
21
- end
22
-
23
- def test_read
24
- slicer = FakeSlicer.new 'toast'.bytes
25
- field = TextField.new 'dummy', 24
26
- assert_equal 'tsaot', field.read( slicer )
27
- end
28
-
29
- def test_write
30
- slicer = FakeSlicer.new
31
- field = TextField.new 'dummy', 24
32
- field.write slicer, 'toast'
33
- assert_equal 'tsaot', slicer.get_bytes.stringify
34
- end
35
-
36
- end
37
-
38
-
39
-
40
- class FakeSlicer
41
-
42
- def initialize( data = '' )
43
- @data = data
44
- end
45
-
46
- def get_bytes
47
- @data
48
- end
49
-
50
- def set_bytes( data )
51
- @data = data
52
- end
53
-
54
- end
@@ -1,58 +0,0 @@
1
-
2
- require 'test/unit'
3
-
4
- require 'bit_struct/struct_base'
5
-
6
- include BitStruct
7
-
8
-
9
-
10
- class TestTextStruct < Test::Unit::TestCase
11
-
12
- class AlignedText < StructBase
13
- unsigned :before, 8
14
- text :aligned, 32
15
- unsigned :after, 8
16
- end
17
-
18
- def test_aligned_text
19
- data = [ 0x12, ?t, ?s, ?e, ?t, 0x34 ].pack( 'C*' )
20
- struct = AlignedText.new data
21
- assert_equal 0x34, struct.before
22
- assert_equal 'test', struct.aligned
23
- assert_equal 0x12, struct.after
24
-
25
- struct.before = ?A
26
- struct.aligned = 'goal'
27
- struct.after = ?B
28
- assert_equal ?A, struct.before
29
- assert_equal 'goal', struct.aligned
30
- assert_equal ?B, struct.after
31
-
32
- assert_equal 'BlaogA', struct.data
33
- end
34
-
35
- class UnalignedText < StructBase
36
- unsigned :before, 4
37
- text :unaligned, 24
38
- unsigned :after, 4
39
- end
40
-
41
- def test_unaligned_text
42
- a_hi, a_lo = get_hi_lo ?a
43
- b_hi, b_lo = get_hi_lo ?b
44
- c_hi, c_lo = get_hi_lo ?c
45
-
46
- data = [ 12 << 4 | c_hi, c_lo << 4 | b_hi, b_lo << 4 | a_hi, a_lo << 4 | 3 ].pack( 'C*' )
47
-
48
- struct = UnalignedText.new data
49
- assert_equal 3, struct.before
50
- assert_equal 'abc', struct.unaligned
51
- assert_equal 12, struct.after
52
- end
53
-
54
- def get_hi_lo( char )
55
- return char >> 4, char & 0x0F
56
- end
57
-
58
- end
data/test/ruby/runner.rb DELETED
@@ -1,127 +0,0 @@
1
-
2
- require 'logger'
3
-
4
- require 'test/unit/autorunner'
5
-
6
- class String
7
-
8
- def bytes
9
- bytes = []
10
- self.each_byte { |b| bytes << b }
11
- bytes
12
- end
13
-
14
- def hexify
15
- result = ''
16
- each_byte do |b|
17
- result << "0x#{b.hexify} "
18
- end
19
- result.chop
20
- end
21
-
22
- end
23
-
24
- class Array
25
-
26
- def stringify
27
- res = ''
28
- self.each { |b| res << b }
29
- res
30
- end
31
-
32
- def hexify
33
- map { |b| "0x#{b && b.hexify}" }.join( ' ' )
34
- end
35
-
36
- def binarize
37
- map { |b| "%#{b && b.binarize}" }.join( ' ' )
38
- end
39
-
40
- end
41
-
42
- class Fixnum
43
-
44
- def bytes
45
- bytes = []
46
- val = to_i
47
- while val > 0
48
- bytes.insert 0, ( val & 0xFF )
49
- val >>= 8
50
- end
51
- bytes
52
- end
53
-
54
- def hexify
55
- result = ''
56
- val = to_i
57
- while val > 0
58
- b = val & 0xF
59
- result = b.to_s( 16 ) + result
60
- val >>= 4
61
- end
62
- padded result, 2
63
- end
64
-
65
- def binarize
66
- result = ''
67
- val = to_i
68
- while val > 0
69
- b = val & 1
70
- result = b.to_s( 2 ) + result
71
- val >>= 1
72
- end
73
- padded result, 8
74
- end
75
-
76
- def padded( val, length_multiplier )
77
- padded_length = ( val.length / length_multiplier ).ceil * length_multiplier
78
- padded_length = length_multiplier if padded_length == 0
79
- pad_size = padded_length - val.length
80
- '0' * pad_size + val
81
- end
82
-
83
- end
84
-
85
- def hexify( data )
86
- result = ''
87
- data.each_byte do |b|
88
- nibble = ( b >> 4 ) & 15
89
- result << ( 0x30 + nibble ) if nibble < 10
90
- result << ( 0x41 + nibble - 10 ) if nibble >= 10
91
- nibble = ( b >> 0 ) & 15
92
- result << ( 0x30 + nibble ) if nibble < 10
93
- result << ( 0x41 + nibble - 10 ) if nibble >= 10
94
- end
95
- result
96
- end
97
-
98
- def get_resource( basedir, relative_filename )
99
- basedir = File.dirname basedir unless File.directory? basedir
100
- filename = File.join( basedir, relative_filename )
101
- raise "Resource not found: #{filename}" unless File.exists? filename
102
- return filename
103
- end
104
-
105
- def open_resource( basedir, relative_filename )
106
- File.new get_resource( basedir, relative_filename ), 'rb'
107
- end
108
-
109
- def load_resource( basedir, relative_filename )
110
- File.open( get_resource( basedir, relative_filename ), 'rb' ) do |file|
111
- return file.read
112
- end
113
- end
114
-
115
- class NullLogger < Logger
116
- def initialize( *args )
117
- super STDOUT
118
- @level = WARN
119
- end
120
- end
121
-
122
- NULL_LOGGER = NullLogger.new
123
-
124
- args = [ '--runner=console', '--verbose=v' ]
125
- args.concat ARGV
126
- success = Test::Unit::AutoRunner.run( true, File.dirname( $0 ), args )
127
- exit 10 unless success