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