integer conversion tests passing (but incomplete)
diff --git a/test/qcbor_decode_tests.c b/test/qcbor_decode_tests.c
index 17bf79d..d0589cb 100644
--- a/test/qcbor_decode_tests.c
+++ b/test/qcbor_decode_tests.c
@@ -4000,7 +4000,7 @@
QCBORError uErrorDouble;
};
-static struct NumberConversion NumberConversions[] = {
+static const struct NumberConversion NumberConversions[] = {
{
"Big float 3 * 2^^2",
{(uint8_t[]){0xC5, 0x82, 0x02, 0x03}, 4},
@@ -4107,71 +4107,71 @@
-
int32_t IntegerConvertTest2()
{
const size_t nNumTests = sizeof(NumberConversions)/sizeof(struct NumberConversion);
- for(struct NumberConversion *pF = NumberConversions; pF < NumberConversions + nNumTests; pF++) {
+ for(const struct NumberConversion *pF = NumberConversions; pF < NumberConversions + nNumTests; pF++) {
+ const size_t nIndex = (size_t)(pF - NumberConversions)/sizeof(struct NumberConversion);
+
// Set up the decoding context including a memory pool so that
// indefinite length items can be checked
QCBORDecodeContext DCtx;
- QCBORDecode_Init(&DCtx, pF->CBOR, QCBOR_DECODE_MODE_NORMAL);
UsefulBuf_MAKE_STACK_UB(Pool, 100);
+
+ /* ----- test conversion to int64_t ------ */
+ QCBORDecode_Init(&DCtx, pF->CBOR, QCBOR_DECODE_MODE_NORMAL);
QCBORError nCBORError = QCBORDecode_SetMemPool(&DCtx, Pool, 0);
if(nCBORError) {
- return -9;
+ return (int32_t)(1000+nIndex);
}
int64_t nInt;
- DCtx.uLastError = 0;
QCBORDecode_GetInt64ConvertAll(&DCtx, 0xffff, &nInt);
if(QCBORDecode_GetError(&DCtx) != pF->uErrorInt64) {
- return -99;
+ return (int32_t)(2000+nIndex);
}
if(pF->uErrorInt64 == QCBOR_SUCCESS && pF->nConvertedToInt64 != nInt) {
- return -888;
+ return (int32_t)(3000+nIndex);
}
-
+ /* ----- test conversion to uint64_t ------ */
QCBORDecode_Init(&DCtx, pF->CBOR, QCBOR_DECODE_MODE_NORMAL);
nCBORError = QCBORDecode_SetMemPool(&DCtx, Pool, 0);
if(nCBORError) {
- return -9;
+ return (int32_t)(1000+nIndex);
}
uint64_t uInt;
- DCtx.uLastError = 0;
QCBORDecode_GetUInt64ConvertAll(&DCtx, 0xffff, &uInt);
if(QCBORDecode_GetError(&DCtx) != pF->uErrorUint64) {
- return -99;
+ return (int32_t)(4000+nIndex);
}
if(pF->uErrorUint64 == QCBOR_SUCCESS && pF->uConvertToUInt64 != uInt) {
- return -888;
+ return (int32_t)(5000+nIndex);
}
-
+ /* ----- test conversion to double ------ */
QCBORDecode_Init(&DCtx, pF->CBOR, QCBOR_DECODE_MODE_NORMAL);
nCBORError = QCBORDecode_SetMemPool(&DCtx, Pool, 0);
if(nCBORError) {
- return -9;
+ return (int32_t)(1000+nIndex);
}
double d;
- DCtx.uLastError = 0;
QCBORDecode_GetDoubleConvertAll(&DCtx, 0xffff, &d);
if(QCBORDecode_GetError(&DCtx) != pF->uErrorDouble) {
- return -99;
+ return (int32_t)(6000+nIndex);
}
if(pF->uErrorDouble == QCBOR_SUCCESS) {
if(isnan(pF->dConvertToDouble)) {
// NaN's can't be compared for equality. A NaN is
// never equal to anything including another NaN
if(!isnan(d)) {
- return -4;
+ return (int32_t)(7000+nIndex);
}
} else {
// TODO: this comparison may need a margin of error
if(pF->dConvertToDouble != d) {
- return -5;
+ return (int32_t)(8000+nIndex);
}
}
}
@@ -4182,7 +4182,10 @@
int32_t IntegerConvertTest()
{
- (void)IntegerConvertTest2();
+ int32_t nReturn = IntegerConvertTest2();
+ if(nReturn) {
+ return nReturn;
+ }
QCBORDecodeContext DCtx;
QCBORError nCBORError;
@@ -4291,7 +4294,7 @@
// 4([9223372036854775807, -4759477275222530853137]),
QCBORDecode_GetUInt64ConvertAll(&DCtx, QCBOR_CONVERT_TYPE_DECIMAL_FRACTION, &uinteger);
- if(QCBORDecode_GetError(&DCtx) != QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW) {
+ if(QCBORDecode_GetError(&DCtx) != QCBOR_ERR_NUMBER_SIGN_CONVERSION) {
return -2;
}
DCtx.uLastError = 0; // TODO: a method for this
@@ -4312,14 +4315,14 @@
// 5([-9223372036854775807, -4759477275222530853137])
QCBORDecode_GetUInt64ConvertAll(&DCtx, QCBOR_CONVERT_TYPE_DECIMAL_FRACTION|QCBOR_CONVERT_TYPE_BIGFLOAT, &uinteger);
- if(QCBORDecode_GetError(&DCtx) != QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW) {
+ if(QCBORDecode_GetError(&DCtx) != QCBOR_ERR_NUMBER_SIGN_CONVERSION) {
return -2;
}
DCtx.uLastError = 0; // TODO: a method for this
// 5([ 9223372036854775806, -4759477275222530853137])
QCBORDecode_GetUInt64ConvertAll(&DCtx, QCBOR_CONVERT_TYPE_DECIMAL_FRACTION|QCBOR_CONVERT_TYPE_BIGFLOAT, &uinteger);
- if(QCBORDecode_GetError(&DCtx) != QCBOR_ERR_CONVERSION_UNDER_OVER_FLOW) {
+ if(QCBORDecode_GetError(&DCtx) != QCBOR_ERR_NUMBER_SIGN_CONVERSION) {
return -2;
}
DCtx.uLastError = 0; // TODO: a method for this