Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
json
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Libraries
json
Commits
17c9b17a
Commit
17c9b17a
authored
Dec 07, 2016
by
Niels Lohmann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
✅
test cases from RFC 7049 #384
parent
aab9bbbb
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
179 additions
and
6 deletions
+179
-6
test/src/unit-cbor.cpp
test/src/unit-cbor.cpp
+179
-6
No files found.
test/src/unit-cbor.cpp
View file @
17c9b17a
...
...
@@ -187,9 +187,9 @@ TEST_CASE("CBOR")
}
}
SECTION
(
"0..2
2
"
)
SECTION
(
"0..2
3
"
)
{
for
(
size_t
i
=
0
;
i
<=
2
2
;
++
i
)
for
(
size_t
i
=
0
;
i
<=
2
3
;
++
i
)
{
CAPTURE
(
i
);
...
...
@@ -217,9 +217,9 @@ TEST_CASE("CBOR")
}
}
SECTION
(
"2
3
..255"
)
SECTION
(
"2
4
..255"
)
{
for
(
size_t
i
=
2
3
;
i
<=
255
;
++
i
)
for
(
size_t
i
=
2
4
;
i
<=
255
;
++
i
)
{
CAPTURE
(
i
);
...
...
@@ -1028,7 +1028,8 @@ TEST_CASE("CBOR roundtrips", "[hide]")
// parse CBOR file
std
::
ifstream
f_cbor
(
filename
+
".cbor"
,
std
::
ios
::
binary
);
std
::
vector
<
uint8_t
>
packed
((
std
::
istreambuf_iterator
<
char
>
(
f_cbor
)),
std
::
vector
<
uint8_t
>
packed
(
(
std
::
istreambuf_iterator
<
char
>
(
f_cbor
)),
std
::
istreambuf_iterator
<
char
>
());
json
j2
;
CHECK_NOTHROW
(
j2
=
json
::
from_cbor
(
packed
));
...
...
@@ -1038,3 +1039,175 @@ TEST_CASE("CBOR roundtrips", "[hide]")
}
}
}
TEST_CASE
(
"examples from RFC 7049 Appendix A"
)
{
SECTION
(
"numbers"
)
{
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"0"
))
==
std
::
vector
<
uint8_t
>
({
0x00
}));
CHECK
(
json
::
parse
(
"0"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x00
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"1"
))
==
std
::
vector
<
uint8_t
>
({
0x01
}));
CHECK
(
json
::
parse
(
"1"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x01
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"10"
))
==
std
::
vector
<
uint8_t
>
({
0x0a
}));
CHECK
(
json
::
parse
(
"10"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x0a
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"23"
))
==
std
::
vector
<
uint8_t
>
({
0x17
}));
CHECK
(
json
::
parse
(
"23"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x17
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"24"
))
==
std
::
vector
<
uint8_t
>
({
0x18
,
0x18
}));
CHECK
(
json
::
parse
(
"24"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x18
,
0x18
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"25"
))
==
std
::
vector
<
uint8_t
>
({
0x18
,
0x19
}));
CHECK
(
json
::
parse
(
"25"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x18
,
0x19
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"100"
))
==
std
::
vector
<
uint8_t
>
({
0x18
,
0x64
}));
CHECK
(
json
::
parse
(
"100"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x18
,
0x64
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"1000"
))
==
std
::
vector
<
uint8_t
>
({
0x19
,
0x03
,
0xe8
}));
CHECK
(
json
::
parse
(
"1000"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x19
,
0x03
,
0xe8
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"1000000"
))
==
std
::
vector
<
uint8_t
>
({
0x1a
,
0x00
,
0x0f
,
0x42
,
0x40
}));
CHECK
(
json
::
parse
(
"1000000"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x1a
,
0x00
,
0x0f
,
0x42
,
0x40
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"1000000000000"
))
==
std
::
vector
<
uint8_t
>
({
0x1b
,
0x00
,
0x00
,
0x00
,
0xe8
,
0xd4
,
0xa5
,
0x10
,
0x00
}));
CHECK
(
json
::
parse
(
"1000000000000"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x1b
,
0x00
,
0x00
,
0x00
,
0xe8
,
0xd4
,
0xa5
,
0x10
,
0x00
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"18446744073709551615"
))
==
std
::
vector
<
uint8_t
>
({
0x1b
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
}));
CHECK
(
json
::
parse
(
"18446744073709551615"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x1b
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
})));
// positive bignum is not supported
//CHECK(json::to_cbor(json::parse("18446744073709551616")) == std::vector<uint8_t>({0xc2, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
//CHECK(json::parse("18446744073709551616") == json::from_cbor(std::vector<uint8_t>({0xc2, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})));
//CHECK(json::to_cbor(json::parse("-18446744073709551616")) == std::vector<uint8_t>({0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}));
//CHECK(json::parse("-18446744073709551616") == json::from_cbor(std::vector<uint8_t>({0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff})));
// negative bignum is not supported
//CHECK(json::to_cbor(json::parse("-18446744073709551617")) == std::vector<uint8_t>({0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}));
//CHECK(json::parse("-18446744073709551617") == json::from_cbor(std::vector<uint8_t>({0xc3, 0x49, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"-1"
))
==
std
::
vector
<
uint8_t
>
({
0x20
}));
CHECK
(
json
::
parse
(
"-1"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x20
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"-10"
))
==
std
::
vector
<
uint8_t
>
({
0x29
}));
CHECK
(
json
::
parse
(
"-10"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x29
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"-100"
))
==
std
::
vector
<
uint8_t
>
({
0x38
,
0x63
}));
CHECK
(
json
::
parse
(
"-100"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x38
,
0x63
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"-1000"
))
==
std
::
vector
<
uint8_t
>
({
0x39
,
0x03
,
0xe7
}));
CHECK
(
json
::
parse
(
"-1000"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x39
,
0x03
,
0xe7
})));
// half-precision float
//CHECK(json::to_cbor(json::parse("0.0")) == std::vector<uint8_t>({0xf9, 0x00, 0x00}));
//CHECK(json::parse("0.0") == json::from_cbor(std::vector<uint8_t>({0xf9, 0x00, 0x00})));
// half-precision float
//CHECK(json::to_cbor(json::parse("-0.0")) == std::vector<uint8_t>({0xf9, 0x80, 0x00}));
//CHECK(json::parse("-0.0") == json::from_cbor(std::vector<uint8_t>({0xf9, 0x80, 0x00})));
// half-precision float
//CHECK(json::to_cbor(json::parse("1.0")) == std::vector<uint8_t>({0xf9, 0x3c, 0x00}));
//CHECK(json::parse("1.0") == json::from_cbor(std::vector<uint8_t>({0xf9, 0x3c, 0x00})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"1.1"
))
==
std
::
vector
<
uint8_t
>
({
0xfb
,
0x3f
,
0xf1
,
0x99
,
0x99
,
0x99
,
0x99
,
0x99
,
0x9a
}));
CHECK
(
json
::
parse
(
"1.1"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xfb
,
0x3f
,
0xf1
,
0x99
,
0x99
,
0x99
,
0x99
,
0x99
,
0x9a
})));
// half-precision float
//CHECK(json::to_cbor(json::parse("1.5")) == std::vector<uint8_t>({0xf9, 0x3e, 0x00}));
//CHECK(json::parse("1.5") == json::from_cbor(std::vector<uint8_t>({0xf9, 0x3e, 0x00})));
// half-precision float
//CHECK(json::to_cbor(json::parse("65504.0")) == std::vector<uint8_t>({0xf9, 0x7b, 0xff}));
//CHECK(json::parse("65504.0") == json::from_cbor(std::vector<uint8_t>({0xf9, 0x7b, 0xff})));
//CHECK(json::to_cbor(json::parse("100000.0")) == std::vector<uint8_t>({0xfa, 0x47, 0xc3, 0x50, 0x00}));
CHECK
(
json
::
parse
(
"100000.0"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xfa
,
0x47
,
0xc3
,
0x50
,
0x00
})));
//CHECK(json::to_cbor(json::parse("3.4028234663852886e+38")) == std::vector<uint8_t>({0xfa, 0x7f, 0x7f, 0xff, 0xff}));
CHECK
(
json
::
parse
(
"3.4028234663852886e+38"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xfa
,
0x7f
,
0x7f
,
0xff
,
0xff
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"1.0e+300"
))
==
std
::
vector
<
uint8_t
>
({
0xfb
,
0x7e
,
0x37
,
0xe4
,
0x3c
,
0x88
,
0x00
,
0x75
,
0x9c
}));
CHECK
(
json
::
parse
(
"1.0e+300"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xfb
,
0x7e
,
0x37
,
0xe4
,
0x3c
,
0x88
,
0x00
,
0x75
,
0x9c
})));
// half-precision float
//CHECK(json::to_cbor(json::parse("5.960464477539063e-8")) == std::vector<uint8_t>({0xf9, 0x00, 0x01}));
//CHECK(json::parse("-4.0") == json::from_cbor(std::vector<uint8_t>({0xf9, 0xc4, 0x00})));
// half-precision float
//CHECK(json::to_cbor(json::parse("0.00006103515625")) == std::vector<uint8_t>({0xf9, 0x04, 0x00}));
//CHECK(json::parse("-4.0") == json::from_cbor(std::vector<uint8_t>({0xf9, 0xc4, 0x00})));
// half-precision float
//CHECK(json::to_cbor(json::parse("-4.0")) == std::vector<uint8_t>({0xf9, 0xc4, 0x00}));
//CHECK(json::parse("-4.0") == json::from_cbor(std::vector<uint8_t>({0xf9, 0xc4, 0x00})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"-4.1"
))
==
std
::
vector
<
uint8_t
>
({
0xfb
,
0xc0
,
0x10
,
0x66
,
0x66
,
0x66
,
0x66
,
0x66
,
0x66
}));
CHECK
(
json
::
parse
(
"-4.1"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xfb
,
0xc0
,
0x10
,
0x66
,
0x66
,
0x66
,
0x66
,
0x66
,
0x66
})));
}
SECTION
(
"simple values"
)
{
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"false"
))
==
std
::
vector
<
uint8_t
>
({
0xf4
}));
CHECK
(
json
::
parse
(
"false"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xf4
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"true"
))
==
std
::
vector
<
uint8_t
>
({
0xf5
}));
CHECK
(
json
::
parse
(
"true"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xf5
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"true"
))
==
std
::
vector
<
uint8_t
>
({
0xf5
}));
CHECK
(
json
::
parse
(
"true"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xf5
})));
}
SECTION
(
"strings"
)
{
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"
\"\"
"
))
==
std
::
vector
<
uint8_t
>
({
0x60
}));
CHECK
(
json
::
parse
(
"
\"\"
"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x60
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"
\"
a
\"
"
))
==
std
::
vector
<
uint8_t
>
({
0x61
,
0x61
}));
CHECK
(
json
::
parse
(
"
\"
a
\"
"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x61
,
0x61
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"
\"
IETF
\"
"
))
==
std
::
vector
<
uint8_t
>
({
0x64
,
0x49
,
0x45
,
0x54
,
0x46
}));
CHECK
(
json
::
parse
(
"
\"
IETF
\"
"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x64
,
0x49
,
0x45
,
0x54
,
0x46
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"
\"\\
u00fc
\"
"
))
==
std
::
vector
<
uint8_t
>
({
0x62
,
0xc3
,
0xbc
}));
CHECK
(
json
::
parse
(
"
\"\\
u00fc
\"
"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x62
,
0xc3
,
0xbc
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"
\"\\
u6c34
\"
"
))
==
std
::
vector
<
uint8_t
>
({
0x63
,
0xe6
,
0xb0
,
0xb4
}));
CHECK
(
json
::
parse
(
"
\"\\
u6c34
\"
"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x63
,
0xe6
,
0xb0
,
0xb4
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"
\"\\
ud800
\\
udd51
\"
"
))
==
std
::
vector
<
uint8_t
>
({
0x64
,
0xf0
,
0x90
,
0x85
,
0x91
}));
CHECK
(
json
::
parse
(
"
\"\\
ud800
\\
udd51
\"
"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x64
,
0xf0
,
0x90
,
0x85
,
0x91
})));
}
SECTION
(
"arrays"
)
{
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"[]"
))
==
std
::
vector
<
uint8_t
>
({
0x80
}));
CHECK
(
json
::
parse
(
"[]"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x80
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"[1, 2, 3]"
))
==
std
::
vector
<
uint8_t
>
({
0x83
,
0x01
,
0x02
,
0x03
}));
CHECK
(
json
::
parse
(
"[1, 2, 3]"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x83
,
0x01
,
0x02
,
0x03
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"[1, [2, 3], [4, 5]]"
))
==
std
::
vector
<
uint8_t
>
({
0x83
,
0x01
,
0x82
,
0x02
,
0x03
,
0x82
,
0x04
,
0x05
}));
CHECK
(
json
::
parse
(
"[1, [2, 3], [4, 5]]"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x83
,
0x01
,
0x82
,
0x02
,
0x03
,
0x82
,
0x04
,
0x05
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]"
))
==
std
::
vector
<
uint8_t
>
({
0x98
,
0x19
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x18
,
0x18
,
0x19
}));
CHECK
(
json
::
parse
(
"[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x98
,
0x19
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
,
0x14
,
0x15
,
0x16
,
0x17
,
0x18
,
0x18
,
0x18
,
0x19
})));
}
SECTION
(
"objects"
)
{
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"{}"
))
==
std
::
vector
<
uint8_t
>
({
0xa0
}));
CHECK
(
json
::
parse
(
"{}"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xa0
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"{
\"
a
\"
: 1,
\"
b
\"
: [2, 3]}"
))
==
std
::
vector
<
uint8_t
>
({
0xa2
,
0x61
,
0x61
,
0x01
,
0x61
,
0x62
,
0x82
,
0x02
,
0x03
}));
CHECK
(
json
::
parse
(
"{
\"
a
\"
: 1,
\"
b
\"
: [2, 3]}"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xa2
,
0x61
,
0x61
,
0x01
,
0x61
,
0x62
,
0x82
,
0x02
,
0x03
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"[
\"
a
\"
, {
\"
b
\"
:
\"
c
\"
}]"
))
==
std
::
vector
<
uint8_t
>
({
0x82
,
0x61
,
0x61
,
0xa1
,
0x61
,
0x62
,
0x61
,
0x63
}));
CHECK
(
json
::
parse
(
"[
\"
a
\"
, {
\"
b
\"
:
\"
c
\"
}]"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0x82
,
0x61
,
0x61
,
0xa1
,
0x61
,
0x62
,
0x61
,
0x63
})));
CHECK
(
json
::
to_cbor
(
json
::
parse
(
"{
\"
a
\"
:
\"
A
\"
,
\"
b
\"
:
\"
B
\"
,
\"
c
\"
:
\"
C
\"
,
\"
d
\"
:
\"
D
\"
,
\"
e
\"
:
\"
E
\"
}"
))
==
std
::
vector
<
uint8_t
>
({
0xa5
,
0x61
,
0x61
,
0x61
,
0x41
,
0x61
,
0x62
,
0x61
,
0x42
,
0x61
,
0x63
,
0x61
,
0x43
,
0x61
,
0x64
,
0x61
,
0x44
,
0x61
,
0x65
,
0x61
,
0x45
}));
CHECK
(
json
::
parse
(
"{
\"
a
\"
:
\"
A
\"
,
\"
b
\"
:
\"
B
\"
,
\"
c
\"
:
\"
C
\"
,
\"
d
\"
:
\"
D
\"
,
\"
e
\"
:
\"
E
\"
}"
)
==
json
::
from_cbor
(
std
::
vector
<
uint8_t
>
({
0xa5
,
0x61
,
0x61
,
0x61
,
0x41
,
0x61
,
0x62
,
0x61
,
0x42
,
0x61
,
0x63
,
0x61
,
0x43
,
0x61
,
0x64
,
0x61
,
0x44
,
0x61
,
0x65
,
0x61
,
0x45
})));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment