Document lack of half-precision float
parent
a78d06f33a
commit
4929f2487b
|
@ -7,7 +7,6 @@ in Crystal.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
- Full RFC7049 support
|
|
||||||
- Full support for diagnostic notation
|
- Full support for diagnostic notation
|
||||||
- Assign a field to a type base on the CBOR tag
|
- Assign a field to a type base on the CBOR tag
|
||||||
- Support for a wide range of IANA CBOR Tags
|
- Support for a wide range of IANA CBOR Tags
|
||||||
|
@ -19,6 +18,9 @@ in Crystal.
|
||||||
Crystal doesn't have a `Float16` type, so half-precision floating point numbers
|
Crystal doesn't have a `Float16` type, so half-precision floating point numbers
|
||||||
are not supported for the time being.
|
are not supported for the time being.
|
||||||
|
|
||||||
|
If you know of a way to solve handle half-precision float, a contribution would
|
||||||
|
be really appreciated.
|
||||||
|
|
||||||
### Maximum Array/String array/Bytes array length
|
### Maximum Array/String array/Bytes array length
|
||||||
|
|
||||||
The spec allows for the maximum length of arrays, string arrays and bytes array
|
The spec allows for the maximum length of arrays, string arrays and bytes array
|
||||||
|
|
|
@ -3,6 +3,19 @@ require "./spec_helper"
|
||||||
# All those tests have been exported from the RFC7049 appendix A.
|
# All those tests have been exported from the RFC7049 appendix A.
|
||||||
|
|
||||||
tests = [
|
tests = [
|
||||||
|
# Disabled as half-precision floats are not supported:
|
||||||
|
# { %(0.0), "f9 00 00" },
|
||||||
|
# { %(-0.0), "f9 80 00" },
|
||||||
|
# { %(1.0), "f9 3c 00" },
|
||||||
|
# { %(1.5), "f9 3e 00" },
|
||||||
|
# { %(65504.0), "f9 7b ff" },
|
||||||
|
# { %(0.00006103515625), "f9 04 00" },
|
||||||
|
# { %(-4.0), "f9 c4 00" },
|
||||||
|
# { %(5.960464477539063e-8), "f9 00 01" },
|
||||||
|
# { %(Infinity), "f9 7c 00" },
|
||||||
|
# { %(NaN), "f9 7e 00" },
|
||||||
|
# { %(-Infinity), "f9 fc 00" },
|
||||||
|
|
||||||
{ %(0), "00" },
|
{ %(0), "00" },
|
||||||
{ %(1), "01" },
|
{ %(1), "01" },
|
||||||
{ %(10), "0a" },
|
{ %(10), "0a" },
|
||||||
|
@ -21,22 +34,11 @@ tests = [
|
||||||
{ %(-10), "29" },
|
{ %(-10), "29" },
|
||||||
{ %(-100), "38 63" },
|
{ %(-100), "38 63" },
|
||||||
{ %(-1000), "39 03 e7" },
|
{ %(-1000), "39 03 e7" },
|
||||||
# { %(0.0), "f9 00 00" },
|
|
||||||
# { %(-0.0), "f9 80 00" },
|
|
||||||
# { %(1.0), "f9 3c 00" },
|
|
||||||
{ %(1.1), "fb 3f f1 99 99 99 99 99 9a" },
|
{ %(1.1), "fb 3f f1 99 99 99 99 99 9a" },
|
||||||
# { %(1.5), "f9 3e 00" },
|
|
||||||
# { %(65504.0), "f9 7b ff" },
|
|
||||||
{ %(100000.0), "fa 47 c3 50 00" },
|
{ %(100000.0), "fa 47 c3 50 00" },
|
||||||
# { %(3.4028234663852886e+38), "fa 7f 7f ff ff" }, TODO: Not precise enough?
|
# { %(3.4028234663852886e+38), "fa 7f 7f ff ff" }, TODO: Not precise enough?
|
||||||
{ %(1.0e+300), "fb 7e 37 e4 3c 88 00 75 9c" },
|
{ %(1.0e+300), "fb 7e 37 e4 3c 88 00 75 9c" },
|
||||||
# { %(5.960464477539063e-8), "f9 00 01" },
|
|
||||||
# { %(0.00006103515625), "f9 04 00" },
|
|
||||||
# { %(-4.0), "f9 c4 00" },
|
|
||||||
{ %(-4.1), "fb c0 10 66 66 66 66 66 66" },
|
{ %(-4.1), "fb c0 10 66 66 66 66 66 66" },
|
||||||
# { %(Infinity), "f9 7c 00" },
|
|
||||||
# { %(NaN), "f9 7e 00" },
|
|
||||||
# { %(-Infinity), "f9 fc 00" },
|
|
||||||
{ %(Infinity), "fa 7f 80 00 00" },
|
{ %(Infinity), "fa 7f 80 00 00" },
|
||||||
{ %(NaN), "fa 7f c0 00 00" },
|
{ %(NaN), "fa 7f c0 00 00" },
|
||||||
{ %(-Infinity), "fa ff 80 00 00" },
|
{ %(-Infinity), "fa ff 80 00 00" },
|
||||||
|
|
|
@ -84,7 +84,7 @@ class CBOR::Lexer
|
||||||
when 0xe0..0xf8
|
when 0xe0..0xf8
|
||||||
consume_simple_value(read_size(byte - 0xe0))
|
consume_simple_value(read_size(byte - 0xe0))
|
||||||
when 0xf9
|
when 0xf9
|
||||||
raise ParseError.new("Half-precision floating points are not supported")
|
raise ParseError.new("Half-precision floating point numbers are not supported")
|
||||||
when 0xfa
|
when 0xfa
|
||||||
Token::FloatT.new(value: read(Float32))
|
Token::FloatT.new(value: read(Float32))
|
||||||
when 0xfb
|
when 0xfb
|
||||||
|
|
|
@ -21,6 +21,10 @@ enum CBOR::Tag : UInt32
|
||||||
RegularExpression
|
RegularExpression
|
||||||
MimeMessage
|
MimeMessage
|
||||||
UUID
|
UUID
|
||||||
|
Language
|
||||||
|
Identifier
|
||||||
|
|
||||||
|
CBORWebToken = 61
|
||||||
|
|
||||||
CBORMarker = 55799
|
CBORMarker = 55799
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue