cddl 0.7.0 → 0.7.1
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 +17 -3
- data/test/test-cddl.rb +18 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21c72ccd0f94ea94c2c5759a86d7f96d6756d945
|
4
|
+
data.tar.gz: a84cecf4ca71d4c1dd284a996b072e20a8139c7e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ca79dda50938e7a502ed7f5722a396eca9a55d37fd652b0944e8a031e0919ca9275c4d80433bac651a9845d7b1c1e62886f553eab9a9548732a4d48f05e9a0e
|
7
|
+
data.tar.gz: af8f5d8945bd7e731004d86d23ac3ac0c036b304ed4f57982a798460be51135e496662a43823179f74c047accd18c8abeb2b83e4c01d6458ce75052dabe437dd
|
data/cddl.gemspec
CHANGED
data/lib/cddl.rb
CHANGED
@@ -383,10 +383,16 @@ module CDDL
|
|
383
383
|
case where[1]
|
384
384
|
when :size
|
385
385
|
should_be_int = generate1(control)
|
386
|
-
unless target == [:prim, 2] && Integer === should_be_int
|
386
|
+
unless (target == [:prim, 2] || target == [:prim, 0]) && Integer === should_be_int && should_be_int >= 0
|
387
387
|
fail "Don't know yet how to generate #{where}"
|
388
388
|
end
|
389
|
-
Random.new.bytes(should_be_int)
|
389
|
+
s = Random.new.bytes(should_be_int)
|
390
|
+
if target == [:prim, 0]
|
391
|
+
# silently restrict to what we can put into a uint
|
392
|
+
s[0...8].bytes.inject(0) {|a, b| a << 8 | b }
|
393
|
+
else
|
394
|
+
s
|
395
|
+
end
|
390
396
|
when :bits
|
391
397
|
set_of_bits = Array.new(10) { generate1(control) } # XXX: ten?
|
392
398
|
# p set_of_bits
|
@@ -679,7 +685,15 @@ module CDDL
|
|
679
685
|
control = where[3]
|
680
686
|
case where[1]
|
681
687
|
when :size
|
682
|
-
|
688
|
+
case d
|
689
|
+
when Integer
|
690
|
+
ok, v, vt = extract_value(control)
|
691
|
+
if ok && vt == Integer
|
692
|
+
ann if (d >> (8*v)) == 0
|
693
|
+
end
|
694
|
+
when String
|
695
|
+
ann if validate1(d.bytesize, control)
|
696
|
+
end
|
683
697
|
when :bits
|
684
698
|
if String === d
|
685
699
|
d.each_byte.with_index.all? { |b, i|
|
data/test/test-cddl.rb
CHANGED
@@ -855,6 +855,24 @@ HERE
|
|
855
855
|
assert parser.validate(gen)
|
856
856
|
end
|
857
857
|
|
858
|
+
|
859
|
+
def test_uint_size_annotation
|
860
|
+
parser = CDDL::Parser.new <<HERE
|
861
|
+
test = uint .size 3
|
862
|
+
HERE
|
863
|
+
pp parser.rules
|
864
|
+
10.times do
|
865
|
+
gen = parser.generate
|
866
|
+
assert Integer === gen
|
867
|
+
assert gen < 2**24
|
868
|
+
assert gen >= 0
|
869
|
+
assert parser.validate(gen)
|
870
|
+
end
|
871
|
+
refute parser.validate(-1, false)
|
872
|
+
refute parser.validate(2**24, false)
|
873
|
+
refute parser.validate(2**218, false)
|
874
|
+
end
|
875
|
+
|
858
876
|
def test_bits_annotation
|
859
877
|
parser = CDDL::Parser.new <<HERE
|
860
878
|
test = bstr .bits (1 / 3 / 5)
|