cddl 0.7.0 → 0.7.1
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 +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)
|