test_term.c 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. #include "test.h"
  2. static int test_iriref()
  3. {
  4. char *uri1_data = "http://example.org/term#12345";
  5. char *uri2_data = "ns1:12345";
  6. char *uri3_data = "ns2:12345";
  7. LSUP_NSMap *nsm1 = LSUP_nsmap_new();
  8. LSUP_nsmap_add (nsm1, "ns1", "http://example.org/term#");
  9. LSUP_NSMap *nsm2 = LSUP_nsmap_new();
  10. LSUP_nsmap_add (nsm2, "ns2", "http://example.org/term#");
  11. LSUP_Term *uri1 = LSUP_iriref_new (uri1_data, NULL);
  12. ASSERT (uri1, "IRI is NULL!");
  13. ASSERT (LSUP_iriref_nsm (uri1) == NULL, "Wrong NSMap!");
  14. EXPECT_STR_EQ (LSUP_iriref_prefix (uri1), "http://example.org");
  15. EXPECT_STR_EQ (LSUP_iriref_path (uri1), "/term#12345");
  16. EXPECT_STR_EQ (LSUP_iriref_frag (uri1), "12345");
  17. LSUP_Term *uri2 = LSUP_iriref_new (uri2_data, nsm1);
  18. ASSERT (uri2, "IRI is NULL!");
  19. ASSERT (LSUP_iriref_nsm (uri2) == nsm1, "Wrong NSMap!");
  20. LSUP_Term *uri3 = LSUP_iriref_new (uri3_data, nsm2);
  21. ASSERT (uri3, "IRI is NULL!");
  22. ASSERT (LSUP_iriref_nsm (uri3) == nsm2, "Wrong NSMap!");
  23. LSUP_Term *uri4 = LSUP_iriref_new (NULL, NULL);
  24. ASSERT (uri4, "IRI is NULL!");
  25. LSUP_Term *uri5 = LSUP_iriref_new (NULL, NULL);
  26. ASSERT (uri5, "IRI is NULL!");
  27. EXPECT_INT_EQ (uri1->type, LSUP_TERM_IRIREF);
  28. EXPECT_INT_EQ (uri2->type, LSUP_TERM_NS_IRIREF);
  29. EXPECT_INT_EQ (uri3->type, LSUP_TERM_NS_IRIREF);
  30. EXPECT_INT_EQ (uri4->type, LSUP_TERM_IRIREF);
  31. EXPECT_INT_EQ (uri5->type, LSUP_TERM_IRIREF);
  32. ASSERT (LSUP_term_equals (uri1, uri2), "IRIs don't match!");
  33. ASSERT (LSUP_term_equals (uri2, uri3), "IRIs don't match!");
  34. ASSERT (!LSUP_term_equals (uri3, uri4), "IRIs shouldn't match!");
  35. ASSERT (!LSUP_term_equals (uri4, uri5), "IRIs shouldn't match!");
  36. return 0;
  37. }
  38. static int test_literal()
  39. {
  40. char *data = "hello";
  41. char *datatype = "urn:my:datatype";
  42. char *lang = "en-US";
  43. LSUP_Term *lit1 = LSUP_literal_new (data, LSUP_iriref_new (datatype, NULL));
  44. EXPECT_INT_EQ (lit1->type, LSUP_TERM_LITERAL);
  45. EXPECT_STR_EQ (lit1->data, data);
  46. EXPECT_STR_EQ (lit1->datatype->data, datatype);
  47. LSUP_Term *lit2 = LSUP_literal_new (data, LSUP_default_datatype);
  48. EXPECT_INT_EQ (lit2->type, LSUP_TERM_LITERAL);
  49. EXPECT_STR_EQ (lit2->data, data);
  50. EXPECT_STR_EQ (lit2->datatype->data, DEFAULT_DTYPE);
  51. LSUP_Term *lit3 = LSUP_literal_new (data, NULL);
  52. EXPECT_INT_EQ (lit3->type, LSUP_TERM_LITERAL);
  53. EXPECT_STR_EQ (lit3->data, data);
  54. EXPECT_STR_EQ (lit3->datatype->data, DEFAULT_DTYPE);
  55. ASSERT (lit1->datatype != lit2->datatype, "Wrong data type match!");
  56. ASSERT (lit2->datatype == lit3->datatype, "Data type mismatch!");
  57. ASSERT (!LSUP_term_equals (lit1, lit2), "Wrong term match!");
  58. ASSERT (LSUP_term_equals (lit2, lit3), "Term mismatch!");
  59. LSUP_Term *lt_lit1 = LSUP_lt_literal_new (data, lang);
  60. EXPECT_INT_EQ (lt_lit1->type, LSUP_TERM_LT_LITERAL);
  61. EXPECT_STR_EQ (lt_lit1->data, data);
  62. EXPECT_STR_EQ (lt_lit1->lang, lang);
  63. // LT-literal without lang is a normal string literal.
  64. LSUP_Term *lt_lit2 = LSUP_lt_literal_new (data, NULL);
  65. EXPECT_INT_EQ (lt_lit2->type, LSUP_TERM_LITERAL);
  66. EXPECT_STR_EQ (lt_lit2->data, data);
  67. ASSERT (LSUP_term_equals (lt_lit2, lit2), "Term mismatch!");
  68. EXPECT_STR_EQ (lt_lit2->datatype->data, DEFAULT_DTYPE);
  69. LSUP_term_free (lit1);
  70. LSUP_term_free (lit2);
  71. LSUP_term_free (lit3);
  72. LSUP_term_free (lt_lit1);
  73. LSUP_term_free (lt_lit2);
  74. return 0;
  75. }
  76. static int test_term_serialize_deserialize()
  77. {
  78. LSUP_Term *uri = LSUP_iriref_new ("http://hello.org", NULL);
  79. LSUP_Term *lit = LSUP_literal_new ("hello", NULL);
  80. LSUP_Term *tlit = LSUP_literal_new (
  81. "hello", LSUP_iriref_new ("urn:mydatatype:string", NULL));
  82. LSUP_Term *llit = LSUP_lt_literal_new ("hello", "en-US");
  83. LSUP_Buffer *sterm;
  84. LSUP_Term *dsterm;
  85. sterm = LSUP_term_serialize (uri);
  86. ASSERT (sterm != NULL, "Error serializing term!");
  87. //log_info ("%s", "Serialized URI: ");
  88. //LSUP_buffer_print (sterm);
  89. //log_info ("%s", "\n");
  90. dsterm = LSUP_term_new_from_buffer (sterm);
  91. ASSERT (dsterm != NULL, "Error deserializing term!");
  92. ASSERT (LSUP_term_equals (dsterm, uri), "URI serialization error!");
  93. LSUP_term_free (uri);
  94. LSUP_buffer_free (sterm);
  95. LSUP_term_free (dsterm);
  96. sterm = LSUP_term_serialize (lit);
  97. ASSERT (sterm != NULL, "Error serializing term!");
  98. //log_info ("%s", "Serialized literal: ");
  99. //LSUP_buffer_print (sterm);
  100. //log_info ("%s", "\n");
  101. dsterm = LSUP_term_new_from_buffer (sterm);
  102. ASSERT (dsterm != NULL, "Error deserializing term!");
  103. ASSERT (LSUP_term_equals (dsterm, lit), "lit serialization error!");
  104. LSUP_term_free (lit);
  105. LSUP_buffer_free (sterm);
  106. LSUP_term_free (dsterm);
  107. sterm = LSUP_term_serialize (tlit);
  108. ASSERT (sterm != NULL, "Error serializing term!");
  109. //log_info ("%s", "Serialized typed literal: ");
  110. //LSUP_buffer_print (sterm);
  111. //log_info ("%s", "\n");
  112. dsterm = LSUP_term_new_from_buffer (sterm);
  113. ASSERT (dsterm != NULL, "Error deserializing term!");
  114. ASSERT (LSUP_term_equals (dsterm, tlit), "tlit serialization error!");
  115. LSUP_term_free (tlit);
  116. LSUP_buffer_free (sterm);
  117. LSUP_term_free (dsterm);
  118. sterm = LSUP_term_serialize (llit);
  119. ASSERT (sterm != NULL, "Error serializing term!");
  120. //log_info ("%s", "Serialized typed and language-tagged URI: ");
  121. //LSUP_buffer_print (sterm);
  122. //log_info ("%s", "\n");
  123. dsterm = LSUP_term_new_from_buffer (sterm);
  124. ASSERT (dsterm != NULL, "Error deserializing term!");
  125. ASSERT (LSUP_term_equals (dsterm, llit), "URI serialization error!");
  126. LSUP_term_free (llit);
  127. LSUP_buffer_free (sterm);
  128. LSUP_term_free (dsterm);
  129. return 0;
  130. }
  131. static int test_term_to_key()
  132. {
  133. LSUP_NSMap *nsm = LSUP_nsmap_new();
  134. LSUP_nsmap_add (nsm, "ns1", "http://hello.org/term#");
  135. LSUP_Term *uri1 = LSUP_iriref_new ("http://hello.org/term#bye", NULL);
  136. LSUP_Term *uri2 = LSUP_iriref_new ("ns1:bye", nsm);
  137. LSUP_Term *lit = LSUP_literal_new ("hello", NULL);
  138. LSUP_Term *tlit = LSUP_literal_new ("hello", LSUP_default_datatype);
  139. LSUP_Term *llit1 = LSUP_lt_literal_new ("hello", "en-US");
  140. LSUP_Term *llit2 = LSUP_lt_literal_new ("hello", "en-GB");
  141. LSUP_Term *llit3 = LSUP_lt_literal_new ("hello", NULL);
  142. LSUP_Key uri1_key = LSUP_term_hash (uri1);
  143. LSUP_Key uri2_key = LSUP_term_hash (uri2);
  144. LSUP_Key lit_key = LSUP_term_hash (lit);
  145. LSUP_Key tlit_key = LSUP_term_hash (tlit);
  146. LSUP_Key llit1_key = LSUP_term_hash (llit1);
  147. LSUP_Key llit2_key = LSUP_term_hash (llit2);
  148. LSUP_Key llit3_key = LSUP_term_hash (llit3);
  149. ASSERT (uri1_key == uri2_key, "URI keys differ!");
  150. ASSERT (uri1_key != lit_key, "URI key conflict!");
  151. ASSERT (lit_key == tlit_key, "URI keys differ!");
  152. ASSERT (lit_key != llit1_key, "URI key conflict!");
  153. ASSERT (tlit_key != llit1_key, "URI key conflict!");
  154. ASSERT (llit1_key != llit2_key, "URI key conflict!");
  155. ASSERT (tlit_key == llit3_key, "URI keys differ!");
  156. LSUP_term_free (uri1);
  157. LSUP_term_free (uri2);
  158. LSUP_term_free (lit);
  159. LSUP_term_free (tlit);
  160. LSUP_term_free (llit1);
  161. LSUP_term_free (llit2);
  162. return 0;
  163. }
  164. int term_tests() {
  165. RUN (test_iriref);
  166. RUN (test_literal);
  167. RUN (test_term_serialize_deserialize);
  168. RUN (test_term_to_key);
  169. return 0;
  170. }