Branch data Line data Source code
1 : : // Copyright 2011-2025 David Robillard <d@drobilla.net> 2 : : // SPDX-License-Identifier: ISC 3 : : 4 : : #undef NDEBUG 5 : : 6 : : #include <exess/exess.h> 7 : : 8 : : #include <assert.h> 9 : : #include <stdbool.h> 10 : : #include <string.h> 11 : : 12 : : static bool 13 : 23 : datatype_uri_equals(const ExessDatatype datatype, 14 : : const char* const expected_uri) 15 : : { 16 : 23 : const char* const uri = exess_datatype_uri(datatype); 17 : : 18 [ + - + - ]: 23 : return uri && !strcmp(uri, expected_uri); 19 : : } 20 : : 21 : : static void 22 : 1 : test_datatype_uri(void) 23 : : { 24 [ - + ]: 1 : assert(!exess_datatype_uri(EXESS_NOTHING)); 25 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_BOOLEAN, EXESS_XSD_URI "boolean")); 26 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_DECIMAL, EXESS_XSD_URI "decimal")); 27 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_DOUBLE, EXESS_XSD_URI "double")); 28 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_FLOAT, EXESS_XSD_URI "float")); 29 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_INTEGER, EXESS_XSD_URI "integer")); 30 : : 31 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_NON_POSITIVE_INTEGER, 32 : : EXESS_XSD_URI "nonPositiveInteger")); 33 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_NEGATIVE_INTEGER, 34 : : EXESS_XSD_URI "negativeInteger")); 35 : : 36 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_LONG, EXESS_XSD_URI "long")); 37 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_INT, EXESS_XSD_URI "int")); 38 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_SHORT, EXESS_XSD_URI "short")); 39 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_BYTE, EXESS_XSD_URI "byte")); 40 : : 41 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_NON_NEGATIVE_INTEGER, 42 : : EXESS_XSD_URI "nonNegativeInteger")); 43 : : 44 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_ULONG, EXESS_XSD_URI "unsignedLong")); 45 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_UINT, EXESS_XSD_URI "unsignedInt")); 46 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_USHORT, EXESS_XSD_URI "unsignedShort")); 47 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_UBYTE, EXESS_XSD_URI "unsignedByte")); 48 : : 49 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_POSITIVE_INTEGER, 50 : : EXESS_XSD_URI "positiveInteger")); 51 : : 52 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_DURATION, EXESS_XSD_URI "duration")); 53 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_DATE_TIME, EXESS_XSD_URI "dateTime")); 54 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_TIME, EXESS_XSD_URI "time")); 55 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_DATE, EXESS_XSD_URI "date")); 56 : : 57 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_HEX, EXESS_XSD_URI "hexBinary")); 58 [ - + ]: 1 : assert(datatype_uri_equals(EXESS_BASE64, EXESS_XSD_URI "base64Binary")); 59 : : 60 : : // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange) 61 [ - + ]: 1 : assert(!exess_datatype_uri((ExessDatatype)(EXESS_BASE64 + 1))); 62 : : 63 : : // NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange) 64 [ - + ]: 1 : assert(!exess_datatype_name((ExessDatatype)(EXESS_BASE64 + 1))); 65 : 1 : } 66 : : 67 : : static void 68 : 1 : test_datatype_from_uri(void) 69 : : { 70 [ + + ]: 27 : for (unsigned i = 1U; i <= EXESS_MAX_DATATYPE; ++i) { 71 : 26 : const ExessDatatype datatype = (ExessDatatype)i; 72 : 26 : const char* const uri = exess_datatype_uri(datatype); 73 [ - + ]: 26 : assert(uri); 74 [ - + ]: 26 : assert(exess_datatype_from_uri(uri) == datatype); 75 : : } 76 : : 77 [ - + ]: 1 : assert(exess_datatype_from_uri(EXESS_XSD_URI) == EXESS_NOTHING); 78 [ - + ]: 1 : assert(exess_datatype_from_uri(EXESS_XSD_URI "unknown") == EXESS_NOTHING); 79 [ - + ]: 1 : assert(exess_datatype_from_uri("garbage") == EXESS_NOTHING); 80 [ - + ]: 1 : assert(exess_datatype_from_uri("http://example.org/very/long/unknown/uri") == 81 : : EXESS_NOTHING); 82 : 1 : } 83 : : 84 : : static void 85 : 1 : test_datatype_from_name(void) 86 : : { 87 [ + + ]: 27 : for (unsigned i = 1U; i <= EXESS_MAX_DATATYPE; ++i) { 88 : 26 : const ExessDatatype datatype = (ExessDatatype)i; 89 : 26 : const char* const name = exess_datatype_name(datatype); 90 [ - + ]: 26 : assert(name); 91 [ - + ]: 26 : assert(exess_datatype_from_name(name) == datatype); 92 : : } 93 : : 94 [ - + ]: 1 : assert(!exess_datatype_from_name("")); 95 [ - + ]: 1 : assert(!exess_datatype_from_name("unknown")); 96 [ - + ]: 1 : assert(!exess_datatype_from_name("dateTimetrailing")); 97 [ - + ]: 1 : assert(!exess_datatype_from_name("garbage")); 98 [ - + ]: 1 : assert(!exess_datatype_from_name("http://example.org/uri")); 99 [ - + ]: 1 : assert(!exess_datatype_from_name(EXESS_XSD_URI)); 100 : 1 : } 101 : : 102 : : int 103 : 1 : main(int argc, char** argv) 104 : : { 105 : : (void)argv; 106 : : 107 : 1 : test_datatype_uri(); 108 : 1 : test_datatype_from_uri(); 109 : 1 : test_datatype_from_name(); 110 : : 111 : 1 : return argc == 1 ? 0 : 1; 112 : : }