LCOV - code coverage report
Current view: top level - test - test_datatype.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 60 60 100.0 %
Date: 2026-07-14 21:28:07 Functions: 5 5 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 46 88 52.3 %

           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                 :            : }

Generated by: LCOV version 1.16