blob: f186f57645bae74f22c36dc3325f3081f11808e4 [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 Lundbladeeb3cdef2024-02-17 20:38:55 -08004 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 Lundbladee8f58162024-08-22 10:30:08 -07009 See BSD-3-Clause license in file named "LICENSE"
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),
Laurence Lundbladed6e13022023-11-26 10:14:02 -070064 TEST_ENTRY(UBAdvanceTest),
65 TEST_ENTRY(UOBExtraTests)
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +053066};
67
68
Laurence Lundbladea65b4822019-09-08 12:17:03 -070069static test_entry s_tests[] = {
Laurence Lundblade14ce2282024-07-24 22:13:35 -070070 TEST_ENTRY(BigNumEncodeTests),
Laurence Lundblade9b2ae8a2024-07-12 11:00:20 -070071#ifndef QCBOR_DISABLE_DECODE_CONFORMANCE
72 TEST_ENTRY(DecodeConformanceTests),
73#endif /* ! QCBOR_DISABLE_DECODE_CONFORMANCE */
74 TEST_ENTRY(ErrorHandlingTests),
75 TEST_ENTRY(OpenCloseBytesTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -070076#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundbladed62b8a72024-05-14 17:48:30 -070077 TEST_ENTRY(GetMapAndArrayTest),
78 TEST_ENTRY(TellTests),
Laurence Lundbladea63d1242024-06-19 11:00:00 -070079 TEST_ENTRY(ParseMapAsArrayTest),
Laurence Lundblade9b2ae8a2024-07-12 11:00:20 -070080#ifndef QCBOR_DISABLE_ENCODE_USAGE_GUARDS
81 TEST_ENTRY(ArrayNestingTest3),
82#endif /* QCBOR_DISABLE_ENCODE_USAGE_GUARDS */
Laurence Lundbladeec290b82024-06-10 11:10:54 -070083 TEST_ENTRY(SpiffyDateDecodeTest),
84#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -080085 TEST_ENTRY(EnterBstrTest),
86 TEST_ENTRY(IntegerConvertTest),
87 TEST_ENTRY(EnterMapTest),
88 TEST_ENTRY(QCBORHeadTest),
89 TEST_ENTRY(EmptyMapsAndArraysTest),
90 TEST_ENTRY(NotWellFormedTests),
Laurence Lundbladea63d1242024-06-19 11:00:00 -070091
Laurence Lundbladee2c893c2020-12-26 17:41:53 -080092#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_ARRAYS
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -080093 TEST_ENTRY(IndefiniteLengthNestTest),
94 TEST_ENTRY(IndefiniteLengthArrayMapTest),
95 TEST_ENTRY(NestedMapTestIndefLen),
Laurence Lundblade9b2ae8a2024-07-12 11:00:20 -070096#endif /* ! QCBOR_DISABLE_INDEFINITE_LENGTH_ARRAYS */
Laurence Lundbladea63d1242024-06-19 11:00:00 -070097
98 TEST_ENTRY(SimpleValueDecodeTests),
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -080099 TEST_ENTRY(DecodeFailureTests),
100 TEST_ENTRY(EncodeRawTest),
101 TEST_ENTRY(RTICResultsTest),
102 TEST_ENTRY(MapEncodeTest),
103 TEST_ENTRY(ArrayNestingTest1),
104 TEST_ENTRY(ArrayNestingTest2),
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800105 TEST_ENTRY(EncodeDateTest),
106 TEST_ENTRY(SimpleValuesTest1),
107 TEST_ENTRY(IntegerValuesTest1),
108 TEST_ENTRY(AllAddMethodsTest),
109 TEST_ENTRY(ParseTooDeepArrayTest),
110 TEST_ENTRY(ComprehensiveInputTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700111#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800112 TEST_ENTRY(ParseMapTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700113#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800114 TEST_ENTRY(BasicEncodeTest),
115 TEST_ENTRY(NestedMapTest),
Laurence Lundblade14ce2282024-07-24 22:13:35 -0700116 TEST_ENTRY(BignumDecodeTest),
Laurence Lundbladea63d1242024-06-19 11:00:00 -0700117
Laurence Lundblade37286c02022-09-03 10:05:02 -0700118#ifndef QCBOR_DISABLE_TAGS
Laurence Lundblade721b56e2024-10-22 03:02:04 -0700119 TEST_ENTRY(TagNumberDecodeTest),
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800120 TEST_ENTRY(DateParseTest),
121 TEST_ENTRY(DecodeTaggedTypeTests),
Laurence Lundblade37286c02022-09-03 10:05:02 -0700122#endif /* QCBOR_DISABLE_TAGS */
Laurence Lundbladea63d1242024-06-19 11:00:00 -0700123
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800124 TEST_ENTRY(ShortBufferParseTest2),
125 TEST_ENTRY(ShortBufferParseTest),
126 TEST_ENTRY(ParseDeepArrayTest),
127 TEST_ENTRY(SimpleArrayTest),
128 TEST_ENTRY(IntegerValuesParseTest),
Laurence Lundbladef6da33c2020-11-26 18:15:05 -0800129#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800130 TEST_ENTRY(AllocAllStringsTest),
131 TEST_ENTRY(MemPoolTest),
132 TEST_ENTRY(IndefiniteLengthStringTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700133#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundblade4676f842025-02-09 21:13:50 -0700134 TEST_ENTRY(SpiffyStringTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700135#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800136 TEST_ENTRY(SetUpAllocatorTest),
137 TEST_ENTRY(CBORTestIssue134),
Laurence Lundbladea63d1242024-06-19 11:00:00 -0700138
Laurence Lundbladef6da33c2020-11-26 18:15:05 -0800139#endif /* #ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_STRINGS */
Máté Tóth-Pálef5f07a2021-09-17 19:31:37 +0200140#ifndef USEFULBUF_DISABLE_ALL_FLOAT
Laurence Lundblade83dbf5c2024-01-07 19:17:52 -0700141#ifndef QCBOR_DISABLE_PREFERRED_FLOAT
142 TEST_ENTRY(HalfPrecisionAgainstRFCCodeTest),
143 TEST_ENTRY(FloatValuesTests),
Laurence Lundblade14ce2282024-07-24 22:13:35 -0700144 TEST_ENTRY(PreciseNumbersDecodeTest),
Laurence Lundblade83dbf5c2024-01-07 19:17:52 -0700145#endif /* QCBOR_DISABLE_PREFERRED_FLOAT */
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800146 TEST_ENTRY(GeneralFloatEncodeTests),
147 TEST_ENTRY(GeneralFloatDecodeTests),
adam280947057c42022-07-23 04:53:27 +0200148#endif /* USEFULBUF_DISABLE_ALL_FLOAT */
Laurence Lundbladea63d1242024-06-19 11:00:00 -0700149
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800150 TEST_ENTRY(BstrWrapTest),
151 TEST_ENTRY(BstrWrapErrorTest),
152 TEST_ENTRY(BstrWrapNestTest),
153 TEST_ENTRY(CoseSign1TBSTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700154#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800155 TEST_ENTRY(StringDecoderModeFailTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700156#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800157 TEST_ENTRY_DISABLED(BigComprehensiveInputTest),
158 TEST_ENTRY_DISABLED(TooLargeInputTest),
159 TEST_ENTRY(EncodeErrorTests),
Laurence Lundbladecbd7d132024-05-19 11:11:22 -0700160#ifndef QCBOR_DISABLE_INDEFINITE_LENGTH_ARRAYS
Laurence Lundbladeb95afec2024-08-26 10:51:28 -0700161 TEST_ENTRY(IndefiniteLengthTest),
Laurence Lundbladecbd7d132024-05-19 11:11:22 -0700162#endif
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800163 TEST_ENTRY(EncodeLengthThirtyoneTest),
164 TEST_ENTRY(CBORSequenceDecodeTests),
165 TEST_ENTRY(IntToTests),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700166#ifndef QCBOR_DISABLE_NON_INTEGER_LABELS
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800167 TEST_ENTRY(PeekAndRewindTest),
Laurence Lundbladeec290b82024-06-10 11:10:54 -0700168#endif /* ! QCBOR_DISABLE_NON_INTEGER_LABELS */
Laurence Lundbladea63d1242024-06-19 11:00:00 -0700169
Laurence Lundblade37286c02022-09-03 10:05:02 -0700170#ifndef QCBOR_DISABLE_EXP_AND_MANTISSA
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800171 TEST_ENTRY(ExponentAndMantissaDecodeTests),
Laurence Lundblade37286c02022-09-03 10:05:02 -0700172#ifndef QCBOR_DISABLE_TAGS
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800173 TEST_ENTRY(ExponentAndMantissaDecodeFailTests),
Laurence Lundblade37286c02022-09-03 10:05:02 -0700174#endif /* QCBOR_DISABLE_TAGS */
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800175 TEST_ENTRY(ExponentAndMantissaEncodeTests),
Laurence Lundblade6658c952024-11-14 05:04:37 -0800176#endif /* ! QCBOR_DISABLE_EXP_AND_MANTISSA */
Laurence Lundbladeeb3cdef2024-02-17 20:38:55 -0800177 TEST_ENTRY(SortMapTest),
178#if !defined(USEFULBUF_DISABLE_ALL_FLOAT) && !defined(QCBOR_DISABLE_PREFERRED_FLOAT)
179 TEST_ENTRY(CDETest),
180 TEST_ENTRY(DCBORTest),
181#endif /* ! USEFULBUF_DISABLE_ALL_FLOAT && ! QCBOR_DISABLE_PREFERRED_FLOAT */
Michael Richardson87de9af2021-02-18 23:13:31 -0500182 TEST_ENTRY(ParseEmptyMapInMapTest),
Laurence Lundbladee2226742024-08-16 10:50:23 -0700183 TEST_ENTRY(SubStringTest),
Laurence Lundblade9f9c3732021-03-23 09:38:46 -0700184 TEST_ENTRY(BoolTest)
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700185};
186
187
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700188
189
190/*
191 Convert a number up to 999999999 to a string. This is so sprintf doesn't
192 have to be linked in so as to minimized dependencies even in test code.
Laurence Lundblade6216b1b2019-09-27 11:24:39 +0900193
194 StringMem should be 12 bytes long, 9 for digits, 1 for minus and
195 1 for \0 termination.
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700196 */
197static const char *NumToString(int32_t nNum, UsefulBuf StringMem)
198{
199 const int32_t nMax = 1000000000;
200
201 UsefulOutBuf OutBuf;
202 UsefulOutBuf_Init(&OutBuf, StringMem);
203
204 if(nNum < 0) {
205 UsefulOutBuf_AppendByte(&OutBuf, '-');
206 nNum = -nNum;
207 }
208 if(nNum > nMax-1) {
209 return "XXX";
210 }
211
212 bool bDidSomeOutput = false;
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800213 for(int32_t n = nMax; n > 0; n/=10) {
214 int nDigitValue = nNum/n;
215 if(nDigitValue || bDidSomeOutput){
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700216 bDidSomeOutput = true;
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800217 UsefulOutBuf_AppendByte(&OutBuf, (uint8_t)('0' + nDigitValue));
218 nNum -= nDigitValue * n;
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700219 }
220 }
221 if(!bDidSomeOutput){
222 UsefulOutBuf_AppendByte(&OutBuf, '0');
223 }
224 UsefulOutBuf_AppendByte(&OutBuf, '\0');
225
226 return UsefulOutBuf_GetError(&OutBuf) ? "" : StringMem.ptr;
227}
228
229
230/*
231 Public function. See run_test.h.
232 */
Laurence Lundblade29501b72020-01-16 15:05:18 -0800233int RunTestsQCBOR(const char *szTestNames[],
Laurence Lundbladeee851742020-01-08 08:37:05 -0800234 OutputStringCB pfOutput,
235 void *poutCtx,
236 int *pNumTestsRun)
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700237{
238 int nTestsFailed = 0;
239 int nTestsRun = 0;
Laurence Lundblade59289e52019-12-30 13:44:37 -0800240
Laurence Lundblade6216b1b2019-09-27 11:24:39 +0900241 UsefulBuf_MAKE_STACK_UB(StringStorage, 12);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530242
243 test_entry2 *t2;
244 const test_entry2 *s_tests2_end = s_tests2 + sizeof(s_tests2)/sizeof(test_entry2);
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800245
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530246 for(t2 = s_tests2; t2 < s_tests2_end; t2++) {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800247 if(szTestNames[0]) {
248 // Some tests have been named
249 const char **szRequestedNames;
250 for(szRequestedNames = szTestNames; *szRequestedNames; szRequestedNames++) {
251 if(!strcmp(t2->szTestName, *szRequestedNames)) {
252 break; // Name matched
253 }
254 }
255 if(*szRequestedNames == NULL) {
256 // Didn't match this test
257 continue;
258 }
259 } else {
260 // no tests named, but don't run "disabled" tests
261 if(!t2->bEnabled) {
262 // Don't run disabled tests when all tests are being run
263 // as indicated by no specific test names being given
264 continue;
265 }
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800266 }
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800267
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800268 const char * szTestResult = (t2->test_fun)();
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530269 nTestsRun++;
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800270 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800271 (*pfOutput)(t2->szTestName, poutCtx, 0);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530272 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800273
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800274 if(szTestResult) {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800275 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800276 (*pfOutput)(" FAILED (returned ", poutCtx, 0);
277 (*pfOutput)(szTestResult, poutCtx, 0);
Laurence Lundbladedf1c1cf2019-01-17 11:55:05 -0800278 (*pfOutput)(")", poutCtx, 1);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530279 }
280 nTestsFailed++;
281 } else {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800282 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800283 (*pfOutput)( " PASSED", poutCtx, 1);
Laurence Lundbladedc6e28e2018-10-11 19:19:27 +0530284 }
285 }
286 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800287
288
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700289 test_entry *t;
290 const test_entry *s_tests_end = s_tests + sizeof(s_tests)/sizeof(test_entry);
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800291
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700292 for(t = s_tests; t < s_tests_end; t++) {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800293 if(szTestNames[0]) {
294 // Some tests have been named
295 const char **szRequestedNames;
296 for(szRequestedNames = szTestNames; *szRequestedNames; szRequestedNames++) {
297 if(!strcmp(t->szTestName, *szRequestedNames)) {
298 break; // Name matched
299 }
300 }
301 if(*szRequestedNames == NULL) {
302 // Didn't match this test
303 continue;
304 }
305 } else {
306 // no tests named, but don't run "disabled" tests
307 if(!t->bEnabled) {
308 // Don't run disabled tests when all tests are being run
309 // as indicated by no specific test names being given
310 continue;
311 }
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800312 }
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800313
Laurence Lundbladec5fef682020-01-25 11:38:45 -0800314 int32_t nTestResult = (t->test_fun)();
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700315 nTestsRun++;
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800316 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800317 (*pfOutput)(t->szTestName, poutCtx, 0);
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700318 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800319
Laurence Lundbladea2e29072018-12-30 09:20:06 -0800320 if(nTestResult) {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800321 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800322 (*pfOutput)(" FAILED (returned ", poutCtx, 0);
323 (*pfOutput)(NumToString(nTestResult, StringStorage), poutCtx, 0);
324 (*pfOutput)(")", poutCtx, 1);
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700325 }
326 nTestsFailed++;
327 } else {
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800328 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800329 (*pfOutput)( " PASSED", poutCtx, 1);
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700330 }
331 }
332 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800333
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700334 if(pNumTestsRun) {
335 *pNumTestsRun = nTestsRun;
336 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800337
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800338 if(pfOutput) {
Laurence Lundbladed396f622019-01-12 17:12:29 -0800339 (*pfOutput)( "SUMMARY: ", poutCtx, 0);
340 (*pfOutput)( NumToString(nTestsRun, StringStorage), poutCtx, 0);
341 (*pfOutput)( " tests run; ", poutCtx, 0);
342 (*pfOutput)( NumToString(nTestsFailed, StringStorage), poutCtx, 0);
343 (*pfOutput)( " tests failed", poutCtx, 1);
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700344 }
Laurence Lundblade3aee3a32018-12-17 16:17:45 -0800345
Laurence Lundbladef156fb82018-10-01 09:47:03 -0700346 return nTestsFailed;
347}
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800348
349
Laurence Lundblade844bb5c2020-03-01 17:27:25 -0800350
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800351
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700352/*
353 Public function. See run_test.h.
354 */
Laurence Lundbladeee851742020-01-08 08:37:05 -0800355static void PrintSize(const char *szWhat,
356 uint32_t uSize,
357 OutputStringCB pfOutput,
358 void *pOutCtx)
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800359{
Laurence Lundbladed396f622019-01-12 17:12:29 -0800360 UsefulBuf_MAKE_STACK_UB(buffer, 20);
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800361
Laurence Lundbladed396f622019-01-12 17:12:29 -0800362 (*pfOutput)(szWhat, pOutCtx, 0);
363 (*pfOutput)(" ", pOutCtx, 0);
Laurence Lundblade06350ea2020-01-27 19:32:40 -0800364 (*pfOutput)(NumToString((int32_t)uSize, buffer), pOutCtx, 0);
Laurence Lundbladed396f622019-01-12 17:12:29 -0800365 (*pfOutput)("", pOutCtx, 1);
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800366}
367
Laurence Lundbladea65b4822019-09-08 12:17:03 -0700368
369/*
370 Public function. See run_test.h.
371 */
Laurence Lundblade29501b72020-01-16 15:05:18 -0800372void PrintSizesQCBOR(OutputStringCB pfOutput, void *pOutCtx)
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800373{
Laurence Lundbladeee851742020-01-08 08:37:05 -0800374 // These will never be large so cast is safe
375 PrintSize("sizeof(QCBORTrackNesting)", (uint32_t)sizeof(QCBORTrackNesting), pfOutput, pOutCtx);
Laurence Lundbladed396f622019-01-12 17:12:29 -0800376 PrintSize("sizeof(QCBOREncodeContext)", (uint32_t)sizeof(QCBOREncodeContext), pfOutput, pOutCtx);
377 PrintSize("sizeof(QCBORDecodeNesting)", (uint32_t)sizeof(QCBORDecodeNesting), pfOutput, pOutCtx);
378 PrintSize("sizeof(QCBORDecodeContext)", (uint32_t)sizeof(QCBORDecodeContext), pfOutput, pOutCtx);
Laurence Lundbladeee851742020-01-08 08:37:05 -0800379 PrintSize("sizeof(QCBORItem)", (uint32_t)sizeof(QCBORItem), pfOutput, pOutCtx);
Laurence Lundbladed396f622019-01-12 17:12:29 -0800380 (*pfOutput)("", pOutCtx, 1);
Laurence Lundblade1f8b5b02019-01-01 22:27:38 -0800381}