cddl 0.3.1 → 0.3.2

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 (5) hide show
  1. checksums.yaml +4 -4
  2. data/cddl.gemspec +1 -1
  3. data/lib/cddl.rb +31 -14
  4. data/test/test-cddl.rb +20 -1
  5. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9eb59255cf976f07842ba95a028cc826ce6eb8c5
4
- data.tar.gz: 899add09f2508a89d342ec656fd275b67fd953bc
3
+ metadata.gz: 749f3737874fddf85370630362cb408163cd5098
4
+ data.tar.gz: a853023378b56fc381ef51bc5d808a275e67186d
5
5
  SHA512:
6
- metadata.gz: a200fef3140f3c04c291168bbe7d8a7657c0263b78d14d59a816d572d2a86612f3a142045880947baef22a578e609e5a033645ca76baa30926422d741da0d825
7
- data.tar.gz: 6cac31c7fc7db9141b48874417769e8b5cd63422fc8db1ae93ccf175746de35566c3ffbecfe76e466d542232407226184fd9e6e43e9501b60f0803713cfa9a91
6
+ metadata.gz: 6c285291257fd627bd815bbae0372e5e0a7a8bbbd5866da15a1196f2b13a257249e1dd419ad50ac9e85858701517679883b4c6a78f3093350a1143b597f4a1af
7
+ data.tar.gz: 31a449e0663742bc3fa7cdbaf80b4c2c4fccfcd477096207129516e77c8accdc9f93ae87544421c7380a56d87aca1b17495776a1ffc2b0cb02a19d14213a8661
data/cddl.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  spec = Gem::Specification.new do |s|
2
2
  s.name = 'cddl'
3
- s.version = '0.3.1'
3
+ s.version = '0.3.2'
4
4
  s.summary = "CDDL generator and validator."
5
5
  s.description = %{A parser, generator, and validator for CDDL}
6
6
  s.add_dependency('cbor-diag')
data/lib/cddl.rb CHANGED
@@ -124,13 +124,13 @@ module CDDL
124
124
  r
125
125
  end
126
126
  when :member
127
- s = where[1]
128
- e = [where[2], [s, 4].max].min # truncate to 4 unless must be more
129
- s += rand(e + 1 - s) if e != s
127
+ st = where[1]
128
+ en = [where[2], [st, 4].max].min # truncate to 4 unless must be more
129
+ st += rand(en + 1 - st) if en != st
130
130
  kr = where[3]
131
131
  vr = where[4]
132
132
  fail "member key not given in map for #{where}" unless kr if inmap
133
- Array.new(s) { [ (generate(kr) if kr), # XXX: need error in map context
133
+ Array.new(st) { [ (generate(kr) if kr), # XXX: need error in map context
134
134
  generate(vr)
135
135
  ]}
136
136
  when :string, :int, :float
@@ -182,20 +182,25 @@ module CDDL
182
182
  when :bits
183
183
  set_of_bits = Array.new(10) { generate(control) } # XXX: ten?
184
184
  # p set_of_bits
185
- unless target == [:prim, 2] && set_of_bits.all? {|x| Integer === x && x >= 0 }
185
+ unless (target == [:prim, 0] || target == [:prim, 2]) &&
186
+ set_of_bits.all? {|x| Integer === x && x >= 0 }
186
187
  fail "Don't know yet how to generate #{where}"
187
188
  end
188
- s = String.new
189
- set_of_bits.each do |i|
190
- n = i >> 3
191
- bit = 1 << (i & 7)
192
- if v = s.getbyte(n)
193
- s.setbyte(n, v | bit)
194
- else
195
- s << "\0" * (n - s.size) << bit.chr(Encoding::BINARY)
189
+ if target == [:prim, 2]
190
+ set_of_bits.inject(String.new) do |s, i|
191
+ n = i >> 3
192
+ bit = 1 << (i & 7)
193
+ if v = s.getbyte(n)
194
+ s.setbyte(n, v | bit); s
195
+ else
196
+ s << "\0" * (n - s.size) << bit.chr(Encoding::BINARY)
197
+ end
198
+ end
199
+ else # target == [:prim, 0]
200
+ set_of_bits.inject(0) do |a, v|
201
+ a |= (1 << v)
196
202
  end
197
203
  end
198
- s
199
204
  when :regexp
200
205
  regexp = generate(control)
201
206
  unless target == [:prim, 3] && String === regexp
@@ -344,6 +349,18 @@ module CDDL
344
349
  b[nb] == 0 || validate1(bit+nb, control)
345
350
  }
346
351
  }
352
+ elsif Integer === d
353
+ if d >= 0
354
+ ok = true
355
+ i = 0
356
+ while ok && d > 0
357
+ if d.odd?
358
+ ok &&= validate1(i, control)
359
+ end
360
+ d >>= 1; i += 1
361
+ end
362
+ ok
363
+ end
347
364
  end
348
365
  when :regexp
349
366
  if String === d
data/test/test-cddl.rb CHANGED
@@ -669,11 +669,30 @@ HERE
669
669
  parser = CDDL::Parser.new <<HERE
670
670
  test = bstr .bits (1 / 3 / 5)
671
671
  HERE
672
- pp parser.rules
672
+ # pp parser.rules
673
673
  gen = parser.generate
674
674
  assert String === gen
675
675
  pp gen # should mostly be "*"
676
676
  assert parser.validate(gen)
677
+ assert parser.validate("\x08".b)
678
+ refute parser.validate("\x01".b, false)
679
+ refute parser.validate("\x10".b, false)
680
+ refute parser.validate("\x40".b, false)
681
+ end
682
+
683
+ def test_bits_annotation_on_uint
684
+ parser = CDDL::Parser.new <<HERE
685
+ test = uint .bits (1 / 3 / 5)
686
+ HERE
687
+ # pp parser.rules
688
+ gen = parser.generate
689
+ assert Integer === gen
690
+ pp gen # should mostly be 42
691
+ assert parser.validate(gen)
692
+ assert parser.validate(1 << 3)
693
+ refute parser.validate(1 << 0, false)
694
+ refute parser.validate(1 << 4, false)
695
+ refute parser.validate(1 << 6, false)
677
696
  end
678
697
 
679
698
  def test_regexp_annotation
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cddl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carsten Bormann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-08 00:00:00.000000000 Z
11
+ date: 2015-03-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cbor-diag