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.
- checksums.yaml +4 -4
- data/cddl.gemspec +1 -1
- data/lib/cddl.rb +31 -14
- data/test/test-cddl.rb +20 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 749f3737874fddf85370630362cb408163cd5098
|
4
|
+
data.tar.gz: a853023378b56fc381ef51bc5d808a275e67186d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6c285291257fd627bd815bbae0372e5e0a7a8bbbd5866da15a1196f2b13a257249e1dd419ad50ac9e85858701517679883b4c6a78f3093350a1143b597f4a1af
|
7
|
+
data.tar.gz: 31a449e0663742bc3fa7cdbaf80b4c2c4fccfcd477096207129516e77c8accdc9f93ae87544421c7380a56d87aca1b17495776a1ffc2b0cb02a19d14213a8661
|
data/cddl.gemspec
CHANGED
data/lib/cddl.rb
CHANGED
@@ -124,13 +124,13 @@ module CDDL
|
|
124
124
|
r
|
125
125
|
end
|
126
126
|
when :member
|
127
|
-
|
128
|
-
|
129
|
-
|
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(
|
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,
|
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
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
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.
|
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-
|
11
|
+
date: 2015-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cbor-diag
|