blob: 81b905312500e81c945fdbfd7b6b0aabf67f9d6e [file] [log] [blame]
Laurence Lundbladef156fb82018-10-01 09:47:03 -07001/*==============================================================================
2 run_tests.c -- test aggregator and results reporting
Laurence Lundblade3aee3a32018-12-17 16:17:45 -08003
Laurence Lundblade11654912024-05-09 11:49:24 -07004 Copyright (c) 2018-2024, Laurence Lundblade. All rights reserved.
Máté Tóth-Pálef5f07a2021-09-17 19:31:37 +02005 Copyright (c) 2021, Arm Limited. All rights reserved.
Laurence Lundblade035bd782019-01-21 17:01:31 -08006
Laurence Lundbladea3fd49f2019-01-21 10:16:22 -08007 SPDX-License-Identifier: BSD-3-Clause
Laurence Lundblade035bd782019-01-21 17:01:31 -08008
Laurence Lundbladea3fd49f2019-01-21 10:16:22 -08009 See BSD-3-Clause license in README.md
Laurence Lundbladef156fb82018-10-01 09:47:03 -070010
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -080011 Created on 9/30/18
Laurence Lundbladeee851742020-01-08 08:37:05 -080012 =============================================================================*/
Laurence Lundbladef156fb82018-10-01 09:47:03 -070013
Laurence Lundbladef156fb82018-10-01 09:47:03 -070014#include "run_tests.h"
15#include "UsefulBuf.h"
16#include <stdbool.h>
17
Laurence Lundblade2d85ce42018-10-12 14:12:47 +080018#include "float_tests.h"
Laurence Lundblade9e3651c2018-10-10 11:49:55 +080019#include "qcbor_decode_tests.h"
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053020#include "qcbor_encode_tests.h"
21#include "UsefulBuf_Tests.h"
Laurence Lundbladef156fb82018-10-01 09:47:03 -070022
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -080023
Laurence Lundbladedd6e76e2021-03-10 01:54:01 -070024
25// For size printing and some conditionals
26#include "qcbor/qcbor_encode.h"
27#include "qcbor/qcbor_decode.h"
28#include "qcbor/qcbor_spiffy_decode.h"
29
Laurence Lundbladef156fb82018-10-01 09:47:03 -070030/*
Laurence Lundbladea65b4822019-09-08 12:17:03 -070031 Test configuration
32 */
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -080033
Laurence Lundbladec5fef682020-01-25 11:38:45 -080034typedef int32_t (test_fun_t)(void);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053035typedef const char * (test_fun2_t)(void);
36
Laurence Lundbladef156fb82018-10-01 09:47:03 -070037
Laurence Lundbladea2e29072018-12-30 09:20:06 -080038#define TEST_ENTRY(test_name) {#test_name, test_name, true}
39#define TEST_ENTRY_DISABLED(test_name) {#test_name, test_name, false}
40
Laurence Lundbladef156fb82018-10-01 09:47:03 -070041typedef struct {
Laurence Lundbladea2e29072018-12-30 09:20:06 -080042 const char *szTestName;
Laurence Lundbladef156fb82018-10-01 09:47:03 -070043 test_fun_t *test_fun;
Laurence Lundbladea2e29072018-12-30 09:20:06 -080044 bool bEnabled;
Laurence Lundbladef156fb82018-10-01 09:47:03 -070045} test_entry;
46
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053047typedef struct {
48 const char *szTestName;
49 test_fun2_t *test_fun;
Laurence Lundbladea2e29072018-12-30 09:20:06 -080050 bool bEnabled;
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053051} test_entry2;
52
Laurence Lundbladea65b4822019-09-08 12:17:03 -070053
54static test_entry2 s_tests2[] = {
Máté Tóth-Pálef5f07a2021-09-17 19:31:37 +020055#ifndef USEFULBUF_DISABLE_ALL_FLOAT
Laurence Lundblade7566b9f2018-10-12 09:13:32 +080056 TEST_ENTRY(UBUTest_CopyUtil),
Máté Tóth-Pálef5f07a2021-09-17 19:31:37 +020057#endif /* USEFULBUF_DISABLE_ALL_FLOAT */
Laurence Lundblade7566b9f2018-10-12 09:13:32 +080058 TEST_ENTRY(UOBTest_NonAdversarial),
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053059 TEST_ENTRY(TestBasicSanity),
Laurence Lundblade7566b9f2018-10-12 09:13:32 +080060 TEST_ENTRY(UOBTest_BoundaryConditionsTest),
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053061 TEST_ENTRY(UBMacroConversionsTest),
62 TEST_ENTRY(UBUtilTests),
Laurence Lundbladeb24faef2022-04-26 11:03:08 -060063 TEST_ENTRY(UIBTest_IntegerFormat),
64 TEST_ENTRY(UBAdvanceTest)
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053065};
66
67
Laurence Lundbladea65b4822019-09-08 12:17:03 -070068static test_entry s_tests[] = {
Laurence Lundbladeec290b82024-06-10 11:10:54 -070069#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundbladea29f45a2024-05-14 15:55:19 -070070 TEST_ENTRY(GetMapAndArrayTest),
Laurence Lundblade11654912024-05-09 11:49:24 -070071 TEST_ENTRY(TellTests),
Laurence Lundbladeec290b82024-06-10 11:10:54 -070072 TEST_ENTRY(ParseMapAsArrayTest),
73 TEST_ENTRY(SpiffyDateDecodeTest),
74#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundblade11654912024-05-09 11:49:24 -070075 TEST_ENTRY(ErrorHandlingTests),
76 TEST_ENTRY(OpenCloseBytesTest),
Laurence Lundblade0750fc42020-06-20 21:02:34 -070077 TEST_ENTRY(EnterBstrTest),
Laurence Lundblade9c905e82020-04-25 11:31:38 -070078 TEST_ENTRY(IntegerConvertTest),
Laurence Lundbladebb87be22020-04-09 19:15:32 -070079 TEST_ENTRY(EnterMapTest),
Laurence Lundbladec9f0fbc2020-02-07 10:48:33 +000080 TEST_ENTRY(QCBORHeadTest),
Laurence Lundblade9916b1b2019-09-07 22:33:25 -070081 TEST_ENTRY(EmptyMapsAndArraysTest),
Laurence Lundbladebb1062e2019-08-12 23:28:54 -070082 TEST_ENTRY(NotWellFormedTests),
Laurence Lundbladee2c893c2020-12-26 17:41:53 -080083#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_ARRAYS
Laurence Lundbladea44d5062018-10-17 18:45:12 +053084 TEST_ENTRY(IndefiniteLengthNestTest),
Laurence Lundbladee2c893c2020-12-26 17:41:53 -080085 TEST_ENTRY(IndefiniteLengthArrayMapTest),
Laurence Lundbladea44d5062018-10-17 18:45:12 +053086 TEST_ENTRY(NestedMapTestIndefLen),
Laurence Lundbladee2c893c2020-12-26 17:41:53 -080087#endif /* QCBOR_DISABLE_INDEFINITE_LENGTH_ARRAYS */
Laurence Lundblade3888f002024-06-12 21:20:56 -070088 TEST_ENTRY(SimpleValueDecodeTests),
Laurence Lundblade3a6042e2019-06-28 19:58:04 -070089 TEST_ENTRY(DecodeFailureTests),
Laurence Lundblade0fb6c6d2018-10-12 22:02:05 +080090 TEST_ENTRY(EncodeRawTest),
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053091 TEST_ENTRY(RTICResultsTest),
92 TEST_ENTRY(MapEncodeTest),
93 TEST_ENTRY(ArrayNestingTest1),
94 TEST_ENTRY(ArrayNestingTest2),
Laurence Lundbladed8e1c512020-11-04 23:03:44 -080095#ifndef QCBOR_DISABLE_ENCODE_USAGE_GUARDS
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053096 TEST_ENTRY(ArrayNestingTest3),
Laurence Lundbladed8e1c512020-11-04 23:03:44 -080097#endif /* QCBOR_DISABLE_ENCODE_USAGE_GUARDS */
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053098 TEST_ENTRY(EncodeDateTest),
99 TEST_ENTRY(SimpleValuesTest1),
100 TEST_ENTRY(IntegerValuesTest1),
101 TEST_ENTRY(AllAddMethodsTest),
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800102 TEST_ENTRY(ParseTooDeepArrayTest),
103 TEST_ENTRY(ComprehensiveInputTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700104#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800105 TEST_ENTRY(ParseMapTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700106#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundblade369b90a2018-10-22 02:04:37 +0530107 TEST_ENTRY(BasicEncodeTest),
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800108 TEST_ENTRY(NestedMapTest),
109 TEST_ENTRY(BignumParseTest),
Laurence Lundblade37286c02022-09-03 10:05:02 -0700110#ifndef QCBOR_DISABLE_TAGS
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800111 TEST_ENTRY(OptTagParseTest),
112 TEST_ENTRY(DateParseTest),
Laurence Lundblade37286c02022-09-03 10:05:02 -0700113 TEST_ENTRY(DecodeTaggedTypeTests),
114#endif /* QCBOR_DISABLE_TAGS */
Laurence Lundblade9e3651c2018-10-10 11:49:55 +0800115 TEST_ENTRY(ShortBufferParseTest2),
116 TEST_ENTRY(ShortBufferParseTest),
117 TEST_ENTRY(ParseDeepArrayTest),
118 TEST_ENTRY(SimpleArrayTest),
119 TEST_ENTRY(IntegerValuesParseTest),
Laurence Lundbladef6da33c2020-11-26 18:15:05 -0800120#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS
121 TEST_ENTRY(AllocAllStringsTest),
Laurence Lundbladea44d5062018-10-17 18:45:12 +0530122 TEST_ENTRY(MemPoolTest),
123 TEST_ENTRY(IndefiniteLengthStringTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700124#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundbladef6da33c2020-11-26 18:15:05 -0800125 TEST_ENTRY(SpiffyIndefiniteLengthStringsTests),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700126#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundbladef6da33c2020-11-26 18:15:05 -0800127 TEST_ENTRY(SetUpAllocatorTest),
David Navarro9123e5b2022-03-28 16:04:03 +0200128 TEST_ENTRY(CBORTestIssue134),
Laurence Lundbladef6da33c2020-11-26 18:15:05 -0800129#endif /* #ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS */
Máté Tóth-Pálef5f07a2021-09-17 19:31:37 +0200130#ifndef USEFULBUF_DISABLE_ALL_FLOAT
Laurence Lundblade83dbf5c2024-01-07 19:17:52 -0700131#ifndef QCBOR_DISABLE_PREFERRED_FLOAT
132 TEST_ENTRY(HalfPrecisionAgainstRFCCodeTest),
133 TEST_ENTRY(FloatValuesTests),
134#endif /* QCBOR_DISABLE_PREFERRED_FLOAT */
Laurence Lundblade585127a2020-07-15 03:25:24 -0700135 TEST_ENTRY(GeneralFloatEncodeTests),
Laurence Lundblade02fcf312020-07-17 02:49:46 -0700136 TEST_ENTRY(GeneralFloatDecodeTests),
adam280947057c42022-07-23 04:53:27 +0200137#endif /* USEFULBUF_DISABLE_ALL_FLOAT */
Laurence Lundblade369b90a2018-10-22 02:04:37 +0530138 TEST_ENTRY(BstrWrapTest),
139 TEST_ENTRY(BstrWrapErrorTest),
140 TEST_ENTRY(BstrWrapNestTest),
141 TEST_ENTRY(CoseSign1TBSTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700142#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundbladeea567ac2018-12-09 14:03:21 -0800143 TEST_ENTRY(StringDecoderModeFailTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700144#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800145 TEST_ENTRY_DISABLED(BigComprehensiveInputTest),
Laurence Lundbladea4308a82020-10-03 18:08:57 -0700146 TEST_ENTRY_DISABLED(TooLargeInputTest),
Laurence Lundblade1ef8b2d2018-12-14 23:13:34 -0800147 TEST_ENTRY(EncodeErrorTests),
Laurence Lundbladecbd7d132024-05-19 11:11:22 -0700148#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_ARRAYS
Laurence Lundblade154a76c2024-08-22 21:43:35 -0700149 TEST_ENTRY(IndefiniteLengthTest),
Laurence Lundbladecbd7d132024-05-19 11:11:22 -0700150#endif
Jan Jongboom5d827882019-08-07 12:51:15 +0200151 TEST_ENTRY(EncodeLengthThirtyoneTest),
Laurence Lundbladee3553422020-05-02 11:11:17 -0700152 TEST_ENTRY(CBORSequenceDecodeTests),
Laurence Lundbladee15326f2020-06-15 15:50:23 -0700153 TEST_ENTRY(IntToTests),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700154#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundbladecf41c522021-02-20 10:19:07 -0700155 TEST_ENTRY(PeekAndRewindTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700156#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundblade37286c02022-09-03 10:05:02 -0700157#ifndef QCBOR_DISABLE_EXP_AND_MANTISSA
Laurence Lundblade59289e52019-12-30 13:44:37 -0800158 TEST_ENTRY(ExponentAndMantissaDecodeTests),
Laurence Lundblade37286c02022-09-03 10:05:02 -0700159#ifndef QCBOR_DISABLE_TAGS
Laurence Lundblade59289e52019-12-30 13:44:37 -0800160 TEST_ENTRY(ExponentAndMantissaDecodeFailTests),
Laurence Lundblade37286c02022-09-03 10:05:02 -0700161#endif /* QCBOR_DISABLE_TAGS */
Laurence Lundblade59289e52019-12-30 13:44:37 -0800162 TEST_ENTRY(ExponentAndMantissaEncodeTests),
Laurence Lundbladedd6e76e2021-03-10 01:54:01 -0700163#endif /* QCBOR_DISABLE_EXP_AND_MANTISSA */
Michael Richardson87de9af2021-02-18 23:13:31 -0500164 TEST_ENTRY(ParseEmptyMapInMapTest),
Laurence Lundbladee2226742024-08-16 10:50:23 -0700165 TEST_ENTRY(SubStringTest),
Laurence Lundblade9f9c3732021-03-23 09:38:46 -0700166 TEST_ENTRY(BoolTest)
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700167};
168
169
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700170
171
172/*
173 Convert a number up to 999999999 to a string. This is so sprintf doesn't
174 have to be linked in so as to minimized dependencies even in test code.
Laurence Lundblade6216b1b2019-09-27 11:24:39 +0900175
176 StringMem should be 12 bytes long, 9 for digits, 1 for minus and
177 1 for \0 termination.
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700178 */
179static const char *NumToString(int32_t nNum, UsefulBuf StringMem)
180{
181 const int32_t nMax = 1000000000;
182
183 UsefulOutBuf OutBuf;
184 UsefulOutBuf_Init(&OutBuf, StringMem);
185
186 if(nNum < 0) {
187 UsefulOutBuf_AppendByte(&OutBuf, '-');
188 nNum = -nNum;
189 }
190 if(nNum > nMax-1) {
191 return "XXX";
192 }
193
194 bool bDidSomeOutput = false;
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800195 for(int32_t n = nMax; n > 0; n/=10) {
196 int nDigitValue = nNum/n;
197 if(nDigitValue || bDidSomeOutput){
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700198 bDidSomeOutput = true;
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800199 UsefulOutBuf_AppendByte(&OutBuf, (uint8_t)('0' + nDigitValue));
200 nNum -= nDigitValue * n;
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700201 }
202 }
203 if(!bDidSomeOutput){
204 UsefulOutBuf_AppendByte(&OutBuf, '0');
205 }
206 UsefulOutBuf_AppendByte(&OutBuf, '\0');
207
208 return UsefulOutBuf_GetError(&OutBuf) ? "" : StringMem.ptr;
209}
210
211
212/*
213 Public function. See run_test.h.
214 */
Laurence Lundblade29501b72020-01-16 15:05:18 -0800215int RunTestsQCBOR(const char *szTestNames[],
Laurence Lundbladeee851742020-01-08 08:37:05 -0800216 OutputStringCB pfOutput,
217 void *poutCtx,
218 int *pNumTestsRun)
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700219{
220 int nTestsFailed = 0;
221 int nTestsRun = 0;
Laurence Lundblade59289e52019-12-30 13:44:37 -0800222
Laurence Lundblade6216b1b2019-09-27 11:24:39 +0900223 UsefulBuf_MAKE_STACK_UB(StringStorage, 12);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530224
225 test_entry2 *t2;
226 const test_entry2 *s_tests2_end = s_tests2 + sizeof(s_tests2)/sizeof(test_entry2);
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800227
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530228 for(t2 = s_tests2; t2 < s_tests2_end; t2++) {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800229 if(szTestNames[0]) {
230 // Some tests have been named
231 const char **szRequestedNames;
232 for(szRequestedNames = szTestNames; *szRequestedNames; szRequestedNames++) {
233 if(!strcmp(t2->szTestName, *szRequestedNames)) {
234 break; // Name matched
235 }
236 }
237 if(*szRequestedNames == NULL) {
238 // Didn't match this test
239 continue;
240 }
241 } else {
242 // no tests named, but don't run "disabled" tests
243 if(!t2->bEnabled) {
244 // Don't run disabled tests when all tests are being run
245 // as indicated by no specific test names being given
246 continue;
247 }
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800248 }
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800249
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800250 const char * szTestResult = (t2->test_fun)();
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530251 nTestsRun++;
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800252 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800253 (*pfOutput)(t2->szTestName, poutCtx, 0);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530254 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800255
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800256 if(szTestResult) {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800257 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800258 (*pfOutput)(" FAILED (returned ", poutCtx, 0);
259 (*pfOutput)(szTestResult, poutCtx, 0);
Laurence Lundbladedf1c1cf2019-01-17 11:55:05 -0800260 (*pfOutput)(")", poutCtx, 1);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530261 }
262 nTestsFailed++;
263 } else {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800264 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800265 (*pfOutput)( " PASSED", poutCtx, 1);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530266 }
267 }
268 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800269
270
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700271 test_entry *t;
272 const test_entry *s_tests_end = s_tests + sizeof(s_tests)/sizeof(test_entry);
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800273
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700274 for(t = s_tests; t < s_tests_end; t++) {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800275 if(szTestNames[0]) {
276 // Some tests have been named
277 const char **szRequestedNames;
278 for(szRequestedNames = szTestNames; *szRequestedNames; szRequestedNames++) {
279 if(!strcmp(t->szTestName, *szRequestedNames)) {
280 break; // Name matched
281 }
282 }
283 if(*szRequestedNames == NULL) {
284 // Didn't match this test
285 continue;
286 }
287 } else {
288 // no tests named, but don't run "disabled" tests
289 if(!t->bEnabled) {
290 // Don't run disabled tests when all tests are being run
291 // as indicated by no specific test names being given
292 continue;
293 }
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800294 }
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800295
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800296 int32_t nTestResult = (t->test_fun)();
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700297 nTestsRun++;
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800298 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800299 (*pfOutput)(t->szTestName, poutCtx, 0);
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700300 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800301
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800302 if(nTestResult) {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800303 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800304 (*pfOutput)(" FAILED (returned ", poutCtx, 0);
305 (*pfOutput)(NumToString(nTestResult, StringStorage), poutCtx, 0);
306 (*pfOutput)(")", poutCtx, 1);
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700307 }
308 nTestsFailed++;
309 } else {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800310 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800311 (*pfOutput)( " PASSED", poutCtx, 1);
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700312 }
313 }
314 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800315
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700316 if(pNumTestsRun) {
317 *pNumTestsRun = nTestsRun;
318 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800319
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800320 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800321 (*pfOutput)( "SUMMARY: ", poutCtx, 0);
322 (*pfOutput)( NumToString(nTestsRun, StringStorage), poutCtx, 0);
323 (*pfOutput)( " tests run; ", poutCtx, 0);
324 (*pfOutput)( NumToString(nTestsFailed, StringStorage), poutCtx, 0);
325 (*pfOutput)( " tests failed", poutCtx, 1);
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700326 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800327
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700328 return nTestsFailed;
329}
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800330
331
Laurence Lundblade844bb5c2020-03-01 17:27:25 -0800332
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800333
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700334/*
335 Public function. See run_test.h.
336 */
Laurence Lundbladeee851742020-01-08 08:37:05 -0800337static void PrintSize(const char *szWhat,
338 uint32_t uSize,
339 OutputStringCB pfOutput,
340 void *pOutCtx)
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800341{
Laurence Lundbladed396f622019-01-12 17:12:29 -0800342 UsefulBuf_MAKE_STACK_UB(buffer, 20);
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800343
Laurence Lundbladed396f622019-01-12 17:12:29 -0800344 (*pfOutput)(szWhat, pOutCtx, 0);
345 (*pfOutput)(" ", pOutCtx, 0);
Laurence Lundblade06350ea2020-01-27 19:32:40 -0800346 (*pfOutput)(NumToString((int32_t)uSize, buffer), pOutCtx, 0);
Laurence Lundbladed396f622019-01-12 17:12:29 -0800347 (*pfOutput)("", pOutCtx, 1);
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800348}
349
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700350
351/*
352 Public function. See run_test.h.
353 */
Laurence Lundblade29501b72020-01-16 15:05:18 -0800354void PrintSizesQCBOR(OutputStringCB pfOutput, void *pOutCtx)
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800355{
Laurence Lundbladeee851742020-01-08 08:37:05 -0800356 // These will never be large so cast is safe
357 PrintSize("sizeof(QCBORTrackNesting)", (uint32_t)sizeof(QCBORTrackNesting), pfOutput, pOutCtx);
Laurence Lundbladed396f622019-01-12 17:12:29 -0800358 PrintSize("sizeof(QCBOREncodeContext)", (uint32_t)sizeof(QCBOREncodeContext), pfOutput, pOutCtx);
359 PrintSize("sizeof(QCBORDecodeNesting)", (uint32_t)sizeof(QCBORDecodeNesting), pfOutput, pOutCtx);
360 PrintSize("sizeof(QCBORDecodeContext)", (uint32_t)sizeof(QCBORDecodeContext), pfOutput, pOutCtx);
Laurence Lundbladeee851742020-01-08 08:37:05 -0800361 PrintSize("sizeof(QCBORItem)", (uint32_t)sizeof(QCBORItem), pfOutput, pOutCtx);
362 PrintSize("sizeof(QCBORTagListIn)", (uint32_t)sizeof(QCBORTagListIn), pfOutput, pOutCtx);
363 PrintSize("sizeof(QCBORTagListOut)", (uint32_t)sizeof(QCBORTagListOut), pfOutput, pOutCtx);
Laurence Lundblade8e36f812024-01-26 10:59:29 -0700364 PrintSize("sizeof(TagSpecification)", (uint32_t)sizeof(QCBOR_Private_TagSpec),pfOutput, pOutCtx);
Laurence Lundbladed396f622019-01-12 17:12:29 -0800365 (*pfOutput)("", pOutCtx, 1);
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800366}