Add support for day count dates, RFC 8943 (#106)
This addresses #98
diff --git a/test/qcbor_encode_tests.c b/test/qcbor_encode_tests.c
index 6655aed..18116cb 100644
--- a/test/qcbor_encode_tests.c
+++ b/test/qcbor_encode_tests.c
@@ -1170,69 +1170,102 @@
/*
- 83 # array(3)
- C0 # tag(0)
- 74 # text(20)
- 323031332D30332D32315432303A30343A30305A # "2013-03-21T20:04:00Z"
- C1 # tag(1)
- 1A 514B67B0 # unsigned(1363896240)
- A2 # map(2)
- 78 19 # text(25)
- 53616D706C6520446174652066726F6D205246432033333339 # "Sample Date from RFC 3339"
- C0 # tag(0)
- 77 # text(23)
- 313938352D30342D31325432333A32303A35302E35325A # "1985-04-12T23:20:50.52Z"
- 62 # text(2)
- 5344 # "SD"
- C1 # tag(1)
- 19 03E7 # unsigned(999)
+ * [ "2013-03-21T20:04:00Z",
+ * 0("2013-03-21T20:04:00Z"),
+ * 1363896240,
+ * 1(1363896240),
+ * 100(-10676),
+ * 3994,
+ * 1004("1940-10-09"),
+ * "1980-12-08",
+ * { "Sample Date from RFC 3339": 0("1985-04-12T23:20:50.52Z"),
+ * "SD": 1(999),
+ * "Sample Date from RFC 8943": "1985-04-12",
+ * 42: 1004("1985-04-12T23:20:50.52Z"),
+ * "SY": 100(-10676),
+ * 45: 3994
+ * }
+ * ]
*/
static const uint8_t spExpectedEncodedDates[] = {
- 0x83, 0xc0, 0x74, 0x32, 0x30, 0x31, 0x33, 0x2d, 0x30, 0x33,
- 0x2d, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3a, 0x30, 0x34, 0x3a,
- 0x30, 0x30, 0x5a, 0xc1, 0x1a, 0x51, 0x4b, 0x67, 0xb0, 0xa2,
- 0x78, 0x19, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x20, 0x44,
- 0x61, 0x74, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x52,
- 0x46, 0x43, 0x20, 0x33, 0x33, 0x33, 0x39, 0xc0, 0x77, 0x31,
- 0x39, 0x38, 0x35, 0x2d, 0x30, 0x34, 0x2d, 0x31, 0x32, 0x54,
- 0x32, 0x33, 0x3a, 0x32, 0x30, 0x3a, 0x35, 0x30, 0x2e, 0x35,
- 0x32, 0x5a, 0x62, 0x53, 0x44, 0xc1, 0x19, 0x03, 0xe7
-};
+ 0x89, 0x74, 0x32, 0x30, 0x31, 0x33, 0x2D, 0x30, 0x33, 0x2D,
+ 0x32, 0x31, 0x54, 0x32, 0x30, 0x3A, 0x30, 0x34, 0x3A, 0x30,
+ 0x30, 0x5A, 0xC0, 0x74, 0x32, 0x30, 0x31, 0x33, 0x2D, 0x30,
+ 0x33, 0x2D, 0x32, 0x31, 0x54, 0x32, 0x30, 0x3A, 0x30, 0x34,
+ 0x3A, 0x30, 0x30, 0x5A, 0x1A, 0x51, 0x4B, 0x67, 0xB0, 0xC1,
+ 0x1A, 0x51, 0x4B, 0x67, 0xB0, 0xD8, 0x64, 0x39, 0x29, 0xB3,
+ 0x19, 0x0F, 0x9A, 0xD9, 0x03, 0xEC, 0x6A, 0x31, 0x39, 0x34,
+ 0x30, 0x2D, 0x31, 0x30, 0x2D, 0x30, 0x39, 0x6A, 0x31, 0x39,
+ 0x38, 0x30, 0x2D, 0x31, 0x32, 0x2D, 0x30, 0x38, 0xA6, 0x78,
+ 0x19, 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x44, 0x61,
+ 0x74, 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x52, 0x46,
+ 0x43, 0x20, 0x33, 0x33, 0x33, 0x39, 0xC0, 0x77, 0x31, 0x39,
+ 0x38, 0x35, 0x2D, 0x30, 0x34, 0x2D, 0x31, 0x32, 0x54, 0x32,
+ 0x33, 0x3A, 0x32, 0x30, 0x3A, 0x35, 0x30, 0x2E, 0x35, 0x32,
+ 0x5A, 0x62, 0x53, 0x44, 0xC1, 0x19, 0x03, 0xE7, 0x78, 0x19,
+ 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x44, 0x61, 0x74,
+ 0x65, 0x20, 0x66, 0x72, 0x6F, 0x6D, 0x20, 0x52, 0x46, 0x43,
+ 0x20, 0x38, 0x39, 0x34, 0x33, 0x6A, 0x31, 0x39, 0x38, 0x35,
+ 0x2D, 0x30, 0x34, 0x2D, 0x31, 0x32, 0x18, 0x2A, 0xD9, 0x03,
+ 0xEC, 0x77, 0x31, 0x39, 0x38, 0x35, 0x2D, 0x30, 0x34, 0x2D,
+ 0x31, 0x32, 0x54, 0x32, 0x33, 0x3A, 0x32, 0x30, 0x3A, 0x35,
+ 0x30, 0x2E, 0x35, 0x32, 0x5A, 0x62, 0x53, 0x59, 0xD8, 0x64,
+ 0x39, 0x29, 0xB3, 0x18, 0x2D, 0x19, 0x0F, 0x9A};
int32_t EncodeDateTest()
{
QCBOREncodeContext ECtx;
- int nReturn = 0;
QCBOREncode_Init(&ECtx, UsefulBuf_FROM_BYTE_ARRAY(spBigBuf));
QCBOREncode_OpenArray(&ECtx);
-
- QCBOREncode_AddDateString(&ECtx, "2013-03-21T20:04:00Z"); // from CBOR RFC
- QCBOREncode_AddDateEpoch(&ECtx, 1363896240); // from CBOR RFC
-
+ /* The values are taken from the CBOR RFCs */
+ QCBOREncode_AddTDateString(&ECtx, QCBOR_ENCODE_AS_BORROWED, "2013-03-21T20:04:00Z");
+ QCBOREncode_AddDateString(&ECtx, "2013-03-21T20:04:00Z");
+ QCBOREncode_AddTDateEpoch(&ECtx, QCBOR_ENCODE_AS_BORROWED, 1363896240);
+ QCBOREncode_AddDateEpoch(&ECtx, 1363896240);
+ QCBOREncode_AddTDaysEpoch(&ECtx, QCBOR_ENCODE_AS_TAG, -10676);
+ QCBOREncode_AddTDaysEpoch(&ECtx, QCBOR_ENCODE_AS_BORROWED, 3994);
+ QCBOREncode_AddTDaysString(&ECtx, QCBOR_ENCODE_AS_TAG, "1940-10-09");
+ QCBOREncode_AddTDaysString(&ECtx, QCBOR_ENCODE_AS_BORROWED, "1980-12-08");
QCBOREncode_OpenMap(&ECtx);
- QCBOREncode_AddDateStringToMap(&ECtx, "Sample Date from RFC 3339", "1985-04-12T23:20:50.52Z");
-
+ QCBOREncode_AddDateStringToMap(&ECtx,
+ "Sample Date from RFC 3339",
+ "1985-04-12T23:20:50.52Z");
QCBOREncode_AddDateEpochToMap(&ECtx, "SD", 999);
+ QCBOREncode_AddTDaysStringToMapSZ(&ECtx,
+ "Sample Date from RFC 8943",
+ QCBOR_ENCODE_AS_BORROWED,
+ "1985-04-12");
+ QCBOREncode_AddTDaysStringToMapN(&ECtx,
+ 42,
+ QCBOR_ENCODE_AS_TAG,
+ "1985-04-12T23:20:50.52Z");
+ QCBOREncode_AddTDaysEpochToMapSZ(&ECtx,
+ "SY",
+ QCBOR_ENCODE_AS_TAG,
+ -10676);
+ QCBOREncode_AddTDaysEpochToMapN(&ECtx,
+ 45,
+ QCBOR_ENCODE_AS_BORROWED,
+ 3994);
QCBOREncode_CloseMap(&ECtx);
QCBOREncode_CloseArray(&ECtx);
UsefulBufC ECBOR;
-
if(QCBOREncode_Finish(&ECtx, &ECBOR)) {
- nReturn = -1;
+ return -1;
}
if(CheckResults(ECBOR, spExpectedEncodedDates))
return -2;
- return(nReturn);
+ return 0;
}