cddl 0.3.1 → 0.3.2

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