100% test coverage for number encode (#333)
* 100% test coverage for number encode
* Fix ifdef fan out
---------
Co-authored-by: Laurence Lundblade <lgl@securitytheory.com>
diff --git a/test/float_tests.c b/test/float_tests.c
index 302b328..c077b0a 100644
--- a/test/float_tests.c
+++ b/test/float_tests.c
@@ -299,7 +299,7 @@
struct FloatTestCase {
double dNumber;
- float fNumber; /* Only used when preferred is disabled */
+ float fNumber;
UsefulBufC Preferred;
UsefulBufC NotPreferred;
UsefulBufC CDE;
@@ -615,11 +615,11 @@
for(uTestIndex = 0; FloatTestCases[uTestIndex].Preferred.len != 0; uTestIndex++) {
pTestCase = &FloatTestCases[uTestIndex];
- if(uTestIndex == 16) {
+ if(uTestIndex == 2) {
uDecoded = 1;
}
- /* Preferred Encode */
+ /* Preferred encode of double precision */
QCBOREncode_Init(&EnCtx, TestOutBuffer);
QCBOREncode_AddDouble(&EnCtx, pTestCase->dNumber);
uErr = QCBOREncode_Finish(&EnCtx, &TestOutput);
@@ -633,132 +633,171 @@
}
if(CompareToCarsten(UsefulBufUtil_CopyDoubleToUint64(pTestCase->dNumber), TestOutput, pTestCase->Preferred)) {
- return MakeTestResultCode(uTestIndex, 202, 200);
+ return MakeTestResultCode(uTestIndex, 3, 200);
}
#else /* ! QCBOR_DISABLE_PREFERRED_FLOAT */
if(UsefulBuf_Compare(TestOutput, pTestCase->NotPreferred)) {
- return MakeTestResultCode(uTestIndex, 3, 200);
+ return MakeTestResultCode(uTestIndex, 4, 200);
}
#endif /* ! QCBOR_DISABLE_PREFERRED_FLOAT */
- /* Non-Preferred Encode */
+
+ /* Preferred encode of single precision */
+ if(pTestCase->fNumber != 0.0) {
+ QCBOREncode_Init(&EnCtx, TestOutBuffer);
+ QCBOREncode_AddFloat(&EnCtx, pTestCase->fNumber);
+ uErr = QCBOREncode_Finish(&EnCtx, &TestOutput);
+
+ if(uErr != QCBOR_SUCCESS) {
+ return MakeTestResultCode(uTestIndex, 10, uErr);;
+ }
+#ifndef QCBOR_DISABLE_PREFERRED_FLOAT
+ if(UsefulBuf_Compare(TestOutput, pTestCase->Preferred)) {
+ return MakeTestResultCode(uTestIndex, 11, 200);
+ }
+
+ if(CompareToCarsten(UsefulBufUtil_CopyDoubleToUint64(pTestCase->dNumber), TestOutput, pTestCase->Preferred)) {
+ return MakeTestResultCode(uTestIndex, 12, 200);
+ }
+#else /* ! QCBOR_DISABLE_PREFERRED_FLOAT */
+ /* no non-preferred serialization for singles to check against */
+#endif /* ! QCBOR_DISABLE_PREFERRED_FLOAT */
+ }
+
+
+ /* Non-preferred encode of double */
QCBOREncode_Init(&EnCtx, TestOutBuffer);
QCBOREncode_AddDoubleNoPreferred(&EnCtx, pTestCase->dNumber);
uErr = QCBOREncode_Finish(&EnCtx, &TestOutput);
-
if(uErr != QCBOR_SUCCESS) {
- return MakeTestResultCode(uTestIndex, 4, uErr);;
+ return MakeTestResultCode(uTestIndex, 20, uErr);;
}
if(UsefulBuf_Compare(TestOutput, pTestCase->NotPreferred)) {
- return MakeTestResultCode(uTestIndex, 5, 200);
+ return MakeTestResultCode(uTestIndex, 21, 200);
}
#ifndef QCBOR_DISABLE_PREFERRED_FLOAT
- /* Deterministic Encode */
+ /* Deterministic encode */
QCBOREncode_Init(&EnCtx, TestOutBuffer);
QCBOREncode_Config(&EnCtx, QCBOR_ENCODE_CONFIG_CDE);
QCBOREncode_AddDouble(&EnCtx, pTestCase->dNumber);
uErr = QCBOREncode_Finish(&EnCtx, &TestOutput);
if(uErr != QCBOR_SUCCESS) {
- return MakeTestResultCode(uTestIndex, 6, uErr);;
+ return MakeTestResultCode(uTestIndex, 30, uErr);;
}
if(UsefulBuf_Compare(TestOutput, pTestCase->CDE)) {
- return MakeTestResultCode(uTestIndex, 7, 200);
+ return MakeTestResultCode(uTestIndex, 31, 200);
}
- /* dCBOR Encode */
+ /* dCBOR encode of double */
QCBOREncode_Init(&EnCtx, TestOutBuffer);
QCBOREncode_Config(&EnCtx, QCBOR_ENCODE_CONFIG_DCBOR);
QCBOREncode_AddDouble(&EnCtx, pTestCase->dNumber);
uErr = QCBOREncode_Finish(&EnCtx, &TestOutput);
if(uErr != QCBOR_SUCCESS) {
- return MakeTestResultCode(uTestIndex, 8, uErr);;
+ return MakeTestResultCode(uTestIndex, 40, uErr);;
}
if(UsefulBuf_Compare(TestOutput, pTestCase->DCBOR)) {
- return MakeTestResultCode(uTestIndex, 9, 200);
+ return MakeTestResultCode(uTestIndex, 41, 200);
}
+
+ /* dCBOR encode of single */
+ if(pTestCase->fNumber != 0.0) {
+ QCBOREncode_Init(&EnCtx, TestOutBuffer);
+ QCBOREncode_Config(&EnCtx, QCBOR_ENCODE_CONFIG_DCBOR);
+ QCBOREncode_AddFloat(&EnCtx, pTestCase->fNumber);
+ uErr = QCBOREncode_Finish(&EnCtx, &TestOutput);
+
+ if(uErr != QCBOR_SUCCESS) {
+ return MakeTestResultCode(uTestIndex, 50, uErr);;
+ }
+ if(UsefulBuf_Compare(TestOutput, pTestCase->DCBOR)) {
+ return MakeTestResultCode(uTestIndex, 51, 200);
+ }
+ }
+
#endif /* ! QCBOR_DISABLE_PREFERRED_FLOAT */
- /* Decode Preferred */
+ /* Decode preferred decode */
QCBORDecode_Init(&DCtx, pTestCase->Preferred, 0);
uErr = QCBORDecode_GetNext(&DCtx, &Item);
#ifndef QCBOR_DISABLE_PREFERRED_FLOAT
if(uErr != QCBOR_SUCCESS) {
- return MakeTestResultCode(uTestIndex, 10, uErr);
+ return MakeTestResultCode(uTestIndex, 60, uErr);
}
if(Item.uDataType != QCBOR_TYPE_DOUBLE) {
- return MakeTestResultCode(uTestIndex, 11, 0);
+ return MakeTestResultCode(uTestIndex, 61, 0);
}
if(isnan(pTestCase->dNumber)) {
if(!isnan(Item.val.dfnum)) {
- return MakeTestResultCode(uTestIndex, 12, 0);
+ return MakeTestResultCode(uTestIndex, 62, 0);
}
} else {
if(Item.val.dfnum != pTestCase->dNumber) {
- return MakeTestResultCode(uTestIndex, 13, 0);
+ return MakeTestResultCode(uTestIndex, 63, 0);
}
}
#else /* ! QCBOR_DISABLE_PREFERRED_FLOAT */
if(pTestCase->Preferred.len == 3) {
if(uErr != QCBOR_ERR_PREFERRED_FLOAT_DISABLED) {
- return MakeTestResultCode(uTestIndex, 14, uErr);
+ return MakeTestResultCode(uTestIndex, 64, uErr);
}
} else if(pTestCase->Preferred.len == 5) {
/* When QCBOR_DISABLE_PREFERRED_FLOAT is set, single-precision is not
* converted to double when decoding, so test differently. len == 5
* indicates single-precision in the encoded CBOR. */
if(uErr != QCBOR_SUCCESS) {
- return MakeTestResultCode(uTestIndex, 15, uErr);
+ return MakeTestResultCode(uTestIndex, 65, uErr);
}
if(Item.uDataType != QCBOR_TYPE_FLOAT) {
- return MakeTestResultCode(uTestIndex, 16, 0);
+ return MakeTestResultCode(uTestIndex, 66, 0);
}
if(isnan(pTestCase->dNumber)) {
if(!isnan(Item.val.fnum)) {
- return MakeTestResultCode(uTestIndex, 17, 0);
+ return MakeTestResultCode(uTestIndex, 67, 0);
}
} else {
if(Item.val.fnum != pTestCase->fNumber) {
- return MakeTestResultCode(uTestIndex, 18, 0);
+ return MakeTestResultCode(uTestIndex, 68, 0);
}
}
} else {
if(uErr != QCBOR_SUCCESS) {
- return MakeTestResultCode(uTestIndex, 19, uErr);
+ return MakeTestResultCode(uTestIndex, 69, uErr);
}
if(Item.uDataType != QCBOR_TYPE_DOUBLE) {
- return MakeTestResultCode(uTestIndex, 20, 0);
+ return MakeTestResultCode(uTestIndex, 70, 0);
}
if(isnan(pTestCase->dNumber)) {
if(!isnan(Item.val.dfnum)) {
- return MakeTestResultCode(uTestIndex, 21, 0);
+ return MakeTestResultCode(uTestIndex, 71, 0);
}
} else {
if(Item.val.dfnum != pTestCase->dNumber) {
- return MakeTestResultCode(uTestIndex, 22, 0);
+ return MakeTestResultCode(uTestIndex, 72, 0);
}
}
}
#endif /* ! QCBOR_DISABLE_PREFERRED_FLOAT */
- /* Decode Not Preferred */
+ /* Decode not preferred */
QCBORDecode_Init(&DCtx, pTestCase->NotPreferred, 0);
uErr = QCBORDecode_GetNext(&DCtx, &Item);
if(uErr != QCBOR_SUCCESS) {
- return MakeTestResultCode(uTestIndex, 23, uErr);;
+ return MakeTestResultCode(uTestIndex, 80, uErr);;
}
if(Item.uDataType != QCBOR_TYPE_DOUBLE) {
- return MakeTestResultCode(uTestIndex, 24, 0);
+ return MakeTestResultCode(uTestIndex, 81, 0);
}
if(isnan(pTestCase->dNumber)) {
if(!isnan(Item.val.dfnum)) {
- return MakeTestResultCode(uTestIndex, 25, 0);
+ return MakeTestResultCode(uTestIndex, 82, 0);
}
} else {
if(Item.val.dfnum != pTestCase->dNumber) {
- return MakeTestResultCode(uTestIndex, 26, 0);
+ return MakeTestResultCode(uTestIndex, 83, 0);
}
}
}