BitStructEx 0.0.64 → 0.0.65

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