From 2ddf10fb8bfabff3ecdbe9ea866a905631ec2866 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Wed, 26 Dec 2018 11:54:21 -0500 Subject: Add serd_new_boolean() --- include/serd/serd.h | 5 +++++ src/node.c | 7 +++++++ src/static_nodes.h | 1 + test/test_node.c | 22 ++++++++++++++++++++++ 4 files changed, 35 insertions(+) diff --git a/include/serd/serd.h b/include/serd/serd.h index 2dd551fd..80a12452 100644 --- a/include/serd/serd.h +++ b/include/serd/serd.h @@ -598,6 +598,11 @@ SERD_API SerdNode* SERD_ALLOCATED serd_new_file_uri(SerdStringView path, SerdStringView hostname); +/// Create a new node by serialising `b` into an xsd:boolean string +SERD_API +SerdNode* SERD_ALLOCATED +serd_new_boolean(bool b); + /** Create a new canonical xsd:decimal literal. diff --git a/src/node.c b/src/node.c index 6ba00048..b5a7816b 100644 --- a/src/node.c +++ b/src/node.c @@ -514,6 +514,13 @@ serd_new_custom_literal(const void* const user_data, return node; } +SerdNode* +serd_new_boolean(bool b) +{ + return serd_new_typed_literal(b ? SERD_STRING("true") : SERD_STRING("false"), + serd_node_string_view(&serd_xsd_boolean.node)); +} + SerdNode* serd_new_decimal(const double d, const SerdNode* const datatype) { diff --git a/src/static_nodes.h b/src/static_nodes.h index 18950444..952c0634 100644 --- a/src/static_nodes.h +++ b/src/static_nodes.h @@ -32,6 +32,7 @@ typedef struct StaticNode { {sizeof(NS_XSD #name) - 1, 0, SERD_URI}, NS_XSD #name}; DEFINE_XSD_NODE(base64Binary) +DEFINE_XSD_NODE(boolean) DEFINE_XSD_NODE(decimal) DEFINE_XSD_NODE(integer) diff --git a/test/test_node.c b/test/test_node.c index 968d4ada..f286aa16 100644 --- a/test/test_node.c +++ b/test/test_node.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -117,6 +118,26 @@ test_integer_to_node(void) } } +static void +test_boolean(void) +{ + SerdNode* const true_node = serd_new_boolean(true); + assert(!strcmp(serd_node_string(true_node), "true")); + + const SerdNode* const true_datatype = serd_node_datatype(true_node); + assert(true_datatype); + assert(!strcmp(serd_node_string(true_datatype), NS_XSD "boolean")); + serd_node_free(true_node); + + SerdNode* const false_node = serd_new_boolean(false); + assert(!strcmp(serd_node_string(false_node), "false")); + + const SerdNode* const false_datatype = serd_node_datatype(false_node); + assert(false_datatype); + assert(!strcmp(serd_node_string(false_datatype), NS_XSD "boolean")); + serd_node_free(false_node); +} + static void test_blob_to_node(void) { @@ -302,6 +323,7 @@ main(void) test_new_decimal(); test_integer_to_node(); test_blob_to_node(); + test_boolean(); test_node_equals(); test_node_from_string(); test_node_from_substring(); -- cgit v1.2.1